如何用通义灵码实现文本分析:以《红楼梦》人物出场统计为例
作者:应晖,华侨大学计算机科学与技术学院 教学负责人
本文将以统计《红楼梦》中人物出场次数为例,介绍如何使用通义灵码进行简单的词频统计。我们将分析一部红楼梦中关键角色出场次数前 10 位有哪些,并生成一个饼图。通过可视化的数据,让我们直观地了解到红楼梦出场频率最高的 10 位主要人物的戏份占比,能够分析到小说作者的关注点在哪里。小说的素材可以是网上获得的免费 txt 文档。工作流程一样,因此该方法不止限于分析一部小说,而适合所有的小说分析、文本分析、甚至各种社交媒体网文的信息分析等等。(本文略有删减。)
文本预处理
(1)将红楼梦文件(“hlm.txt”)拷贝到“示例 4”文件夹中。创建文件夹的方法如前章所述。

(2)在“示例 4”文件夹中,新建一个名为“去掉一些无关内容 .py”的 Python 源文件。方法如前章所述。完成源文件创建后,如下图所示。

(3)设置通义灵码的工作状态为“文件编辑”,关联文件为“去掉一些无关内容.py”,在通义灵码的工作区域写入需求:“将 hlm.txt 文档中,所有的中文标点符号用空格取代,并将新生成的文件命名为 temp.txt ,放入同一目录中”。提交后同意修改。

(4)运行“去掉一些无关内容.py”之后,生成了“temp.txt”文件。双击该文件,可以查看该文件。发现存在一点瑕疵,“:”未去除。

(5)还要去掉中文“:”。提交后接受修改。

(6)再次运行后,双击查看“temp.txt”文件。可以发现所有的中文符号都被替换为了空格。

(7)可以通过拖动区域边框和滚动条,检查一下,是否已经用空格取代了全文所有的标点符号。

切词后词频统计
(1)在“示例 4”文件夹中,再生成一个名为:“词频统计.py”的新 Python 源文件。接着使用“文件编辑”工作方式,确认关联“词频统计.py”文件后,在通义灵码工作区域输入需求:“使用 jieba 库,对“temp.txt”文档进行切词,统计词频,按照从高到低的顺序显示到控制台”。提交后接受修改。

中文的书写方式有别于英文的书写方式,不存在空格做词分割。在做中文语义分析的时候,需要使用工具对中文句子进行切词,将完整的句子分割为一个一个的词。一般,可以使用 jieba 模块进行这个操作。

(2)如果需要使用 jieba 第三方模块进行切词,需要导入这个第三方库。前面章节中介绍的三种方案均可。以后类似的导入操作,就不再赘述。

(3)运行后,可以完成切词操作,同时在控制台出现统计出词频结果。

生成 stopword.txt
使用停用词(stopword)在做词频统计时是必要手段,主要是通过过滤低价值词汇,让分析更聚焦于有意义的语言特征。但其使用需结合具体任务和语言特性灵活调整。
3.1 生成停用词词典
为了过滤低价值的词汇,本小节中将介绍如何生成一个停用词词典。
(1)有一些明显不是主角的单个汉字被切词统计出来。在通义灵码工作区域输入:“统计词频的时候,要去掉单个汉字的词”。提交并接受修改。

(2)运行生成的代码后,可以看到所有的单个字都已经没有被统计了。

观察一下这些高频词,发现类似于“什么”,“一个”之类的词汇,对统计出场人物没有任何帮助。这些无意义词汇在做文本分析的时候是常见的。需要设置一个字典,来记录这些无意义的词汇,进而在做分析的时候,去除这些已经被记录在字典中的词。
这个字典一般被称为停用词(stopword)词典。
(3)需要在通义灵码工作区域中输入:“在显示出这些词和词频的同时,将这些词全部按照词频由高到低的顺序写入 stopword.txt 文档,写入时,不需要记录次数。 ”提交后接受修改。

(4)运行后,出现一个名为“stopword.txt”的文档。双击可以打开这个文档。这个文档中,按照词语出现次数

