连写词的拼写建议

4

我正在为基于Web的所见即所得编辑器实现拼写检查功能。我目前使用Damerau-Levenshtein距离算法生成拼写建议列表。这一切都很顺利,但我想知道如何改进功能。

具体来说,我的实现目前无法处理组合单词。例如,我想能够检测到“areyou”并建议使用“are you”。我认为可以通过在可能的位置将潜在的组合单词分开并测试两个部分来实现此目的。由于所有英语单词必须至少有一个元音字母,因此我认为可以寻找元音字母以帮助我决定在哪里分割单词。

Damerau-Levenshtein距离算法非常有用;很明显,其他人对此进行了更多思考。是否有类似聪明的算法可供检测组合单词,或者我已经走在正确的轨道上了?


你会如何处理“area”? - tvanfosson
“area”会被标记为正确,因为它在我的单词列表中。我对此没有意见。 - Chris Nielsen
3个回答

3
我想候选组合词不会超过四十个字符,通常情况下都少于十个字符。
考虑到长度较小,那么这个伪代码怎么样?
如果(单词拼写错误): 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”的情况下,您需要循环五次。

1

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


1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接