7.3.2 基于quanteda包的词频统计

7.3.2 基于quanteda包的词频统计

完成中文文本分词后,接下来对文本进行词频分析。早期的R语言文本分析较多使用的是tm包,该包功能较为齐全,除了可以完成词频分析外,还可以实现文本的向量化转换。tm包以切分的词语标记为基础,可将文本转换为文档-词项矩阵(Document-Term Matrix,DTM),用于后续更为复杂的分析任务。然而,tm包有两个致命的缺点:一是处理大规模文本语料时速度不快,效率很低;二是由于其开发较早,更新维护不及时,代码的兼容性欠佳。

目前,R语言下的文本分析通常推荐使用quanteda包。该包由伦敦政治经济学院的肯尼思·比诺特(Kenneth Benoit)教授及其团队开发并维护。quanteda包从底层重新设计了从文本读入、预处理到不同粒度文本分析的流程与嵌入算法,不仅运行速度提升明显,主要函数语法的一致性也得到了优化,新用户上手也更为简单。总体而言,quanteda包有以下优点:

(1)有稳定团队跟踪维护;

(2)语法简洁、功能强大、分析高效;

(3)内部使用stringi包作为字符处理工具,能够较好处理中文等Unicode字符,有利于中文文本分析的开展;

(4)核心函数基于Rcpp、data.table等包开发,处理速度快。

下面将基于quanteda包完成多样的文本分析。

首先,使用install.packages()函数安装quanteda包:

然后按照quanteda包官网(https://quanteda.io)的建议安装以下软件包,以便更好地支持和扩展quanteda包的功能。

·readtext:用于读取包含文本的文件以及相关的文档级元数据,并将这些文本文件导入R环境中,具体参考第7.1节。

·spacyr:调用Python中的spaCy库完成自然语言处理,包括标注词性、命名实体和依存语法。

·quanteda.corpora:用于quanteda包的附加文本数据集。

·LIWCalike:R版语言探查与词频统计(Linguistic Inquiry and Word Count)软件。

后面两个包未在CRAN上开源,需要通过github工具下载:

使用quanteda包进行文本分析的步骤为:导入文本;构建语料库;构建文档特征矩阵(Document Feature Matrix,DFM);对文本进行不同粒度的分析。

readtext包能够读取并导入不同格式的文本文件,之后返回一个数据框对象,该对象可以直接用于quanteda包中的corpus()函数,进一步创建符合quanteda包格式的语料库对象。以quanteda包内置的2010年英国9个政党选举宣言的节选文本为例,对如何创建quanteda语料库进行说明,同时通过summary()函数来查看语料库文本的情况,示例如下:

对于中文文本,构建文档特征矩阵需要先做好中文分词。quanteda包也具有中文分词功能,调用tokens()函数即可完成中文分词,示例如下:

quanteda包继承了tidyverse包中的管道操作符,我们可以通过“% %”对token()函数加载停用词。quanteda包的停用词词库来源于百度停用词,示例如下:

我们可以在tokens()函数中设置remove_punct参数去除文本中的标点,还可以通过remove_numbers参数去除文本中的数字,示例如下:

分词只是一个中间结果,大多数用户都希望直接构建一个文档特征矩阵。quanteda包提供的dfm()函数可将所提取的特征归纳成文档特征矩阵。以2021年3月5日第十三届全国人民代表大会第四次会议上的政府工作报告为例,讲解如何建立文档特征矩阵,以及如何进行文本分析。

首先使用readtext包读取工作目录下的txt文本,对文本数据进行处理,对应代码如下:

然后使用dfm()函数构建文档特征矩阵并使用topfeatures()函数查看出现频次最高的特征,对应代码如下:

通过输出结果可以看到,“发展”“建设”等词汇的出现频次排在前面的位置,在一定程度上能够展示本次政府工作报告的重点。

接下来使用textplot_wordcloud()函数绘制dfm对象的词云图,这个函数将参数传递给wordcloud包的wordcloud()函数,并且可以使用相同的参数对图进行美化。要使用textplot_wordcloud()函数,需要先加载quanteda.textplots包,示例如下(结果如图7-9所示):

图7-9 词云图

在上述示例中可以发现,quanteda包的中文文本分词效果较差。在实际使用时,可以先用jiebaR包完成中文分词,再用quanteda包对分词后的中文文本进一步处理。