使用difflib在python中搜索单词字典的高效数据结构?

时间:2014-05-16 17:46:21

标签: python difflib

我正在尝试编写拼写检查程序,我想使用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变量(现在它只是一个单词列表)?

感谢。

1 个答案:

答案 0 :(得分:0)

我不确定difflib是这类工作的最佳解决方案;典型地,拼写检查器使用某种编辑距离,例如, Levenshtein距离。 NLTK包括编辑距离的实现,我会从那里开始。