Я не думаю, что фильтрация регулярных выражений дает правильные результаты, потому что модуль re дает только непересекающиеся совпадения;если вы отфильтровываете некоторые совпадения, то совпадение менее 90%, которое совпадает с совпадением 90% +, не позволит распознать совпадение 90% +.
Я также рассматривал difflib, но этодаст вам первый матч, а не лучший матч.
Я думаю, вам придется написать его с нуля.
Что-то вроде:
def find_fuzzy_match(match_string, text):
# use an iterator so that we can skip to the end of a match.
text_iter = enumerate(text)
for index, char in text_iter:
try:
match_start = match_string.index(char)
except ValueError:
continue
match_count = 0
zip_char = zip(match[match_start:], text[index:])
for match_index, (match_char, text_char) in enumerate(zip_char):
if match_char == text_char:
match_count += 1
last_match = match_index
if match_count >= len(match_string) * 0.9:
yield index, index + last_match
# Advance the iterator past the match
for x in range(last_match):
next(text_iter)