mahout有根据目录下文本转换为Vectors的工具。
在创建vector前需要将文档转换为SequenceFile格式【hadoop存储文件的格式】。
SequenceFile是key--value形式的存储。
DocumentVectorizer 需要以unique类型为key,UTF-8格式的文本内容为value的数据格式。
您可能会发现有助于提卡(http://lucene.apache.org/tika)转换成二进制文件以文本。
mahout有一个漂亮的工具,它读取目录以及它的子目录以分块的方式为我们创建SequenceFile格式的数据。生成的文档的ID是<PREFIX><RELATIVE
PATH FROM PARENT>/document.txt的形式。
运行的命令如下
$MAHOUT_HOME/bin/mahout seqdirectory --input <PARENT DIR WHERE DOCS ARE LOCATED> --output <OUTPUT DIRECTORY> <-c <CHARSET NAME OF THE INPUT DOCUMENTS> {UTF-8|cp1252|ascii...}> <-chunk <MAX SIZE OF EACH CHUNK in Megabytes> 64> <-prefix <PREFIX TO ADD TO THE DOCUMENT ID>>
将SequenceFile格式转换为vector格式的命令:
$MAHOUT_HOME/bin/mahout seq2sparse -i <PATH TO THE SEQUENCEFILES> -o <OUTPUT DIRECTORY WHERE VECTORS AND DICTIONARY IS GENERATED> <-wt <WEIGHTING METHOD USED> {tf|tfidf}> <-chunk <MAX SIZE OF DICTIONARY CHUNK IN MB TO KEEP IN MEMORY> 100> <-a <NAME OF THE LUCENE ANALYZER TO TOKENIZE THE DOCUMENT> org.apache.lucene.analysis.standard.StandardAnalyzer> <--minSupport <MINIMUM SUPPORT> 2> <--minDF <MINIMUM DOCUMENT FREQUENCY> 1> <--maxDFPercent <MAX PERCENTAGE OF DOCS FOR DF. VALUE BETWEEN 0-100> 99> <--norm <REFER TO L_2 NORM ABOVE>{INF|integer >= 0}>" <-seq <Create SequentialAccessVectors>{false|true required for running some algorithms(LDA,Lanczos)}>"
- minSupport是被认为作为一个特征出现最小的频率的词。 - minDF是在一个词出现的最小的文件数。
- maxDFPercent是在一个文档中,一个良好特征需要的最大的表达式的值(一个词在文档中的频数/总的文档数)。这有助于消除高频率的特征,如停用词。