news 2026/10/19 13:04:34

四大名著NLP实战:从文本清洗到情感分析的全流程解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
四大名著NLP实战:从文本清洗到情感分析的全流程解析

最近我把手头折腾的几个方向串成了一个三篇系列:四大名著自然语言处理实战教程、AI编程助手使用教程、自然语言处理的应用与我的兴趣。三个主题看着跨度挺大——一边是古典文学文本,一边是写代码时的人工智能工具,最后还得聊点个人方向——但真把它们放到一起做下来,才发现这其实是一条完整的自然语言处理学习链:先用四大名著当语料跑通“语料清洗—分词—统计—关系抽取—情感分析”的全流程,再借AI编程助手把重复的代码活和排错环节提速,最后回到NLP本身去看应用场景、定自己的兴趣坐标。这篇文章就把这三篇的核心内容、实操细节和踩坑记录完整展开。

1. 先把三篇标题拆开看:这个系列真正要解决什么问题

很多人看到“自然语言处理实战教程”就觉得门槛高,看到“AI编程助手”又觉得是工具测评,看到“应用与兴趣”更以为是随笔。其实这三个标题放在一起,恰好对应了“会做、做快、做对方向”三个层次。

1.1 为什么从四大名著切入NLP

选四大名著当语料,不是因为情怀,而是因为它们是自然语言处理入门阶段几乎完美的实验对象。

第一,语料干净且合法。公共版权文本随处可得,不需要担心商业授权,也不涉及用户隐私脱敏,适合反复下载、清洗、折腾。第二,文本质量高,情节和人物关系特别丰富。《红楼梦》里人物几百号,《三国演义》里有大量阵营冲突和计谋描写,天然就是实体识别、关系抽取、情感分析的素材库。第三,语言层面有难度梯度。四本书主体是白话文,但夹杂诗词、章回体标题、文言对白,分词和预处理的坑一个不少,正好把问题暴露出来。

我做完这一套之后最大的感受是:与其到处找“干净标准”的新闻语料做练习,不如直接啃四大名著。语料里的脏数据、异体字、章回结构、诗词韵文,全在逼着你去认真处理,收获远大于跑一个现成数据集。

1.2 AI编程助手在系列里的位置

第二篇讲AI编程助手,不是给工具做广告,而是明确它的定位:在NLP实战中大量重复劳动,包括数据清洗、格式转换、正则匹配、调试报错,这些活完全可以让助手先干一版,再人工审查。

我在做四大名著项目时,最耗时间的其实不是算法设计,而是清洗文本和写样板代码。比如要去掉《西游记》每回末尾的“毕竟不知× ×如何,且听下回分解”,或者把《水浒传》里的人名统一格式,这种纯体力活用AI助手生成一段处理脚本,再手动微调,效率能翻好几倍。所以教程的思路不是“让AI替你想”,而是“让AI帮你写,你来判断”。

1.3 第三篇“应用与兴趣”是收束

第三篇看起来最“软”,实际上最重要。做技术最怕闷头学完一堆工具,却不知道往哪儿用。把NLP的落地场景梳理一遍之后,再回头确认自己到底喜欢什么方向——是偏文本分类、情感分析,还是偏语言生成、知识图谱,这直接决定了后面该深入什么技术栈。

关于“我的兴趣”,我给了自己一个比较聚焦的答案:古典文本的计算化分析。这个方向不算大众,但特别适合把NLP基本功练扎实,又能产生看得见的有趣结果,比如人物关系图、情节情感曲线、主题演化轨迹。

2. 四大名著NLP实战教程:从文本到结论的完整链路

这一篇是整个系列的硬核主体,完整走一遍四大名著的NLP处理流程。

2.1 语料获取与清洗:这一步决定后面能不能跑通

先解决语料来源。我这里用的是公开的电子书文本版,网上一搜一大把,但版本良莠不齐。建议优先选注明“人民文学出版社通行本”的转文本版本,内容相对完整。拿到的txt文件常见问题是:开头的空白行、目录信息、出版社说明,中间的段落被硬换行截断,结尾还有广告页或额外注释。

