英语单词拼写检查(连载二)

作者:chilleen 来源:ITPOW 日期:2006-1-12

来源:ITPOW(www.itpow.com)

看完了演示,原来的程序是不是有许许多多毛病,其中致命的问题是几个完全不同的单词可能是相同的编码,仅靠编码来判断就造成了误判,我们来慢慢重新来过。

定义
英语单词:26个英文字母构成的单词,不包括连词、词组,不引起混淆的情况下也可以用“单词”表示。
字典:存储所有的英语单词,生僻词可以除外。
建议单词:字典中的一个或多个单词,与输入的单词有一个字母的差别,差别限于:多一个字母、少一个字母、有一个字母不同。
一、要进行拼写检查的范围:英语单词。
二、什么情况下算作拼写错误:在字典中找不到对应的英语单词,忽略大小写比较。
三、什么情况下给出建议的单词:拼写错误。

关键步骤有两个:建立字典和给出建议单词。

建立字典:

将输入单词与字典中所有单词依次比较,在每个单词中再一个字母一个字母的比较。这种方法有缺点,计算次数太多而且算法也复杂,因为我们不知道输入的单词是哪个字母有问题(如果是最后一个字母有问题,那就太简单了)。

所以还是引用前面的思路,为单词编码,先前使用的是ASC码,这里重新编码,a(A)编码为1,b(B)编码为2……z(Z)编码为26。然后将单词中每个字母的编码之和作为单词的编码存入字典中。如果把字典存入数据库,就可以直接将编码定为索引,就不需要与所有的单词进行比较了。

给出建议单词:

我们选择与输入单词的编码差值<=26的单词,就会淘汰很多不必要的比较。然后输入单词再与这些单词进行字母比较。比较方法很简单,就是对一般字符串比较作些变化,见示例中的GetSimilarLevel(source, key)函数。

示例,同样采用JavaScript,由于字典中只有10个单词,所以建议按照提示输入。

另外,由于没有使用数据库,所以示例中是直接循环字典中的所有单词的。


[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

连载二结束

相关文章