Как мне найти нечеткий поиск по ключевому слову и вернуть соответствующую подстроку? - PullRequest
0 голосов
/ 13 января 2020

Я бы хотел найти и заменить нечетким способом. Поэтому мне нужно сделать нечеткий поиск текста и вернуть нечеткое соответствие ключевому слову, но я изо всех сил пытаюсь найти реализацию для этого. Например, я хотел бы сделать что-то вроде этого:

text = 'The sunset is a lovely colour this evening'
keyword = 'Color'
desired_result = colour
text.replace(desired_result, keyword)
print(text)
The sunset is a lovely Color this evening

Чтобы усложнить ситуацию, фразы, которые необходимо заменить, могут быть более чем одним словом, поэтому расщепление не будет работать.

Я пробовал использовать функцию процесса FuzzyWuzzy, но это только вернет ключевое слово, а не совпадение. Например:

process.extractOne("This sunset is a lovely colour this evening", "Color")
("Color", 90)

Мне нужно совпадение в тексте, чтобы я мог заменить. Regex

Python может выполнять нечеткое сопоставление, но производительность - это проблема, и мне кажется, что она не работает для меня с полной фразой.

text = 'The sunset is a lovely colour this evening'
term = 'Color'
r = regex.compile('('+text +'){e<=5}')
print(r.match(term ))
None

1 Ответ

0 голосов
/ 13 января 2020

Если вы используете нечеткий поиск, вы можете использовать find_near_matches, чтобы получить индексы совпадений, а затем использовать понимание списка из этого, чтобы получить фактические используемые строки

from fuzzysearch import find_near_matches
my_string = 'aaaPATERNaaa'
matches = find_near_matches('PATTERN', my_string, max_l_dist=1)

print([my_string[m.start:m.end] for m in matches])
...