在文本聚类之前,首先要做的是文本的向量化。该过程涉及到分词,特征抽取,权重计算等等。Mahout 提供了文本向量化工具。由于Mahout 向量化算法要处理的文件是Hadoop SequenceFile ,需要将普通的文本文件转成SequenceFile格式,然后在向量化。

一、序列化

API



SequenceFilesFromDirectory.main(args);



--input (-i)



文件存放路径



-output (-o)



输出文件路径



--overwrite (-ow)



是否清空输出目录



--charset (-c)



默认UTF-8



示例


String [] arg ={"-i","forclusters","-o","se","-ow"};

SequenceFilesFromDirectory.main(arg);



二、向量化

API


SparseVectorsFromSequenceFiles.main(args);



--minSupport (-s)



词的最小支持度



--analyzerName (-a)



Lucene分词器类权限命名



--chunkSize (-chunk)



块大小



--output (-o)



输出目录



--input (-i)



输入目录



--minDF (-md)



文档的最小DF值



--maxDFPercent (-x)



最大DF频率



--weight (-wt)



权重,TFIDF,或TF



--minLLR (-ml) (Optional)



最小log-Likelihood



--numReducers (-nr)



reduce个数



--maxNGramSize (-ng)



最大n-gram数



--overwrite (-ow)



是否覆盖outPut下的文件



--sequentialAccessVector(-seq) (Optional)



是否输出为sequentialAccessVector



--namedVector(-nv) (Optional)



是否输出为namedVector



--logNormalize(-lnorm) (Optional)



输出结果向量取log



--stopWordsFile (-sw)



停用词词典文件路径



示例


String [] args ={"-i",”/seq”,

"-o",”/vec”

"-a","org.apache.lucene.analysis.cn.smart

.SmartChineseAnalyzer",

"-md",4),

"-ow","-ng",4),

"-wt",”TFIDF”,

"-nr",4),

"-sw",”/stopwprds.txt”

};

SparseVectorsFromSequenceFiles.main(args);


输出结果


名称



Key类型



Value类型



说明



tokenized-documents



文档名(org.apache.hadoop.io.Text)



词数组(org.apache.mahout.

common.StringTuple)



分词后的的文本,每条记录代表一篇文档



dictionary.file-0



单词(org.apache.hadoop.io.Text)



单词id (org.apache.hadoop.

io.IntWritable)



文本集的特征词词典



wordcount



单词(org.apache.hadoop.io.Text)



词频

(org.apache.hadoop.

io.LongWritable)



特征词词频统计



tf-vectors



文档名(org.apache.hadoop.io.Text)



文档的tf向量(org.apache.mahout.

math.VectorWritable)



每篇文档的Tf向量



df-count



单词id (org.apache.hadoop.io.IntWritable)



单词的文档频率(org.apache.

hadoop.io.LongWritable)



每个单词的文档频率,即包含这个单词的文档个数



frequency.file-0



单词id (org.apache.hadoop.io.IntWritable)



单词的文档频率(org.apache.

hadoop.io.LongWritable)



仍是文档频率,只是对df-count中的文件进行分块



tfidf-vectors



文档名(org.apache.hadoop.io.Text)



文档的tfidf向量(org.apache.mahout.math.VectorWritable)



每篇文档的Tfidf向量