1. 程式人生 > >Mahout文字聚類例項

Mahout文字聚類例項

1:下載路透社資料

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