热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hadoop2.5.2mahout0.10.1测试文本分类器

说明:本文是对下面这篇文章的一个更新,下面这篇文章环境采用的是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




推荐阅读
author-avatar
周树草
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有