清洗策略分三步。第一步,统一编码。我一开始直接读txt,没注意文件是GBK编码,输出就乱码了,后来统一用Python读取时显式指定编码,再转成UTF-8存储。第二步,去噪音。用正则去掉空白字符、页码、“在线阅读”这类无关标记,并处理段落间的硬回车。第三步,抽取正文。四本书都有章回标题,比如“第一回 甄士隐梦幻识通灵”,这些标题在后面做章节维度的分析时是关键锚点,所以不能一股脑删掉,而是专门提取出来建一个章节索引表。

import re import pandas as pd with open('hongloumeng.txt', 'r', encoding='gbk', errors='ignore') as f: raw_text = f.read() # 去除多余空白,保留章节标题 text = re.sub(r'\s+', ' ', raw_text) chapters = re.findall(r'第[一二三四五六七八九十百]+回', text) print("检测到章节数:", len(chapters)) # 将文本按章节拆开 split_text = re.split(r'第[一二三四五六七八九十百]+回', text) for idx, section in enumerate(split_text[:5]): print(idx, section[:80])

这个环节的坑在于:四大名著的“回”字使用不完全统一,《红楼梦》有“第一回”,《水浒传》也有“第×回”,但也有“楔子”这样的前置单元。所以正则写完后必须手动抽查结果,不要迷信一次匹配成功。

2.2 分词与词频统计:先感受每本书的“气质”

分词我用的是jieba,原因就一个字:快。中文NLP入门绕不开这个库,加载自定义词典也方便。但直接拿默认词典跑四大名著,结果会很惨,人名大量被切开或切错。比如“贾宝玉”默认可能被分成“贾/宝玉”,“林黛玉”分成“林/黛玉”。

解决办法是加载自定义词典,把四本书的主要人物、地名、兵器名加进去。词典文件格式很简单,每行一个词,可带词频和词性。

import jieba import jieba.analyse from collections import Counter # 加载自定义词典 jieba.load_userdict('sldm_dict.txt') with open('hongloumeng_clean.txt', 'r', encoding='utf-8') as f: hl_text = f.read() words = jieba.lcut(hl_text) words = [w.strip() for w in words if w.strip()] # 简单停用词表 stopwords = set('的 了 是 我 你 他 她 它 在 有 和 就 不 人 都 一 一个 上 下 说 道 只见'.split()) filtered = [w for w in words if w not in stopwords and len(w) > 1] word_freq = Counter(filtered) print(word_freq.most_common(30))

停用词表这一块要特别注意。很多人直接下载网上的通用中文停用词表,结果把“说道”“只见”“不知”这些在古典小说里有叙事意义的词全过滤掉了,后面再做叙事分析就废了。我后来是跑了高频词之后,人工把明显是停用词的词挑出来,单独维护了一份《古典小说专用停用词》,效果比通用词典好很多。

四本书的词频一跑出来,差异非常有趣。《三国演义》高频词里有大量“丞相”“将军”“主公”,《水浒传》里“好汉”“弟兄”“寨主”很扎眼,《红楼梦》里则是“老太太”“太太”“宝玉”“黛玉”,《西游记》里“师父”“妖精”“菩萨”稳居前列。这种词频层面的差异,本身就是NLP最直观的“文本气质”呈现。

2.3 人物关系抽取:用共现法做一张关系网

词频只是最基础的一步,真正有意思的是人物关系发现。我用的是最简单的共现法:在同一个句子或同一个段落里,如果两个人物同时出现,就认为他们之间存在一次关系“接触”。统计所有人物两两共现的次数,就能得到一张加权关系网络。

具体做法是:

  • 先维护一个人物名称列表,从自定义词典或者人工整理的人名表里来。
  • 按段落把文本切块,在每个段落里检测出现了哪些人物。
  • 两两组合,把共现次数累加到矩阵里。
import pandas as pd from itertools import combinations person_list = ['贾宝玉', '林黛玉', '薛宝钗', '王熙凤', '贾母', '贾政', ...] matrix = pd.DataFrame(0, index=person_list, columns=person_list) paragraphs = re.split(r'[\n。!?;]', hl_text) for para in paragraphs: found = [p for p in person_list if p in para] for a, b in combinations(found, 2): matrix.loc[a, b] += 1 matrix.loc[b, a] += 1 # 取关系最强的 TopN top_relations = matrix.unstack().sort_values(ascending=False).reset_index() top_relations.columns = ['人物A', '人物B', '共现次数'] print(top_relations.head(20))

