2016-06-10 1 views
-1

У меня есть несколько PDF, преобразованных в текстовые файлы, и я хочу найти определенную фразу, которая может быть в файлах. Моя проблема заключается в том, что преобразование между pdf и текстовым файлом не является совершенным, поэтому иногда появляются ошибки, возникающие в тексте (например, пробелы между словами, смешивание между i, l, 1 и т. Д.)Как сопоставить строки с возможными опечатками?

I было интересно, есть ли какая-либо общая техника, чтобы дать мне «мягкий» поиск, что-то, что смотрит на расстояние от хамминга между двумя терминами, например.

if 'word' in sentence: 

против

if my_search('word',sentence, tolerance): 
+0

Существует библиотека для этого называемого dista nce: https://pypi.python.org/pypi/Distance/0.1 – dagrha

+0

попробуйте googling для строковых алгоритмов расстояния – user853710

ответ

1

вы можете использовать что-то вроде этого:

from difflib import SequenceMatcher 

text = """there are 
some 3rrors in my text 
but I cannot find them""" 

def fuzzy_search(search_key, text, strictness): 
    lines = text.split("\n") 
    for i, line in enumerate(lines): 
     words = line.split() 
     for word in words: 
      similarity = SequenceMatcher(None, word, search_key) 
      if similarity.ratio() > strictness: 
       return " '{}' matches: '{}' in line {}".format(search_key, word, i+1) 

print fuzzy_search('errors', text, 0.8) 

, который должен вывести это:

'errors' matches: '3rrors' in line 2 
+1

Это сработало, спасибо! – kkawabat

2

Поскольку ваши строки могут быть разной длины, вы должны использовать Левенштейна вместо расстояния Хемминга. Я не использовал его лично, но этот пакет может быть полезным:

https://pypi.python.org/pypi/python-Levenshtein

Поскольку это проблема обработки естественного языка, я бы определенно посмотреть в NLTK. Этот учебник представляется целесообразным:

http://streamhacker.com/2011/10/31/fuzzy-string-matching-python/

Смежные вопросы