分享

R语言丨diRblo:中文文本分析方便工具包chinese.misc简介(附文本样例)

 九斗酒 2017-07-28


现在NLP技术那么发达了,各种工具那么NB了,可是用R做文本分析的人居然还得为如何读文件不乱码、如何分词、如何统计词频这样的事犯难,也是醉了。如果老停留在这个水平上,那各位亲你们离自己整天挂在嘴边儿的大数据机器学习之类的基本上就无缘了。所以希望大家能把更多精力放到算法上,而不是用在一些琐碎、浪费时间又极其恼人的事情上。  

其实像文本清理这种活儿,基本上就应该是用鼠标点吧点吧就能自动完成的,若要还费半天劲的话纯属扯淡。   

所以,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)



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多