这个方法的优点是简单直观,缺点是噪音多。比如“贾宝玉”和“林黛玉”几乎每章都一起出现,共现次数高,是真实关系;但“贾母”和“王夫人”也经常同处一个场景,不一定有直接互动。所以后面做“关系强度”分析时,要引入更精细的度量,比如共现窗口减小到相邻句子,或者除以人物总出场次数做归一化。如果是给读者展示,建议直接用共现次数作为权重画图,效果最直观,分析时要提醒这只是粗粒度关系,不等于真实的社交亲密度。

人物表本身也值得聊聊。四本书加起来有名有姓的人物上千,我一开始想全列出来,发现根本列不全。正确姿势是先拿高频词里的人物词根做种子,再配合正则去文本里捞“××道”“××曰”“××笑道”这种人名+动词模式,半自动地扩展人物表。这个过程很繁琐,但做完之后对文本的理解会深很多。

2.4 情感曲线与章节叙事节奏:把“感觉”量化

做完人物关系,下一步试着做情感曲线。网上很多教程直接用SnowNLP的情感打分跑一遍四大名著,但效果很一般,因为SnowNLP是基于电商评论语料训练出来的,对古典文本的措辞风格不敏感,“可怜”“可叹”这种词很容易被单一贴标签。

我的做法是换个思路:不看整句的情感正负,而是统计每一章里“情感标记词”的密度。先人工整理一个带情感倾向的词典,比如“大喜”“悲”“怒”“哭”“笑”这类词,每个词给一个粗略的权重,然后统计每一章里这些词的频次,算出一个“情绪激烈度”。情绪激烈度和情节起伏的对应关系在小说里非常明显。

比如《红楼梦》前八十回和后四十回,情绪激烈度的变化趋势就有肉眼可见的差异。前八十回里大场面如“元妃省亲”“黛玉葬花”附近,情绪词密度明显升高;后半部分则整体偏低,和后四十回口碑差异的讨论也能对上。这种分析不需要多高级的模型,但胜在可解释、可复现,适合写在教程里给初学者建立“量化叙事”的概念。

2.5 结果可视化:让数据和图表替你说话

数据做出来了,不能只躺在csv里。我建议用pyecharts和wordcloud做两样东西:人物关系图和词云。人物关系图用pyecharts的Graph图,节点大小按出场次数,连线粗细按共现次数,能在网页端交互。词云用wordcloud库,但字体必须指定中文字体文件路径,否则出来全是方块。

这一步的经验是:可视化一定要“克制”。很多人把几百个人名全丢进关系图,结果密集得像蜘蛛网,毫无可读性。正确做法是只挑Top30人物,或者按阵营划分做局部图,比如只画《三国演义》里魏蜀吴各自的核心人物关系。视觉上的留白,才是专业感的来源。

3. AI编程助手使用教程:把重复劳动交给工具,把判断留给自己

做完四大名著的项目,我最大的感觉是:很多时间浪费在写清洗脚本、调试正则、调中文编码上。不是不会写,而是这些代码太重复、太琐碎。第二篇教程就是围绕“如何用AI编程助手把这些时间抢回来”展开的。

3.1 工具怎么选:先看补全能力,再看对话能力

当前市面上的AI编程助手很多,我没有在某一款上吊死,而是按照“能不能在编辑器里做行级补全+能不能针对报错做自然语言定位”两个标准来试。行级补全决定了你写普通代码时的流畅度,对话能力决定了你在遇到“为什么这段正则没匹配上”这类疑难杂症时能不能快速得到解释。

实操下来,我认为主力使用一款日常编码补全能力强的工具就够了,配合一个网页端的通用对话助手来处理大段代码生成和思路梳理。不要同时开七八个插件,每个插件都在后台跑模型,机器卡得不行,得不偿失。

