2014-05-16 3 views
0

Я пытаюсь написать проверку орфографии, и я хотел использовать difflib для его реализации. В основном у меня есть список технических терминов, которые я добавил в стандартный словарь unix (/usr/share/dict/words), который я храню в файле, который я вызываю dictionaryFile.py.Эффективная структура данных для поиска словаря слов в python с использованием difflib?

У меня есть другой скрипт, который называется 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 

Я интересно, если есть более эффективные стратегии я мог бы использовать для поиска подобных матчей (предполагая, что слово написано с ошибками) , Это для веб-приложения, поэтому я пытаюсь оптимизировать эту часть кода, чтобы быть немного более оперативным. Есть ли лучший способ структурировать переменную wordList (сейчас это всего лишь список слов)?

Спасибо.

+1

Поскольку у вас есть рабочий код и вы ищете улучшения, у вас могут быть лучшие результаты в Code Review – wnnmaw

ответ

0

Я не уверен, что difflib - лучшее решение для такого рода работ; как правило, проверки орфографии используют какое-то расстояние редактирования, например. Расстояние Левенштейна. NLTK включает в себя реализацию (-ы) расстояния редактирования, вместо этого я бы начал там.