- 浏览: 2149549 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
散仙在上篇文章中,介绍过如何使用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类:
package com.pigudf; import java.io.IOException; import java.util.List; import org.ansj.domain.Term; import org.ansj.splitWord.analysis.ToAnalysis; import org.apache.pig.EvalFunc; import org.apache.pig.backend.executionengine.ExecException; import org.apache.pig.data.BagFactory; import org.apache.pig.data.DataBag; import org.apache.pig.data.DataType; import org.apache.pig.data.Tuple; import org.apache.pig.data.TupleFactory; import org.apache.pig.impl.logicalLayer.schema.Schema; /** * 自定义UDF,实现Pig与中文分词集成 * **/ public class MyTokenize extends EvalFunc<DataBag> { /**tuple实例**/ TupleFactory mTupleFactory = TupleFactory.getInstance(); /**Bag实例*/ BagFactory mBagFactory = BagFactory.getInstance(); @Override public DataBag exec(Tuple input) throws IOException { try { DataBag output = mBagFactory.newDefaultBag(); Object o = input.get(0); List<Term> terms=ToAnalysis.parse((String)o);//获取Ansj的分词 for(Term t:terms){ output.add(mTupleFactory.newTuple(t.getName()));//获取分词token,放入tuple,然后以bag的形式组装tuple } return output; } catch (ExecException ee) { // error handling goes here ee.printStackTrace(); } return null; } /**描述scheaml形式*/ public Schema outputSchema(Schema input) { try{ Schema bagSchema = new Schema(); bagSchema.add(new Schema.FieldSchema("token", DataType.CHARARRAY)); return new Schema(new Schema.FieldSchema(getSchemaName(this.getClass().getName().toLowerCase(), input), bagSchema, DataType.BAG)); }catch (Exception e){ return null; } } }
UDF写完后,需打成一个jar包,然后在Pig脚本里注册jar包(依赖的jar包也需要注册,例如本例中的ansj的jar),关于如何打包,注册,请参考散仙上篇文章,不要问我上篇文章在哪里,就在这文章里。
最后,我们来看下一个实际例子的效果,,散仙本打算把此篇博客给分析一下,统计下词频,看看能不能,通过高频词,直接看出本文的主题,后来立马否决了,因为此刻还没写完,不理解的就跳过,最后,从网上找了篇新闻,感兴趣的可以阅读下,原内容如下:
原标题:南水北调办主任回应境外抹黑:没什么可藏着掖着 【环球时报综合报道】1月14日,2015年南水北调工作会议在河南南阳召开,安排部署2015年南水北调工作。在媒体通气会上,国务院南水北调办主任鄂竟平对境外一些媒体对南水北调工程的抹黑作出了回应,南水北调办主要领导就移民补偿、国际交流等问题接受了《环球时报》记者的采访。 环球时报:关于丹江口移民率先的16倍补偿,这个标准是如何制定出来的? 国务院南水北调办征地移民司司长袁松龄:这个16倍的补偿措施是我们南水北调工程率先在全国范围内实行的,在南水北调之前,水利工程的补偿基本是8倍到10倍。然而在整个迁区规划工作来看,8倍10倍标准显然是太低。我们的规划也是以人为本,不让被征迁的移民吃亏,所以按照当时国家标准作参考,南水北调率先实施16倍补偿。东、中线移民工程永久征地是96万亩,临时用地45万亩,总体来讲,被征迁的群众对国家的政策是理解和支持的。 环球时报:资料中提到,南水北调移民过程中河南、湖北两省有18名干部因为过度劳累,牺牲在移民搬迁第一线,可否介绍下具体情况? 国务院南水北调办征地移民司司长袁松龄:我们34.5万移民的整体搬迁过程中,有近十万干部投入到组织工作上。在这十多年以来,先后有18名干部倒在工作岗位上。比如说,湖北有一个叫刘峙清的干部,就是由于工作劳累心脏病突发,倒在了工作岗位上。还有比如河南南阳淅川的干部也是这样。整个村的移民,在搬迁前的一个晚上,基本都是行李拉起来,车装好之后,点燃篝火,干部们就陪着,第二天把大家送走。基层的干部基本上每天都和移民们朝夕相处,在搬迁过程中得不到休息,而且很闹心。我们有很多这样的事迹。 环球时报:在南水北调工程中,我们是否借鉴过国外的一些经验,与其他国家的交流情况是怎样的? 国务院南水北调办主任鄂竟平:国外的工程,我们考察了几个,比如美国、德国、加拿大、西班牙等等。总的来说,引水工程中的过程管理有一些可以借鉴,比如说国外有的工程是以公益性地来管理,由政府托管,只按照成本来收取水费,即按照建设和维护这个工程花多少钱来收水费,让工程自身能良性运行,但不盈利。 咱们国家基本也是按照这个套路来弄的。 再有就是调水的生态问题,也是值得借鉴的,国外在调出区和调入区的生态上,都有一些说法。德国对一些生态方面的规定蛮具体的,比如这条河流,流量到什么数值就要调水了,到什么数字就不能调水了,规定得很具体,管理很精细。这方面咱们应该特别需要注意,尤其是北方一些地区,水资源特别珍贵,如果没有一个量的概念,就不是很好管。 对于境外一些媒体针对南水北调工程的抹黑,鄂竟平给予了回应,他表示,南水北调工程没有什么可藏着掖着的,为什么呢?因为它是一个积德的事儿。“北方一些地区的水资源已经紧缺到那样一个程度了,咱们把宝贵的水资源调来,叫老百姓能喝上好水,让生态环境不再恶化,大家生活在一个优美的环境里,这不是积德吗?一个积德的事有什么可藏着掖着的?” 鄂竟平强调,国务院的政策都是透明的,有多少钱、干多少事,达到什么目标都是透明的,媒体什么问题都可以问,都可以讨论。“一些境外的媒体,话说的让人真的不好理解,英国有家媒体,大致意思说‘南水北调是祸国殃民的,引的都是脏水,比如中线,想把水引到东北工业基地,还没到天津就不能用了’。我们从来就没有过‘把水引到东北老工业基地’的方案,有些境外媒体说这些话的时候,连事情都搞不清楚,不知道到底是什么居心。” (环球时报记者范凌志)
使用Pig分析完的部分topN结果如下:
(,,77) (的,50) ( ,24) (是,24) (。,23) (南水北调,18) (在,14) (:,12) (工程,12) (移民,11) (有,11) (一些,9) (都,9) (了,9) (到,8) (水,8) ( ,8) (干部,7) (一个,7) (时报,7) (、,7) (工作,7) (中,7) (我们,7) (就,7) (着,7) (什么,7) (环球,7) (媒体,7) (不,6) (来,6) (?,6) (办,6) (境外,5) (补偿,5) (国务院,5) (很,5) (上,5) (过程,4) (引,4) (搬迁,4) (按照,4)
最后来解释下,在一篇文章里,最多的词无疑是标点符号,和一些副词了,这不仅在中文里是这样,在英文里同样是这样的,最多的词往往是a,the,an,this之类的,副词什么的,所以统计词频前,一般会过滤掉一些无意义的词,这些散仙就不细说了,相信搞过搜索和自然语言处理的人,都很清楚,从结果前几个结果来看,确实证明了标点和一些连词与副词的频率最高,终于在结果的第六行,出现了第一个有意义的高频词,南水北调,频率是18次,这直接反映了本文的主题,并与之相关,有意义的高频词,一般就是本文的重点介绍内容,这一点在我们的数据挖掘,关键词提取,自然语言处理中用的比较多。
最后总结一下重点:
(1)测试的文本,在使用前是需要传到HDFS上的。
(2)注册jar包时,如果有依赖,也需要将依赖jar包注册在pig里。
(3)在真实的应用中,统计分析前,最好将一些无用的数据给过滤掉。
如果有什么疑问,欢迎扫码关注微信公众号:我是攻城师(woshigcs)
本公众号的内容是有关大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!
转载请注明原创地址:http://qindongliang.iteye.com/blog/2176725
发表评论
-
Apache Tez0.7编译笔记
2016-01-15 16:33 2432目前最新的Tez版本是0.8,但还不是稳定版,所以大家还 ... -
Bug死磕之hue集成的oozie+pig出现资源任务死锁问题
2016-01-14 15:52 3758这两天,打算给现有的 ... -
Apache Pig中如何使用Replace函数
2015-11-17 18:48 1481今天分享一个小案例, ... -
Apache Pig的UDF返回值问题
2015-11-11 16:34 1472今天写了关于Pig的EvalFunc UDF函数,结果一执行 ... -
Pig0.15集成Tez,让猪飞起来
2015-06-29 19:45 17911,Tez是什么? Tez是Hortonworks公司开源 ... -
CDH-Hadoop2.6+ Apache Pig0.15安装记录
2015-06-26 20:06 26941,使用CDH的hadoop里面有对应的组件Pig,但版本较低 ... -
Pig配置vim高亮
2015-05-01 17:14 1570(1) 下载文末上传的压缩包,上到对应的linux机器上,并 ... -
Hadoop2.2如何集成Apache Pig0.12.1?
2015-05-01 16:48 911散仙假设你的Hadoop环境已经安装完毕 (1)到ht ... -
Apache Pig和Solr问题笔记(一)
2015-04-02 13:35 2005记录下最近两天散仙在工作中遇到的有关Pig0.12.0和Sol ... -
Pig使用问题总结
2015-03-29 18:39 10271,如果是a::tags#'pic'作为参数,传递给另一个函 ... -
玩转大数据系列之Apache Pig高级技能之函数编程(六)
2015-03-18 21:57 2105原创不易,转载请务必注明,原创地址,谢谢配合! http:/ ... -
Apache Pig字符串截取实战小例子
2015-03-13 17:23 2237记录一个Pig字符串截取的实战小例子: 需求如下,从下面的字 ... -
玩转大数据系列之Apache Pig如何通过自定义UDF查询数据库(五)
2015-03-12 21:06 1877GMV(一定时间内的成交 ... -
玩转大数据系列之如何给Apache Pig自定义存储形式(四)
2015-03-07 20:35 1126Pig里面内置大量的工具函数,也开放了大量的接口,来给我们开发 ... -
玩转大数据系列之Apache Pig如何与MySQL集成(三)
2015-03-07 19:43 2565上篇介绍了如何把Pig的结果存储到Solr中,那么可能就会有朋 ... -
玩转大数据系列之Apache Pig如何与Apache Solr集成(二)
2015-03-06 21:52 1473散仙,在上篇文章中介绍了,如何使用Apache Pig与Luc ... -
玩转大数据系列之Apache Pig如何与Apache Lucene集成(一)
2015-03-05 21:54 2852在文章开始之前,我们 ... -
Apache Pig学习笔记之内置函数(三)
2015-03-03 19:53 48321 简介 Pig附带了一些 ... -
Apache Pig学习笔记(二)
2015-02-13 19:23 3059主要整理了一下,pig里 ... -
你有一个好的归档习惯吗?
2015-02-11 22:01 1830备忘和扯一扯最近散仙 ...
相关推荐
统计单词词频,能够按照单词次数排列,统计英语高频词。可用于自我学习,对于想快速提升英语的可以快速把握所有高频词。打蛇打七寸,把握关键点。也可用于培训机构,针对考试高频词,快速提分,
自然语言理解 宋词词频统计统计宋词的单字词,双字词等输出的是单字词和双字词的词典文件文件中包括相应的词和频度
用Java实现的词频统计,代码。为了统计词汇出现频率,最简单直接的做法是另外建一个Map:key是单词,value是次数。将文章从头读到尾,读到一个单词就到Map里查一下,如果查到了则次数加一,没查到则往Map里一扔。...
主要是读取文本,然后进行分词、词干提取、去停用词、计算词频,有界面,很实用亲测可用, 谢谢支持。
基于hadoop的词频统计,通过空格作为词频切分,简单统计了哈姆雷特节选的词频数量。
c语言实现统计文件词频,可实现从文件中读取文件内容,并对内容的各个单词的词频进行统计,并在另一文件或者控制台输出词频统计结果。采用二叉树存储结构
词频统计
基于javascript+Ajax的词频统计
中文分词用统计词频词典,一词一行,txt文本保存
IKAnalyzer 实现分词 词频统计,用Eclipse实现,调用IKanalyzer的类,可以用于IKanalyzer的二次开发
本应用持续更新中
自然语言理解 关于词频统计的代码 利用treemap来完成
1. 首先分别统计所提供的两个文本文件中单词出现频率为了提高算法的准确性,在此只统计字典中出现且不为停用词(stop-word)的单词。单词为仅由字母组成的字符序列,包含大写字母的单词应将大写字母转换为小写字母后...
主要是读取文本,然后进行分词、词干提取、去停用词、计算词频,有界面,很实用
一、利用Java程序实现词频统计 二、利用Scala程序实现词频统计 三、利用Python程序实现词频统计 四、利用Akka和Scala实现词频统计 五、利用MapReduce实现词频统计 六、利用Hive实现词频统计 七、利用Storm实现词频...