3.2 用自然语言描述需求,让助手生成清洗脚本

以清洗《水浒传》章节文本为例。传统做法是打开编辑器,回忆一遍正则语法,然后慢慢调试。用AI助手的正确姿势是:把需求描述得足够具体。

我常用的描述模板是:

我有一个《水浒传》的txt文件,内容包含章节标题,例如“第一回 王教头私走延安府 九纹龙大闹史家村”,后面是正文。请帮我写一段Python脚本: 1. 读取GBK编码的txt; 2. 用正则匹配章节标题并提取回目名; 3. 按回目把正文切分成列表; 4. 去除每个段落里的空白字符和页脚广告; 5. 输出为结构化json。

助手返回的脚本我一般不会直接跑,而是先检查三点:正则是不是写得太贪心、文件路径是不是硬编码、有没有考虑编码异常。检查通过后放到项目里跑一遍,如果报错再把报错信息回贴给它。这个过程的核心是,AI负责快速生成“能跑的初稿”,我负责“能用的审查”。

3.3 让助手做代码解释,而不是重新搜索

项目里经常有一些看不懂的现成代码,尤其是别人写的数据处理脚本。以前我会把代码复制到搜索引擎里一段段查,现在直接丢给AI助手:“请解释这段代码的作用,特别是正则里(?<=...)的含义,以及为什么作者要用finditer而不是findall。”

这种用法特别适合学习。AI助手的解释通常比文档更口语化,而且可以直接针对你贴的代码给出具体反馈。但有一个前提:你必须已经有最基本的正则和Python语法底子,否则连它解释里的“lookbehind断言”都看不懂,又得从头补。

3.4 Prompt技巧:四个顺手好用的习惯

给AI编程助手下指令,我总结出四个习惯,按重要程度排序:

  • 带上下文。别只说“写个程序”,而是“我在做四大名著文本分析,现有文本已经按章节切分,需要统计每回人物名出现次数,输出csv”。上下文越全,生成结果越贴需求。
  • 给示例。比如“输入是一句‘林黛玉笑道’,输出应该是‘林黛玉’和‘笑’两个字段。请按这个格式处理全篇。”模型能根据示例推断格式。
  • 要求可执行。在指令最后加上“请给出可直接运行的Python代码,并包含必要的import”,减少它输出伪代码的概率。
  • 让助手自我纠错。如果第一次生成结果不对,我会问“结果中有哪些可能的边界情况没有考虑?”很多时候它能指出编码、空段落、正则特殊字符等问题。

3.5 别盲信AI:所有生成代码必须过测试

最后给AI编程助手的使用提个醒:它能让你写代码速度变快,但在你准确描述需求之前,它也会一本正经地生成错误代码。我在项目里要求自己:AI生成的脚本至少跑一遍最小测试用例,再把全量数据喂进去。比如清洗脚本,先拿正文前200字做迷你版跑一遍,确认不会误删章节标题,再去处理全本。这一步永远不能省。

4. 自然语言处理的应用与我的兴趣:从“能用”到“想用”

第三篇的内容是站在更高维度看NLP,也用来说清楚我自己为什么选择古典文本这条路。

4.1 NLP的落地场景,远比想象中广

很多人提到NLP就觉得是聊天机器人,其实它已经渗透到几乎所有处理文本的行业里。我把常见的应用场景整理成一张表:

应用场景典型任务核心技术点
搜索引擎查询理解、文档排序、query纠错语义匹配、排序学习
智能客服意图识别、槽位抽取、自动问答文本分类、序列标注
医疗健康电子病历结构化、症状抽取命名实体识别、关系抽取
法律文书合同条款审查、案例检索长文本分类、语义相似度
舆情分析情感判断、事件检测、传播链追踪情感分析、主题模型
教育领域作文批改、口语评测、知识点标签文本生成、语法纠错
金融风控公告舆情预警、财报信息抽取事件抽取、实体链接

圈子里的讨论经常聚焦“大模型能不能取代一切”,但落地项目的真实难点从来不是单个模型效果,而是数据标注、系统集成、效果评估这些脏活。比如一个法律合同审查系统,模型可能只占20%工作量,剩下的是合同文本解析、条款对齐、错误输出规则过滤。了解这些,对新人的择业和方向选择特别重要。

