在文本聚类之前,首先要做的是文本的向量化。该过程涉及到分词,特征抽取,权重计算等等。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向量 |