我正在尝试编写拼写检查程序,我想使用difflib来实现它。基本上我有一个技术术语列表,我添加到标准的unix字典(/usr/share/dict/words
)中,我将其存储在一个名为dictionaryFile.py的文件中。
我有另一个名为stringSim.py的脚本,我在其中导入字典并测试样本字符串。这是基本代码:
import os, sys
import difflib
import time
from dictionaryFile import wordList
inputString = "dictiunary"
print "Search query: "+inputString
startTime = time.time()
inputStringSplit = inputString.split()
for term in inputStringSplit:
termL = term.lower()
print "Search term: "+term
closeMatches = difflib.get_close_matches(termL,wordList)
if closeMatches[0] == termL:
print "Perfect Match"
else:
print "Possible Matches"
print "\n".join(closeMatches)
print time.time() - startTime, "seconds"
返回以下内容:
$ python stringSim.py
Search query: dictiunary
Search term: dictiunary
Possible Matches
dictionary
dictionary's
discretionary
0.492614984512 seconds
我想知道是否有更好的策略我可以用来查找类似的匹配(假设一个单词拼写错误)。这是一个Web应用程序,所以我试图优化这部分代码有点快。有没有更好的方法来构造wordList变量(现在它只是一个单词列表)?
感谢。
答案 0 :(得分:0)
我不确定difflib是这类工作的最佳解决方案;典型地,拼写检查器使用某种编辑距离,例如, Levenshtein距离。 NLTK包括编辑距离的实现,我会从那里开始。