2012-03-13 24 views
2

我想用一個文件(作爲文本文件)使用mahout做計算,執行TFIDF後面this guideMahout TFIDF字典文件

我已成功創建字典和矢量權重,現在正在嘗試訪問輸出。在該指南中,它表示「例如可以輕鬆地將生成的詞典文件的內容加載到具有令牌索引作爲鍵和令牌作爲值的映射中。」

我不知道如何去把這個文件加載到地圖上,他建議,有沒有人知道它是如何完成的?

我從一個文本文件目錄創建了我的向量,運行「./mahout seq2sparse ...」時遇到的一個問題是控制分析器的-a標誌 - 應該是lucene的StandardAnalyzer。當試圖用這個標誌運行時,我收到了一個ClassNotFoundException異常,但是刪除標誌解決了這個問題,我認爲默認分析器也是這個,因此輸出結果應該與示例相同。

如果有人知道如何將這本字典加載到地圖中,我將永遠感激!

詹姆斯

+0

-a應該有一個完全合格的類名 – 2012-06-24 05:25:16

回答

5

我的工作了,所以我把這個了對於遇到此對谷歌的人。

 SequenceFile.Reader read = new SequenceFile.Reader(fs, new Path("<path do dictionary>"), conf); 
     IntWritable dicKey = new IntWritable(); 
     Text text = new Text(); 
     HashMap<Integer, String> dictionaryMap = new HashMap(); 
     while (read.next(text, dicKey)) { 
      dictionaryMap.put(Integer.parseInt(dicKey.toString()), text.toString()); 
     } 
     read.close(); 

這對我有用,允許我從mahout的字典文件中讀取id到文本的映射。

1

亨利馬烏創建 org.apache.mahout.vectorizer.DefaultAnalyzer是建立在StandardAnalyzer,這樣你就可以在-a標誌使用。你不能使用StandardAnalyzer,因爲它沒有沒有參數的構造函數,這就是你有錯誤的原因。

1

由於上面的代碼是缺少在這裏編譯它需要的import語句等是在命令行工作的更完整的文本閱讀和轉儲詞典文件的

dumpdict.java的輸出:

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.io.IntWritable; 
import org.apache.hadoop.io.SequenceFile; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.fs.FileSystem; 
import org.apache.hadoop.fs.Path; 
import java.io.IOException; 

class DumpDict { 
    public static void main(String[] args) { 
    try { 
     Configuration conf = new Configuration(); 
     FileSystem fs = FileSystem.get(conf); 
     SequenceFile.Reader read = new SequenceFile.Reader(fs, new Path(args[0]), conf); 
     IntWritable dicKey = new IntWritable(); 
     Text text = new Text(); 
     // HashMap dictionaryMap = new HashMap(); 
     while (read.next(text, dicKey)) { 
     // dictionaryMap.put(Integer.parseInt(dicKey.toString()), text.toString()); 
     System.out.println(dicKey.toString()+" "+text.toString()); 
     } 
     read.close(); 
    } catch (IOException e) { 
     System.out.println(e.toString()); 
    } 
    } 
} 

我發現明確地告訴java的,有必要,所有的jar文件是:

export CLASSPATH=`find /path/to/mahout /usr/share/java -name '*.jar' | perl -ne 'chomp; push @jars, $_; END { print "\".:",(join ":",@jars),"\$CLASSPATH\"\n"; }'` 

編譯如下:

javac dumpdict.java 

像這樣運行:

java -cp .:$CLASSPATH DumpDict {path to dict} 

(這也許是矯枉過正誰用java的人,但它可能會節省時間,對於我們這些誰不使用它經常)。