2013-04-10 15 views
1

我們需要在MySQL表中存儲一個文本字段(比如說2000個字符)及其唯一的散列(比如SHA1)。 爲了測試MySQL表中已存在的文本,我們生成文本的SHA1,並查找它是否存在於唯一字段hash中。良好的散列算法,接近原始文本輸入,雪崩效應較小?

現在讓我們假設有兩個文本:

  1. 「這是將存儲在數據庫中的文本,它的散列,將產生」
  2. 「這是文本,這將是存儲在數據庫中,並且它的哈希將被生成。「

請注意細微差異。

可以說1已經被添加到數據庫中,2的檢查將不起作用,因爲他們的SHA1哈希會有很大的不同。

一個明顯的解決方案是使用Leveinstein距離或difflib遍歷所有已經添加的文本字段,以精確到來自MySQL表的匹配。

但這不是面向性能的。 有一個很好的散列算法,它與文本內容有關聯嗎?即爲非常相似的文本生成的兩個散列本身將非常相似。

這樣,在將它們添加到MySQL表中之前,可能會更容易檢測到可能的重複項。

回答

1

我很懷疑你要找的東西存在,所以我提出一個簡單的解決方案:

拿出一個簡單的算法正常化你的文字,如:

  • 空白標準化
  • 刪除標點符號

然後,計算的散列並將其存儲在單獨的co lumn(normalizedHash)或將ID存儲到歸一化散列表。然後,您可以通過標準化內容比較兩個不同的條目。

3

這聽起來像你正在尋找局部敏感的哈希。除了Wikipedia article之外,請在本網站上搜索以獲得一些指示。