4.2 我的兴趣在“计算叙事学”这个交叉地带

把NLP应用场景过了一遍之后,我确认自己最喜欢的还是文本分析方向的活儿。于是把兴趣收敛到“计算叙事学”:用算法去拆解小说情节、人物弧线、情感节奏。四大名著自然语言处理这个项目,其实就是我在这个方向上的练手作。

和做搜索、做推荐比起来,古典文本分析没有实时性能压力,数据规模也小,适合一个人反复打磨,每一步都能看到有趣的结果。比如我最近在玩的《三国演义》阵营关系演化:把文本按时间线切成几段,分别计算魏蜀吴三方人物共现网络的重心变化,就能看到“联盟—对峙—吞并”的结构变迁。这种东西放在大厂业务里毫无用处,但作为兴趣和作品集,它足够说明你理解NLP的哪些环节。

另外,古典文本分析对模型的“审美能力”要求格外高。通用情感模型说“黛玉葬花”是伤感的,但为什么伤感、整段叙事是怎么铺垫到情感顶点的,这些就不是简单分类能回答的,需要把篇章结构、修辞模式都纳入建模。这种复杂度恰恰是迷人的地方。

4.3 给新手的NLP学习路线建议

基于我自己走过来的经验,给想入门NLP的新手提几条具体的路线建议:

  • 第一步,把Python基础打牢,尤其是字符串操作、正则表达式、文件读写。NLP第一道坎是文本清洗,不是模型。
  • 第二步,学会pandas,能用表格的方式理解文本特征。很多NLP中间结果都是表格,pandas用得顺,分析流程就顺。
  • 第三步,掌握jieba分词和词频统计,做一个小项目,比如给某本小说做一个词云。先跑通,再理解原理。
  • 第四步,接触命名实体识别和关系抽取,理解“实体—关系—事件”这个信息抽取框架。
  • 第五步,再上深度学习模型,比如BERT类的预训练模型做文本分类,这时候你对数据、特征、评估的理解已经能支撑模型学习了。

切忌一上来就微调大模型。没有前面数据处理的“体感”,模型调参调得再好,遇到真实脏数据照样崩。

5. 常见问题与排查技巧实录

做完整个系列,我把过程里最有代表性的问题和排查思路整理成速查表,这些全是硬经验。

问题现象原因分析排查与解决
分词把人名切碎默认词典不包含人名,jieba按单字切分概率高加载自定义词典,添加“贾宝玉”等词并指定词频;必要时用add_word
文本编码乱码文件原始编码不是UTF-8用chardet检测编码,读取时显式指定,如encoding=‘gbk’
情感分析结果离谱预训练模型语料领域不匹配,古典文本措辞特殊改用领域词典统计情感标记词,或人工标注小样本微调
正则匹配章节标题失败标题里可能有全角空格或中间有换行先统一压缩空白再做正则,观察原始字符串repr输出
人物关系图太乱人物太多、共现窗口太大、没有过滤低频组合限制TopN、缩小共现窗口、按阵营拆图
AI助手生成的脚本报错依赖版本不一致或文件路径硬编码告诉助手具体报错栈和Python版本,让它修正;用相对路径
词云中文变方块wordcloud默认字体不含中文指定中文字体文件路径,如simhei.ttf
处理全本txt时内存飙升一次性读入大规模文本并频繁正则分章节读取,边读边处理,用生成器做流式处理

这里面我想特别强调编码和内存两个坑。编码问题看似基础,但实际项目里至少有一半的“数据读不进来”是编码导致的。内存问题则提醒我们,拿到数据先看体积,一个几十MB的txt看似不大,但分词后每个字都变成Python对象,内存膨胀可以到十倍以上,这时候逐段处理比一次性处理更稳健。

还有一个经常被忽视的细节:正则中贪婪匹配与回溯问题。在清洗《红楼梦》时,我一开始用了一个比较宽泛的正则匹配人物对白,结果因为包含“(.+?)”这样的模式,在长文本上跑得极慢。排查下来是正则回溯导致的性能陷阱。拆分成小段文本再匹配,速度瞬间就上去了。这类问题教科书上不会教你,踩过一次就有肌肉记忆。

