标签:
散仙在上篇文章中,介绍过如何使用Pig来进行词频统计,整个流程呢,也是非常简单,只有短短5行代码搞定,这是由于Pig的内置函数TOKENIZE这个UDF封装了单词分割的核心流程,当然,我们的需求是各种各样的,Pig的内置函数,仅仅解决了80%我们常用的功能,如果稍微我有一些特殊的需求,就会发现内置函数解决不了,不过也无需担忧,Pig开放了各个UDF的接口和抽象类,从加载,转换,过滤,存储等等,都有对应的实现接口,只要我们实现或继承它,就非常方便扩展。
本篇呢,散仙会使用Ansj分词器+Pig来统计中文的词频,Pig的TOKENIZE只支持对英文句子的切分,为什么呢?因为英文的句子非常工整,都是以空格作为分割符的,而相当于中文来说,则不一样,中文的切分,需要有词库支持,才能分割出一个个词汇,或者比较暴力一点的,直接根据算法进行Ngram,也不需要词库支持,但这样切分出来的词汇,可能大部分时候都不太友好,意义也不太大,目前比较不错的开源的分词器有ansj,ik,meseg4j等,随便选一款就行,散仙在这里用的ansj的分词器,有对ansj感兴趣的朋友,可以参考此处
分词器选好了,分词功能也实现了,下一步就该考虑如何把这个功能与Pig集成起来,其实答案也很明显,仿照Pig官方TOKENIZE源码,再写一个基于中文分词功能的UDF,就可以了,对Pig源码感兴趣的朋友可以参考这个链接,以Web的形式展示的源码,非常清晰直观。
关于如何在Pig中自定义UDF函数,可以参考散仙的这一篇文章:
http://qindongliang.iteye.com/blog/2171303
下面给出,散仙扩展的基于中文分词的UDF类:
UDF写完后,需打成一个jar包,然后在Pig脚本里注册jar包(依赖的jar包也需要注册,例如本例中的ansj的jar),关于如何打包,注册,请参考散仙上篇文章,不要问我上篇文章在哪里,就在这文章里。
最后,我们来看下一个实际例子的效果,,散仙本打算把此篇博客给分析一下,统计下词频,看看能不能,通过高频词,直接看出本文的主题,后来立马否决了,因为此刻还没写完,不理解的就跳过,最后,从网上找了篇新闻,感兴趣的可以阅读下,原内容如下:
使用Pig分析完的部分topN结果如下:
最后来解释下,在一篇文章里,最多的词无疑是标点符号,和一些副词了,这不仅在中文里是这样,在英文里同样是这样的,最多的词往往是a,the,an,this之类的,副词什么的,所以统计词频前,一般会过滤掉一些无意义的词,这些散仙就不细说了,相信搞过搜索和自然语言处理的人,都很清楚,从结果前几个结果来看,确实证明了标点和一些连词与副词的频率最高,终于在结果的第六行,出现了第一个有意义的高频词,南水北调,频率是18次,这直接反映了本文的主题,并与之相关,有意义的高频词,一般就是本文的重点介绍内容,这一点在我们的数据挖掘,关键词提取,自然语言处理中用的比较多。
最后总结一下重点:
(1)测试的文本,在使用前是需要传到HDFS上的。
(2)注册jar包时,如果有依赖,也需要将依赖jar包注册在pig里。
(3)在真实的应用中,统计分析前,最好将一些无用的数据给过滤掉。
如果有什么疑问,欢迎扫码关注微信公众号:我是攻城师(woshigcs)
本公众号的内容是有关大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!
标签:
原文地址:http://www.cnblogs.com/qindongliang/p/4229735.html