(5)读者可以在“stopword.txt”中人工去除人名,留下的就是对分析任务无意义的词。此处需要人为辨识操作。
在阅读的时候,发现了一些很奇怪的事情,比如“黛玉”和“林黛玉”同时存在;“贾政”和“贾政道”同时存在;“袭人”和“袭人道”同时存在;“贾母”和“贾母笑”同时存在;“林姑娘”和“黛玉”同时存在;“凤姐儿”和“凤姐”同时存在……这都是正常现象。因为中文的切词其实是很难的,并没有一个绝对能切词正确的工具可以使用。因此,需要想办法,进行一些人为干预的处理。
在通义灵码工作区域输入一下内容:“在生成 temp.txt 文件的时候,将‘道’字替换为空格,将‘儿’字替换为空格,将‘笑’字替换为空格,将‘老太太’替换为‘贾母’,将‘老祖宗’替换为‘贾母’,将‘凤姐’替换为‘王熙凤’,将‘贾宝玉’替换为‘宝玉’,将‘林姑娘’替换为‘黛玉’,将‘林妹妹’替换为‘黛玉’,将‘林黛玉’替换为‘黛玉’,将‘宝姐姐’替换为‘薛宝钗’。 ”但是此时涉及到原文的修改,在生成的 temp 文件中做出修改。因此需要将关联文件,改为“去掉一些无关内容 .py ” 。提交后接受修改。

(6)再次运行“去掉一些无关内容.py”,生成新的“temp.txt”文件
(7)再次运行“词频统计.py”
(8)此时双击新生成的“stopword.txt”,可以打开、查看该文件。控制台上出现的词频数也发生了改变。

(9) 把看上去像名字的高频词全部或者大部分去掉。同时观察有没有什么其他奇怪的词出现,如果有奇怪的词出现,就不断重复上面的步骤(5)~(8)。手工去除名字的操作如下所示。

统计出场最多的十个人
完成了“stopword.txt”之后,就可以将这个停用词词典应用于词频统计中。
(1)去掉留存在 stopword.txt 中出现的所有的词,即:“统计词频的时候不再统计‘ stopword.txt ’中出现的词,也不再需要将统计出来的词写入‘stopword.txt ’中。”提交后接受修改。

(2)运行后,可以看到出场次数排位靠前的人物。

(3)告诉通义灵码新的需求:“统计词频最高的 10 个词,并绘制成饼状图。 ”,提交后接受修改。

(4)“matplotlib”这个第三方模块已经在前面章节中安装过了,因此可以直接使用,不再需要导入。

(5)运行之后,就可以看到一张饼图。但是这个饼图上的人名是乱码。

(6)对通义灵码说:“字体设置为宋体。饼图标题变为:出场最多的 10 个角色。”提交后接受修改。

(7)运行后,得到一张饼状图,显示了各主要角色的出场占比。

小结
通过本文的学习,我们掌握了使用通义灵码进行简单词频统计的方法。以《红楼梦》为例,我们详细介绍了从文本预处理、切词后词频统计,到生成停用词词典,并最终统计出场最多的十个人的完整流程。
1. 在文本预处理阶段,读者学会了如何去除文本中的无关内容和标点符号,为后续的词频统计打下坚实基础。
2. 在切词后词频统计阶段,读者借助 jieba 库实现了中文文本的切词和词频统计,掌握了词频分析的基本方法。
3. 在生成停用词词典阶段,读者了解了停用词在文本分析中的重要性,并学会了如何生成和使用停用词词典来过滤无意义的词汇。
4. 读者还通过绘制饼状图的方式,将统计结果可视化呈现,使得分析结果更加直观易懂。这一技能在数据分析和可视化领域具有广泛的应用价值。
通义灵码下载体验:https://lingma.aliyun.com/download
版权声明: 本文为 InfoQ 作者【阿里云云效】的原创文章。
原文链接:【http://xie.infoq.cn/article/9bd8f1a5a948b74695379494e】。文章转载请联系作者。
评论