最后再说几句

我个人在整套折腾中最大的体会是:自然语言处理不是背几个模型名字、跑几个示例代码就能入门的,真正拉开差距的是处理文本时那种“手上沾泥”的感觉——你得亲手去碰乱糟糟的原始语料,被编码、正则、错别字、停用词一遍遍折磨,再把AI编程助手当成一个随时待命的协作者,用自己的判断给它把关,最后把一个模糊的兴趣收敛成具体的方向。四大名著这个项目恰恰给了我最完整的训练:从语料清洗到词频统计,从人物关系到情感曲线,再到用数据去重新理解经典叙事。如果你也想试试NLP,我建议直接找一本你最喜欢的书,下一个txt版本,先跑一遍分词,看看那些高频词里有没有你熟悉的名字。用一本熟悉的书做第一个项目,比任何课程都更容易坚持下去。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/19 13:02:56

mshtml.dll报错修复全指南:从缺失到加载失败的排查与解决

1. mshtml.dll弹出报错的真实身份&#xff1a;它不是病毒&#xff0c;但也可能被病毒利用如果你在电脑上遇到"打开软件就弹出mshtml.dll"的报错&#xff0c;先别急着恐慌&#xff0c;也别急着下载所谓的"修复工具"。这个以.dll结尾的文件&#xff0c;是Win…

作者头像 李华
网站建设 2026/10/19 13:01:18

PHP 7.2.3轻量树状论坛:支持自动采集与顶帖

简介&#xff1a;这是一套基于PHP 7.2.3开发的树型结构论坛系统&#xff0c;附带自动采集与顶帖功能模块&#xff0c;适用于Web开发初学者及中小型社区项目二次开发实践。资源共1497个文件&#xff0c;涵盖388个核心PHP业务逻辑文件、284个HTML/HTM静态页面模板、99个PNG与460个…

作者头像 李华
网站建设 2026/10/19 13:01:18

Spring Boot+Vue2仿CSDN实战:Web全栈工程闭环训练

简介&#xff1a;这是一份面向Web开发初学者与进阶学习者的仿CSDN网站实战源代码项目&#xff0c;旨在通过复现主流技术社区的核心功能&#xff0c;系统性提升全栈开发能力。资源共604个文件&#xff0c;涵盖328个GIF动图&#xff08;多用于界面交互示意&#xff09;、59个repo…

作者头像 李华
网站建设 2026/10/19 13:01:18

OpenClaw实战:从输入、处理到输出的AI任务编排全流程解析

1. 先从一条主线说起&#xff1a;OpenClaw 到底在解决什么问题1.1 很多人第一次打开 OpenClaw 是懵的&#xff1a;它到底是个什么工具OpenClaw 是一个开源的 AI 任务编排与自动化执行框架&#xff0c;简单说&#xff0c;它把“模型调用”和“业务逻辑”组装成一条可以稳定运行的…

作者头像 李华
网站建设 2026/10/19 13:00:10

AIoT端侧猫狗识别实战:从模型选型到多模态融合的工程化落地

1. 从一个喂食器的误触发说起&#xff1a;AIoT端侧识别的真实门槛去年帮一个做宠物硬件的团队看他们的智能喂食器样机&#xff0c;场景很简单&#xff1a;猫靠近就出粮&#xff0c;狗靠近不出粮&#xff0c;防止狗偷吃猫粮。听起来是个二分类问题&#xff0c;ImageNet上随便一个…

作者头像 李华
网站建设 2026/10/19 12:58:40

工业时序预测实战:基于CNN-BiLSTM-Attention的三模态融合模型

1. 三模态融合的架构设计与选型理由1.1 为什么偏偏是CNN、BiLSTM、Attention三件套工业时序预测&#xff08;比如设备剩余寿命预测、关键部件温度趋势预估、整线能耗滚动预报&#xff09;有一个共性痛点&#xff1a;数据维度高、噪声大、时间依赖长&#xff0c;单靠一种模型总是…

作者头像 李华