2011-05-18 103 views
2

我正試圖在Lucene上實現BM25f評分系統。我需要根據我的需要對here進行原始實現進行一些小的更改,我在他獲得平均字段長度和文檔長度的部分迷路了...有人可以指導我如何或從何處獲得它?如何在Lucene中獲得平均字段長度和文檔長度?

+0

前段時間我瀏覽過這個問題,我猜這個實現計算了Lucene之外的平均字段和文檔長度(例如在提交索引文檔時)。據我所知Lucene沒有這個功能(平均字段和文檔長度)。 – 2011-05-19 15:50:08

回答

1

你可以從文件領域相關TermVector實例字段長度,但是這會增加你的索引大小。除非你買不起一個更大的指數,否則這可能是要走的路。當然,你仍然需要自己計算平均值,並將其存儲在其他地方(或者可以將其存儲在具有衆所周知的外部標識的特殊文檔中,只需在統計信息發生變化時更新)。

如果你可以將數據存儲在指數之外,有一兩件事你可以做的是算令牌時文檔記號化,並存儲計數平均。如果您的文檔集合是靜態的,只需在索引後將每個字段的值轉儲到文件&進程中。如果索引只需要添加更新,則可以存儲文檔數量和每個字段的平均長度,並重新計算平均值。如果文檔將被刪除,並且您需要準確的計數,則需要重新解析要刪除的文檔,以瞭解每個字段包含多少條款,或者如果您正在使用該條款,則需要從TermVector獲取長度。

+0

可以說我不喜歡指數大小的增加,那麼? – Shrinath 2011-05-23 10:01:48

+0

如果不存儲術語向量,則必須在索引時計算每個字段中術語的數量,並在某處存儲這些計數或平均值。一個「特殊」文件是一種可能性。另一種可能性是使用某個數據庫或鍵值存儲來存儲索引統計信息。不過,如果您添加或刪除文檔,請記住更新它們。當然,如果你的文件長度相近,那麼稍微偏離一點就不會傷害BM25的統計數據。 – 2011-05-23 17:00:05