如何匹配字符串与可能的拼写错误?

时间:2016-06-10 21:38:52

标签: python string data-processing

我有多个pdf转换为文本文件,我想搜索可能在文件中的某个短语。我的问题是pdf和文本文件之间的转换并不完美,所以有时文本中会出现错误(例如字之间缺少空格; i,l,1之间的混淆等等)

我想知道是否有任何常用的技术可以给我一个“软”搜索,例如,它可以查看两个术语之间的汉明距离。

if 'word' in sentence:

VS

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

3 个答案:

答案 0 :(得分:4)

你可以使用这样的东西:

onRightButtonPress

应该输出:

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)

答案 1 :(得分:2)

由于你的琴弦长度不同,你应该使用Levenshtein距离而不是汉明距离。我没有亲自使用它,但这个包可能很有用:

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

由于这是一个自然语言处理问题,我肯定会研究NLTK。本教程似乎合适:

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

答案 2 :(得分:1)

fuzzywuzzy看起来可能对你有用:https://github.com/seatgeek/fuzzywuzzy