R文本挖掘初探之“天下风云出我辈, 一入江湖岁月催”(2)

浏览: 1580

原计划的4、5基本不打算去操作了,因为没有用到新的东西。这贴就记录下实现的过程,以及用到的知识和工具,期间遇到的各类问题及解决也会出现在这里。

起先,贴一些文本挖掘相关的背景知识,从一些“前辈”的博客中摘录过来,这里会标明出处。

文本挖掘大致可由三部分组成:底层是文本数据挖掘的基础领域,包括机器学习、数理统计、自然语言处理;在此基础上是文本数据挖掘的基本技术,有五大类,包括文本信息抽取、文本分类、文本聚类、文本数据压缩、文本数据处理;在基本技术之上是两个主要应用领域,包括信息访问和知识发现,信息访问包括信息检索、信息浏览、信息过滤、信息报告,知识发现包括数据分析、数据预测。其中需要付出大量人力物力的是文本信息的提取及内容分类,尤其对于中文来说不同领域不同行业的关键词术语各不相同,因此,构建一个适用于不同行业的关键词库显得尤为重要。

一个参考的结构

Clipboard Image.png

该图的作者刘思喆整理的R语言环境下的文本挖掘(右键另存)内容更为全面些,也点名了一些关键实现。不过发现关于tm包的用法跟英文的稍微有些出入,可能是tm包更新了的缘故吧。

文本挖掘与大多数的数据挖掘工作流程类似,只是面对的是各类自然语言的文本文档,各个环节会用到比结构化的数据多很多的特殊手段。就网络文本挖掘而言,信息采集就是一门比较复杂的学问,看到的比较有意思的一个帖子是(http://tech.techweb.com.cn/thread-438088-1-1.html)其中有个文本密度的概念比较有意思,从统计学的思想出发筛选出网页真正有价值的正文。中文而言,有其特殊性,一是中文不同于拉丁语系,不存在词之间的自然分割。二是中文变化太快,各种新词层出不穷,同义、多义、表达方式也各有千秋。本文的预料对象是金庸的笑傲江湖,一本我在高三读了2遍的小说。直接谷歌的txt版本下来。

如何将文本转化成计算机可以识别和处理的方式,就产生了文本表示的问题。常见的文本表示方法主要分为3类,向量空间模型、概率模型、概念模型。其中用的比较广的是向量空间模型,即将文档中的词通过此表映射到一个向量空间中来表示,这里不再展开。

中文分词算是一个比较成熟的研究领域,出了相当多的成果,其发展的历史可以蛮有启发意义。

R中的中文分词有rmmseg4j、Rwordseg等包,区别与比较建议参看Rwordseg作者,推荐使用Rwordseg,其使用的引擎是ansj,这是一个基于google语义模型+条件随机场模型的中文分词的java实现,目测更新的挺快的,期望Rwordseg作者同步更新。使用以来jvm,建议安装对应版本的jdk和jre,出现的一个问题参见rJava这里。

词典的选择对于分词的准确,尤其是大致了解文本的语境之后的词典选择,比如这次的词典就采用了两个:一个是金庸小说人物名词典,一个是武功招式词典,均来自搜狗的细胞词库,Rwordseg支持输入法的细胞词库还是蛮方便的。

选择好词典之后就是对文本的分词操作,之后就是构建一个词频矩阵,之后就可以聚类、分类啊之类的算法都可以直接用了。

主要人物的确定主要是按照词典查出来笑傲江湖中出现的人物名称,大约有140位,并且有统计出现频数:

Clipboard Image.png

之后借助词云工具就可以做出1中的词云图,本来想用用R的wordcloud包,无奈这个包的布局算法不太好,生成的图太丑了,放弃。当然尝试的过程中也出现了一些小插曲。比如R绘图中的中文字体问题,之后找到了Tagxedo这个工具,支持中文定制型也强,关键是可以指定轮廓,这个工具蛮酷的。有兴趣的可以上手玩玩,参看Tagxedo的101种玩法。

这部分用到的包主要有tm、Rwordseg。

第二部分,人物的出场顺序图,这个在统计出词频的时候信息已经提取出来了,可视化的手段可以更为直观的展示出来。将笑傲江湖拆分成了4000+个段,按段分别统计各个人物出现的次数,就会对每个人物产生一个序列,将4000个段抽象成4000个具有先后顺序的事件片,那么就得到各个人物的时间序列。可视化出来就直观的发现一些有趣的东西。主要人物如:令狐冲、岳不群、岳灵珊等就从头到尾都出境,次要人物就是牵出一个个场景,如林震南、劳德诺、丹青生、定静师太等,在属于他们的时刻活跃一阵子。当然可以进一步的分析。。。

画图的时候遇到一些问题,R图如何高清的保存,这里有个讨论:如何用R绘制高清的图,我在window环境下存成emf的清晰度还是可以接受的,直接存成png或者jpg真的不可以接受。还有一个问题是如何一张途中可以同时展示几个人物的情况。放的人多了吧,颜色区分度会很差,人类很难辨识,放的人少吧,表达的信息量有限。分面图是个很好的解决方案,但是在人数比较少的情况下,复合时间线图可能更合适。人眼到底能够却分的颜色有多少?这个还是个?

这部分用到的包有ggplot2、plyr、reshape2等。

第三部分类似于社交图,主要是提取出人物的关系。其实取决于对人物关系的定义,这里我假设两个人名同时出现在一个段里面就规定他们存在某种关系。于是只要看刚开始得到的那个矩阵的横向那些个不是0就可以了。

大概得到了8000+个关系。绘图用的是gephi,这个还是几年前做本科毕业论文的时候用的一个工具。在处理大数据的时候这个工具还是显得比较吃力,当然也可能是我的机器比较破。。。

QQ图片20170106140708.png

推荐 2
本文由 R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册