Mahout文本聚类实例

1:下载路透社数据

   数据集下载地址:http://www.daviddlewis.com/resources/testcollections/reuters21578/

2:提取文本内容

  下载的文件数据格式是SGML格式,这种格式和XML格式很类似。我们需要将这种格式的数据转化为SequenceFile格式,首先就要提取出txt格式。使用的是Mahout中自带的工具类:org.apache.lucene.benchmark.utils.ExtractReuters。编写以下代码实现文本抽取:

import org.apache.lucene.benchmark.utils.ExtractReuters;

public class TestExtractReuters {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File inputFolder = new File("/home/cdw/reuters");
		File outputFolder = new File("/home/cdw/extracted");
		ExtractReuters extractor = new ExtractReuters(inputFolder, outputFolder);
		extractor.extract();
	}

}
程序运行后extracted目录下的文件格式为reut2-***.sgm-*txt格式

3:将txt格式转化为sequenceFile

运行命令如下:

mahout seqdirectory -c UTF-8 -i extracted/ -o reuters-seqfiles

可以用seqdumper查看生成的内容

命令: mahout seqdumper -s reuters-seqfiles/chunk-0 -o txt.txt。生成的内容在txt.txt中。

4:将SequenceFile格式转化为向量格式

mahout seq2sparse -i reuters-seqfiles/ -o reuters-vectors -ow

在HDFS中生成reuters-vectors目录,该目录下文件结构如下:

  • df-count 目录:保存着文本的频率信息
  • tf-vectors 目录:保存着以 TF 作为权值的文本向量
  • tfidf-vectors 目录:保存着以 TFIDF 作为权值的文本向量
  • tokenized-documents 目录:保存着分词过后的文本信息
  • wordcount 目录:保存着全局的词汇出现的次数
  • dictionary.file-0 目录:保存着这些文本的词汇表
  • frequcency-file-0 目录 : 保存着词汇表对应的频率信息。
5:使用Canopy聚类为Kmeans聚类提供初始类

命令如下:

mahout canopy -i reuters-vectors/tfidf-vectors -o reuters-canopy-centroids -dm org.apache.mahout.common.distance.EuclideanDistanceMeasure -t1 1500 -t2 2000

在HDFS中生成reuters-canopy-centroids目录
6:使用Kmeans聚类

命令如下:

mahout kmeans -i reuters-vectors/tfidf-vectors -o reuters-kmeans-clusters -dm org.apache.mahout.common.distance.TanimotoDistanceMeasure -c reuters-canopy-centroids/clusters-0 -cd 0.1 -ow -x 20 -cl
在HDFS中生成 reuters-kmeans-clusters目录

7:使用ClusterDumper工具查看聚类结果

命令如下:

mahout clusterdump -dt sequencefile -d reuters-vectors/dictionary.file-* -s reuters-kmeans-clusters-14 -b 10 -n 10









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章