4

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

具体来说,我的实现目前不处理连词。例如,我希望能够检测“areyou”并建议“are you”。我想我可以通过在可能看起来的片段中将潜在的连词分开并测试两半来做到这一点。由于所有英语单词都必须至少有一个元音,我想我可以寻找元音来帮助我决定在哪里将单词分开。

Damerau-Levenshtein 距离算法非常有用。很明显,其他人在这方面的思考比我多得多。我应该考虑使用类似的聪明算法来检测连词,还是我已经走在正确的轨道上?

4

3 回答 3

3

我想候选连词不会超过四十(40)个字符左右;大多数情况下,它会少于十 (10) 个。

考虑到体积小,这个伪代码呢?

if (is_spelled_wrong(word)):
    N = 长度(字)
    list_suggestions = []
    对于 i = 1 到 N-1:
        wordA = word[0:i] // Pythonic 'slice' 表示法
        单词B = 单词[i+1:N]
        如果 (!is_spelled_wrong(wordA) && !is_spelled_wrong(wordB))
            list_suggestions.appened((wordA, wordB))

换句话说,只需扫描字符串以查找所有可能性。其中有少数。在“areyou”的情况下,您将循环五 (5) 次。

于 2009-11-18T19:16:43.553 回答
1

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

于 2009-11-18T20:30:03.547 回答
1

查看这篇关于编写拼写检查器的优秀文章。使用该技术,您有两个选择:要么包含字典中的每一对单词,要么包含每对可能的单词(将分离的单词作为解决方案),或者尝试每个可能的分割点并进行标准字典查找以查看是否这两个词都是有效的。

于 2009-11-18T21:58:33.773 回答