2010-07-28 68 views
0

我有一個「大」設置線的劃定完整的句子,我正在用Hadoop處理。我開發了一個映射器,將一些我最喜歡的NLP技術應用到它。有幾種不同的技術可以映射到原始語句集,而我在縮小階段的目標是將這些結果收集到一個組中,以便組中的所有成員共享相同的原始語句。解析用Hadoop批量文本:最佳實踐生成密鑰

我覺得利用整個句子的關鍵是一個壞主意。我覺得產生一些哈希值的句子可能無法工作,因爲有限數量的鍵(不合理的信念)。

誰能推薦生成唯一的密鑰對每個句子最好的辦法/做法?理想情況下,我想維護秩序。但是,這不是主要要求。

Aνtίο,

回答

1

標準哈希應該工作正常。大多數哈希算法的值空間遠大於您可能使用的句子數量,因此碰撞的可能性仍然非常低。

+0

你可以給我一個價值空間的粗略數字嗎?我需要擴展應用程序,並擔心在測試環境中有解決方案,但以後會出現問題。 – sholsapp 2010-07-28 03:32:44

+1

SHA-1輸出160位的哈希值,其中有2^160元素的價值空間......我有點懷疑你要去比,哦更多的句子,2^40個左右(那將會是一種每個字符在平均句子長度上爲terabyte)。 – Amber 2010-07-28 04:30:29

0

雖然你可能要避免簡單的散列函數(例如,你可以很快想出任何半生不熟的想法),因爲他們可能不會混淆了一句數據足以避免碰撞擺在首位,的一個標準加密散列函數可能非常合適,例如MD5,SHA-1或SHA-256。

您可以使用MD5這一點,即使collisions have been found和算法被認爲是不安全的安全性強化的目的。這不是一個安全關鍵的應用程序,已發現的衝突是通過仔細構建的數據產生的,並且可能不會隨機出現在您自己的NLP句子數據中。 (例如,請參閱Johannes Schindelin的解釋,說明爲什麼可能不必更改git以使用SHA-256哈希值,以便您可以理解此背後的原因。)

1

儘管我已經給出了有關一個合適的哈希函數可能是什麼,我真的建議你只是使用句子本身作爲鍵,除非你有一個特定的原因,爲什麼這是有問題的。