博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop上的中文分词与词频统计实践
阅读量:5298 次
发布时间:2019-06-14

本文共 4079 字,大约阅读时间需要 13 分钟。

首先来推荐相关材料:。小虾的这个统计武侠小说人名热度的段子很有意思,照虎画猫来实践一下。

与其不同的地方有:

  0)其使用Hadoop Streaming,这里使用MapReduce框架。

  1)不同的中文分词方法,这里使用IKAnalyzer,主页在。

  2)这里的材料为《射雕英雄传》。哈哈,总要来一些改变。

 

0)使用WordCount源代码,修改其Map,在Map中使用IKAnalyzer的分词功能。

import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.Reader;import java.io.ByteArrayInputStream;import org.wltea.analyzer.core.IKSegmenter;import org.wltea.analyzer.core.Lexeme;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.util.GenericOptionsParser;public class ChineseWordCount {          public static class TokenizerMapper            extends Mapper
{ private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context context ) throws IOException, InterruptedException { byte[] bt = value.getBytes(); InputStream ip = new ByteArrayInputStream(bt); Reader read = new InputStreamReader(ip); IKSegmenter iks = new IKSegmenter(read,true); Lexeme t; while ((t = iks.next()) != null) { word.set(t.getLexemeText()); context.write(word, one); } } } public static class IntSumReducer extends Reducer
{ private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable
values, Context context ) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length != 2) { System.err.println("Usage: wordcount
"); System.exit(2); } Job job = new Job(conf, "word count"); job.setJarByClass(ChineseWordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(otherArgs[0])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); }}

1)So,完成了,本地插件模拟环境OK。打包(带上分词包)扔到集群上。

hadoop fs -put chinese_in.txt chinese_in.txthadoop jar WordCount.jar chinese_in.txt out0...mapping reducing...hadoop fs -ls ./out0hadoop fs -get part-r-00000 words.txt

2)数据后处理:

2.1)数据排序

head words.txttail words.txtsort -k2 words.txt >0.txthead 0.txttail 0.txtsort -k2r words.txt>0.txthead 0.txttail 0.txtsort -k2rn words.txt>0.txthead -n 50 0.txt

2.2)目标提取

awk '{if(length($1)>=2) print $0}' 0.txt >1.txt

2.3)结果呈现

head 1.txt -n 50 | sed = | sed 'N;s/\n//'
1郭靖   64272黄蓉   46213欧阳   16604甚么   14305说道   12876洪七公 12257笑道   12148自己   11939一个   116010师父  108011黄药师        105912心中  104613两人  101614武功  95015咱们  92516一声  91217只见  82718他们  78219心想  78020周伯通        77121功夫  75822不知  75523欧阳克        75224听得  74125丘处机        73226当下  66827爹爹  66428只是  65729知道  65430这时  63931之中  62132梅超风        58633身子  55234都是  54035不是  53436如此  53137柯镇恶        52838到了  52339不敢  52240裘千仞        52141杨康  52042你们  50943这一  49544却是  47845众人  47646二人  47547铁木真        46948怎么  46449左手  45250地下  448

在非人名词中有很多很有意思,如:5说道7笑道12心中17只见22不知30这时49左手。

 

转载于:https://www.cnblogs.com/jiejue/archive/2012/12/16/2820788.html

你可能感兴趣的文章
Mysql基础知识
查看>>
常用的分析方法有哪些?
查看>>
Excel-图表制作
查看>>
面对问题,如何去分析?(流失问题)
查看>>
Excel 文本函数
查看>>
电商数据分析总结
查看>>
Excel-信息函数&数组公式
查看>>
Excel-基本操作
查看>>
面对问题,如何去分析?(分析套路)
查看>>
Excel-逻辑函数
查看>>
面对问题,如何去分析?(日报问题)
查看>>
数据分析-业务知识
查看>>
求职秘籍-简历制作?
查看>>
用配置文件里面的参数值替换yaml模板中的变量值【python】
查看>>
Linux自动输入密码登录用户
查看>>
kvm虚拟机操作相关命令及虚拟机和镜像密码修改
查看>>
全球项目多区域数据同步问题解决方案
查看>>
spring boot jpadata 使用
查看>>
BZOJ1208[HNOI2004]宠物收养场——treap
查看>>
nodejs vs python
查看>>