2015-12-16 74 views
1

我正在嘗試在JAVA中編寫一個程序,該程序在散列表中存儲字典(每個單詞在不同的鍵下)並將給定單詞與字典中的單詞進行比較,一個拼寫建議,如果它在字典中找不到 - 基本上是一個拼寫檢查程序。將單詞與字典中的目標單詞進行比較

我已經想出了比較算法(即Needleman-Wunsch和Levenshtein距離)等等,但是當它找出字典哈希映射中的什麼單詞來比較單詞,即「hellooo」時,卡住了。

我無法比較「ohelloo」[應該更正爲「hello」字典b/c中的每個單詞,這將花費很長時間,我無法將其與'o'b /它應該是「你好」。

任何想法?

+0

您可以比較給定單詞的所有班次,並選擇最合適的。例如:'ohelloo','hellooo','elloooh',... – piotrekg2

+0

好吧,但是接下來我將如何選擇詞典中的單詞的一個子集來比較單詞? – Rolf

+0

我不認爲hashmap是解決這個問題的好數據結構。使用trie/suffix樹,您將能夠快速查找具有給定前綴的所有單詞。 – piotrekg2

回答

0

最常見的拼寫錯誤是

  • 刪除一個字母(小詞或分詞)
  • 交換相鄰的字母
  • 阿爾特信(QWERTY相鄰字母)
  • 插入信

一些報告稱70-90%的錯誤屬於上述類別(編輯距離1)

看看下面的網址,它提供了一個單或雙錯誤(編輯距離1或2)的解決方案。幾乎所有你需要的東西都在那裏!

How to write a spelling corrector

FYI:您可以在上述文章的底部在各種編程語言實現。我在我的一些項目中使用過它,實際的準確性非常好,有時超過作者聲稱的95%以上。

- 基於OP的評論 - 如果您不想預先計算每個可能的更改並在地圖上搜索,我建議您使用patricia trie(radix tree)而不是HashMap。不幸的是,您將需要再次處理「首字母錯誤」(例如,先刪除第一個字母或先交換第二個字母,或者用Qwerty替換它),並且可能會極大地限制您的搜索。

你甚至可以將它與一個額外的索引圖或Trie與「反向」單詞或一個額外的索引省略前N個字符(例如前2個),因此您可以捕獲僅在前綴上發生的錯誤。

+0

謝謝;我已經提出了給定字典詞的單詞的評分/比較算法。我的問題是關於詞典中哪些詞比較一個詞,即如何選擇詞典中的相似詞 – Rolf

相關問題