2011-06-17 68 views
2

我正嘗試從一個語料庫中構建一個鄰接列表。我正在考慮使用Map-Reduce,因爲內存中的解決方案已經證明是非常昂貴的。我認爲可以工作的一系列作業要求我首先製作一個倒排索引,然後製作一個作爲輸入並計算相似度的地圖作業。我並不是特別想經歷構建自己的倒排索引的痛苦 - 我想使用一個Lucene索引,這個索引似乎很容易生成。然而,我並不清楚如何使用Lucene索引並生成Hadoop中的Map可以使用的對。有人可以澄清一個人如何去做這件事嗎?使用Lucene索引作爲Hadoop的輸入

+0

請再說明一下:您是否在嘗試羣集文檔?那鄰接表是關於什麼的?假設所有相關信息都可用於MAP步驟,那麼您要在那裏執行什麼計算(粗略)? – 2011-06-17 20:39:29

+0

我正在嘗試羣集文件,但羣集不會在Hadoop中發生。我只是準備其他階段的輸入... – dvk 2011-06-18 02:11:35

+0

那麼你需要從Mapper的索引中獲得什麼信息?條款?給定文件的條款?期限 - 文件對? – 2011-06-18 04:12:48

回答

1

您需要做的是使用IndexReader.terms()來枚舉條款,IndexReader.docFreq(Term t)以獲取包含該術語(用於IDF)的文檔數量,並使用IndexReader.termDocs(Term t)獲取每個術語文檔對的DF值。使用這些信息,您應該能夠將數據提供給Mapper,然後進行計數。請注意,termDocs調用通過其內部整數表示文檔,所以在進行此計算時不能修改索引,因爲索引更改後無法將文檔編號映射回文檔。爲了避免這種情況發生,要麼在處理減少步驟的結果之前不要更改索引,要麼在擁有文檔編號後,通過從文檔中讀取相應的字段將其轉換爲外部標識,並將其提供給Mapper。