连词的拼写建议

时间:2009-11-18 19:03:43

标签: algorithm language-agnostic spell-checking

我正在为基于网络的WYSIWYG编辑器实施拼写检查功能。我目前正在使用Damerau-Levenshtein距离算法来生成拼写建议列表。这一切都很顺利,但我很好奇我将如何改进功能。

具体来说,我的实现目前不处理联合词。例如,我希望能够检测到“areyou”并建议“是你”。我认为我可以通过在可能看起来的片段和测试两半时将可能连接的单词分开来实现这一点。由于所有英语单词必须至少有一个元音,我想我可以寻找元音来帮助我决定将单词分开的位置。

Damerau-Levenshtein距离算法非常有用;很显然,其他人对此的想法比我更多。是否有一个类似的聪明算法,我应该考虑检测连接的单词,或者我已经在正确的轨道上?

3 个答案:

答案 0 :(得分: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 :(得分:1)

由于您已经为每个单词阅读了整个字典,因此将常见的单词对添加到字典中并不是非常低效。或者,您可以以所有可能的方式将输入(可能是连接的单词)分成两个单词,然后在字典中查找每个单词附近的单词。它并不像听起来那么慢 - 您可以使用单词的DL中间结果来获得其前缀的结果。

答案 2 :(得分:1)

在编写拼写检查器时查看此excellent article。使用该技术,您有两种选择:要么包括每对单词,要么包含字典中每对可能的单词(分隔的单词作为解决方案),或者尝试每个可能的分割点并执行标准字典查找以查看是否这两个词都有效。