其实像文本清理这种活儿,基本上就应该是用鼠标点吧点吧就能自动完成的,若要还费半天劲的话纯属扯淡。 所以,chinese.misc这个R包就要来完成这个任务。 chinese.misc(目前为0.1.3版本)的功能极其简单,主要用于对中文文本进行数据清理工作,此外还包含另外一些实用的处理和分析功能。在生成文档-词语矩阵的功能上,可以代替对中文不是太支持的tm包,特别是在减少乱码方面。如果你现在还忙于看如何分词、如何删去停用词、如何计算词频之类的工作,那么这些都用不着看了,让我们把工作变得更无脑些!
这个包的中文手册见https://github.com/githubwwwjjj/chinese.misc。不过,英文pdf比中文说明详细多了。
chinese.misc的核心函数是corp_or_dtm,可直接从文件夹名/文件名/文本向量中生成文档-词语矩阵,并且自动或按使用者要求进行一些文本清理工作。
此外,软件包中dir_or_file、scancn、make_stoplist、slim_text等函数都是在中文文本分析中比较实用的函数,可以帮助使用者减少很多麻烦。
在这里,我只展示一下这个包的少数功能,其它功能还请大家去看中文手册。
文本样例请到http://pan.baidu.com/s/1nuXLBg1下载,里边是30篇中纪委巡视报告。如果你解压后文件数不对或是乱码,那几乎只可能是因为你正在使用MAC。请尽量在WINDOWS上搞 。我们假设你解压后的文件路径是'f:/sample'。
# 安装、加载。请使用3.3.2及以上版本的R install.packages('chinese.misc') library(chinese.misc) f='f:/sample' # 你的路径
# 我们现在想要一个词语-文档矩阵。你之前看到的网上飞的各种教程都在跟你们绕弯子,是不是觉得很麻烦?好吧,我们就用一个代码解决问题。 dtm=corp_or_dtm( f, type='d', stop_word='jiebar', control='auto2' )
# 在蹦了一串字儿之后,结果就出来了,跟用鼠标点点也没有太大区别。
# 但是我们会觉得词太多了,尽管我们在以上函数中去除了停用词,仍然还有不少虚词存在,因此我们往下砍词的力度不得不再大些。这时就可以用slim_text函数。此外,我们需要再对词语进行限制,除了希望保留的词语都至少有两个字符外,而希望这些词都至少出现过5回。 dtm=corp_or_dtm( f, type='d', stop_word='jiebar', myfun1=slim_text, control=list( wordLengths=c(2,25), have=c(5, 1000) ) )
# 果然,词语数量大幅减少了。
# 接下来,我们想看一下高频词有哪些,让我们看最前边的20个词: sort_tf(dtm, top=20) # 是的,结果会直接打在你屏幕上,你可以顺便复制粘贴到EXCEL里。当然,你也可以生成一个数据框: df=sort_tf(dtm, top=20, todf=TRUE)
# 然后呢,再看看词语之间的关联,比如: word_cor(dtm, word=c('作风', '纪律', '责任', '精神')) #嗯,出来俩表,上边那个是相关系数,下边是p值。我们可以用p值卡一下,如果一个回归系数的p值在0.2以就,就让它消失。 word_cor(dtm, word=c('作风', '纪律', '责任', '精神'), p=0.2)
# 再举个跟样例无关的例子。假如你现在有时间跨度为10年的一批论文,然后你已经用LDA之类的模型确定了它们的类别。那么怎么判断他们随年份变化的趋势呢,或者说,怎样求一个基本的话题热度指数?
## 先把随便造点儿数据 set.seed(123) year=sample(2007: 2016, 500, replace=TRUE) set.seed(1234) topic=sample(c('经济学', '文学', '法学', '管理学', '艺术', '心理学', '社会学'), 500, replace=TRUE) topic_trend(year, topic) |
|