Список совпадений строк с блоком текста - PullRequest
0 голосов
/ 28 мая 2020

Начинающий здесь:

У меня есть блок текста:

Например: 'hey this is a block of text, for an example, wow looks cool blah blah blah angiotensin enzyme looks cool okay.But what about angiotensin enzym well I dont know.'

и список слов: ['angiotensin enzyme serum', 'some diff enzyme', 'angiotensin enzyme a1']

Моя конечная цель - найти из списка слов, которым строка соответствует / нечетким совпадениям из блока текста.

Что я пробовал: difflib.get_close_matches

Требуемый результат: 'angiotensin enzyme serum', 'angiotensin enzyme a1'

Порядок вывода не имеет значения.

Для других блоков текста подойдет другая строка из списка. Блок не является постоянным.

Есть ли способ добиться этого?

1 Ответ

1 голос
/ 28 мая 2020

Использование fuzzywuzzy (из PyPi):

from fuzzywuzzy import fuzz

text = 'hey this is a block of text, for an example, wow looks cool blah blah blah angiotensin enzyme looks cool okay.But what about angiotensin enzym well I dont know.'

words = ['angiotensin enzyme serum', 'some diff enzyme', 'angiotensin enzyme a1']

matches = [w for w in words if fuzz.partial_ratio(text, w) > 70.]

Очевидно, вы захотите настроить пороговое значение в соответствии с требованиями, но в этом примере значения хорошо разделены:

>>> print(matches)
['angiotensin enzyme serum', 'angiotensin enzyme a1']

>>> for w in words:
...     print(w, fuzz.partial_ratio(text, w))
... 
angiotensin enzyme serum 83
some diff enzyme 56
angiotensin enzyme a1 90
...