作者:周树草 | 来源:互联网 | 2023-05-18 19:45
说明:本文是对下面这篇文章的一个更新,下面这篇文章环境采用的是mahout0.9+hadoop2.2.0,本人的是mahout0.10.1+hadoop2.5.2---------
说明:本文是对下面这篇文章的一个更新,下面这篇文章环境采用的是mahout0.9 + hadoop2.2.0,本人的是mahout0.10.1+hadoop2.5.2
--------------------------------------------------------------------------
mahout0.9 + hadoop2.2 中文文本分类实战(上)链接
--------------------------------------------------------------------------
网上大多数的mahout文本分词的例子都是基于hadoop1.x+mahout0.7 或者hadoop2.x+mahout0.9,其中各种坑,着实让人头疼,经过两天的苦战,终于在hadoop2.5.2上运行成功
1、将测试数据上传到hdfs中(数据来源于炼数成金-Hadoop 应用开发实战案例第17节课程)下载地址
先看一下数据 camera computer hosehold mobile MP3每个文件夹里有若干文件,每个文件是一篇文章
上传到hdfs的digital目录中(上传要半个小时左右)
#hadoop fs -mkdir digital
#hadoop fs -put /home/chin/digital/raw/* digital/
2、安装mahout0.10.1
#wget http://mirror.bit.edu.cn/apache/mahout/0.10.1/apache-mahout-distribution-0.10.1.tar.gz
#tar -xzvf apache-mahout-distribution-0.10.1-src.tar.gz -C /opt/
#ln -s /opt/apache-mahout-distribution-0.10.1 /opt/mahout
#cd /opt/mahout/
3、向mahout-examples-0.10.1-job.jar添加分词程序
默认的mahout是不支持中文分词的,这需要我们把分词程序弄到mahout的jar包中。
这里利用了原作者已经写好的分词程序,先把几个jar包下载下来(mmseg4j-solr-2.2.0.jar mmseg4j-core-1.9.1.jar mmseg4j-analysis-1.9.1.jar)里边包含了作者写好的分词程序,下载链接,
把mahout目录下的mahout-examples-0.10.1-job.jar文件拷出来,跟上边三个jar包一起,把4个jar包用压缩工具解压,把mmseg4j-solr-2.2.0 mmseg4j-core-1.9.1 mmseg4j-analysis-1.9.1文件夹中除了META-INF,其他都中拷贝到mahout-examples-0.10.1-job,再把mahout-examples-0.10.1-job压缩成mahout-examples-0.10.1-job.zip,把后缀改一下mahout-examples-0.10.1-job.jar,把mahout目录下的mahout-examples-0.10.1-job.jar替换一下
或者下载我已经替换好了的jar包 下载地址
4、mahout操作
4.1 生成了序列化文件(sequential or mapreduce???)
#mahout seqdirectory -i digital -o seq -ow -xm sequential
结果在seq文件夹生成了 chunk-0文件
4.2 将序列化文件分词,变成向量文件
#mahout seq2sparse -i seq -o vectors -lnorm -nv -wt tfidf -a com.chenlb.mmseg4j.analysis.SimpleAnalyzer
-a com.chenlb.mmseg4j.analysis.SimpleAnalyzer 是指定自定义的分词程序,如果你的数据是分好词的,需要改成-a org.apache.lucene.analysis.core.WhitespaceAnalyzer,更多请参考这篇文章
连接
运行完成
4.3 划分训练集和测试集
#mahout split -i vectors/tfidf-vectors --trainingOutput train --testOutput test --randomSelectionPct 40 --overwrite --sequenceFiles -xm sequential
4.4 训练模型
#mahout trainnb -i train -o model -li labelindex -ow -c
运行结果
把labelindex 导出看一下
4.5 测试模型
#mahout testnb -i test -m model -l labelindex -ow -o testresult -c
好了终于跑出结果来了
问题:
我在hadoop2.2.0 + mahout0.9下在进行到4.4步,报了一个错,
java.lang.IllegalArgumentException: Wrong numLabels: 0. Must be > 0! 异常,导致进行不下去了 这篇文章,提到“生成的 labelindex 文件是错的“,确实是生成的labelindex的问题,但是没有办法解决,只好舍弃在hadoop2.2.0下测试了
参考文章:
mahout0.9 + hadoop2.2 中文文本分类实战(上)
http://my.oschina.net/u/1047640/blog/262468
Mahout 中文分类 (1)
http://blog.csdn.net/u010422304/article/details/17966281
在hadoop2.0上使用mahout1.0(-SNAPSHOT)提供的lda
http://blog.csdn.net/huilixiang/article/details/43053581