2010-02-23 20 views
8

我正在尋找Java庫來對用戶生成的文本內容執行一些初始拼寫檢查/數據規範化操作,請想象在Facebook配置文件中輸入的興趣。Java中數據規範化的拼寫糾正

這段文字將在某些時刻(在拼寫糾正之前或之後,無論哪個作品更好)進行標記,還有一些用作搜索(完全匹配)的關鍵字。如果能夠減少拼寫錯誤等來製作更多的匹配,那就太好了。如果校正對於長於一個單詞的令牌更好地執行,則會更好。 「喝咖啡」會變成「喝咖啡」而不是「思考咖啡」。

我發現做拼寫校正下列Java庫:

  1. JAZZY似乎並沒有被下積極發展。而且,由於在社交網絡配置文件和多詞記號中使用非標準語言,基於字典距離的方法似乎不夠充分。
  2. APACHE LUCENE似乎有statistical spell checker,應該更適合。這裏的問題將如何創建一個很好的字典? (否則我們不使用Lucene,所以沒有現有的索引。)

歡迎任何建議!

回答

10

你想要實現的不是拼寫校正,而是模糊搜索。 Peter Norvig的文章是一個很好的起點,可以根據字典對候選人進行模糊搜索。

或者看看BK-Trees。

n-gram索引(由Lucene使用)對較長的單詞產生更好的結果。在給定編輯距離內生成候選詞的方法可能對正常文本中的單詞有效,但對於名稱,地址和科學文本來說不夠好。不過,它會增加你的索引大小。

如果你有文本索引,你有你的文本語料庫(你的字典)。無論如何,只有你的數據中有什麼可以找到。你不需要使用外部字典。

一個很好的資源是Introduction to Information Retrieval - Dictionaries and tolerant retrieval。有一個關於上下文敏感的拼寫糾正的簡短描述。

+0

感謝您提供有見地的評論和有趣的書鏈接。 你說得對,我真正想要的是模糊搜索。不過,我會看到如何/如果拼寫檢查適用於我的特定應用程序(也許它現在足夠好了),並重新審視您後面提到的想法。非常感謝! – dareios 2010-02-24 08:20:54

0
+0

我真的很喜歡Norvig的小拼寫檢查器,這真棒!然而,問題歸結爲選擇正確的文本語料庫(就像更先進的LUCENE一樣)。從莎士比亞的免費作品中獲取頻率將無助於糾正社交網絡配置文件。 – dareios 2010-02-23 10:59:09

+0

所以你說的是「搗蛋」而不是「喝酒」沒有解決?我將不得不重新閱讀Norvig的文章,也許爲自己實施它,因爲我認爲它可以提供幫助。 – duffymo 2010-02-23 13:08:10

+0

我指的是選擇正確的語料庫(以獲得正確的頻率,例如不是來自英國文獻的頻率,但是適用於可變質量社交網絡數據的頻率)的問題。 如果我正確理解Norvig的代碼,則只需將最多2個單詞的編輯距離考慮在內。這意味着它對於單個單詞來說會起到令人驚訝的效果,而對於多個單詞標記來說則不會。 – dareios 2010-02-23 14:06:30

2

關於填充Lucene索引作爲拼寫檢查器的基礎,這是解決問題的好方法。 Lucene有一個可用的框SpellChecker

網絡上有大量的word dictionaries可供下載並用作lucene索引的基礎。我建議用一些特定領域的文本以及如果你的用戶是醫務人員,那麼可以用來自醫學論文和出版物的源文本來補充字典。

+0

謝謝,我認爲如果Jazzy的工作「足夠好」,我會嘗試構建一個Lucene索引。 – dareios 2010-02-24 08:25:32

+0

這篇文章中的兩個鏈接似乎被破壞 – 2012-10-29 17:52:55