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 目錄 : 保存着詞彙表對應的頻率信息。
命令如下:
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