2009-11-18 98 views
4

我正在爲基於Web的所見即所得編輯器實現拼寫檢查功能。我目前使用Damerau-Levenshtein距離算法來產生拼寫建議的列表。這一切都很好,但我很好奇如何改進功能。聯合詞的拼寫建議

具體來說,我的實現目前不處理連詞。例如,我希望能夠檢測到「areyou」,並建議「是你」。我想我可以做到這一點,把可能的聯合詞拆分成可能看起來細分和測試兩個部分。由於所有英文單詞都必須至少有一個元音,因此我認爲我可以尋找元音來幫助我決定將單詞分開的位置。

Damerau-Levenshtein距離算法非常有用;很明顯,其他人比我更多地考慮了這一點。有沒有類似的聰明算法,我應該考慮檢測聯體詞,還是我已經在正確的軌道上了?

+0

你會如何處理「區域」? – tvanfosson 2009-11-18 19:07:51

+0

「區域」將被標記爲正確的,因爲它在我的單詞列表中。我確定。 – 2009-11-18 19:22:37

回答

3

我想象候選連體詞不會超過四十(40)個字符左右;大部分時間將少於十(10)。

考慮到小尺寸,這個僞代碼呢?

 
if (is_spelled_wrong(word)): 
    N = len(word) 
    list_suggestions = [] 
    for i = 1 to N-1: 
     wordA = word[0:i] // Pythonic 'slice' notation 
     wordB = word[i+1:N] 
     if (!is_spelled_wrong(wordA) && !is_spelled_wrong(wordB)) 
      list_suggestions.appened((wordA, wordB)) 

換句話說,只是掃描字符串的所有可能性。有一小部分人。在「areyou」的情況下,你會循環五(5)次。

1

由於您已經閱讀了每個單詞的整個詞典,因此將常見單詞對添加到詞典中並不是非常低效。或者,您可以將輸入(可能是聯合詞)以所有可能的方式分成兩個單詞,然後在詞典中的每個詞旁邊查找單詞。它不像聽起來那麼慢 - 您可以使用單詞的DL中間結果來獲取其前綴的結果。

1

看看這個excellent article寫拼寫檢查。使用該技巧,您有兩種選擇:包括詞典中的每一對單詞或詞典中的每一對可能的單詞(以分隔的單詞作爲解決方案),或嘗試每個可能的分割點並執行標準詞典查找以查看是否兩個詞都是有效的。