Нечеткая проверка, содержится ли каждый элемент списка в заданной строке - PullRequest
0 голосов
/ 22 февраля 2020
list = ['Apple','Banana','Cucumber']
string = 'The other day as I ate a bnana in the park'

for x in range(len(list)):
    if list[x] in string:
        do a little dance

Это суть моего кода в его нынешнем виде, хотя моя строка и список намного длиннее. Строка отправлена ​​пользователем, поэтому я должен ожидать неправильное написание / сокращение / CAPS и не буду заполнять свой список каждым орфографическим написанием, которое я могу придумать, или проанализировать каждое слово строки, я не уверен, как решить эту проблему.

Я ищу нечеткое утверждение if. Я просмотрел нечеткую документацию и не уверен, как заставить это работать в этом случае.

Есть ли такая функция?

threshold = 80
for x in range(len(list):
     if fuzzy.contain(list[x],string) > threshold:
         do a little dance:

Я ценю любую помощь.

Ответы [ 2 ]

1 голос
/ 22 февраля 2020

Я не смог найти contain метод в fuzzywuzzy documentation, поэтому я придумал это. Вы разделяете фразу на слова, а затем сравниваете каждое слово fuzzy. В зависимости от ваших особых потребностей вы должны использовать другие методы оценки вместо значений token_sort_ratio и threshold. Вы можете найти больше информации в их github .

from fuzzywuzzy import fuzz

def fuzzy_contains_word(word, phrase, threshold):
    for phrase_word in phrase.split():
        if fuzz.token_sort_ratio(word, phrase_word) > threshold:
            return True
    return False


words = ['Apple','Banana', 'Cucumber']
user_input = 'The other day as I ate a bnana in the park'
threshold = 80

for word in words:
    if fuzzy_contains_word(word, user_input, 80):
        print(word, 'found in phrase: ', user_input)

>>> Banana found in phrase:  The other day as I ate a bnana in the park

Примечание: я получил предупреждение, сказав, что вы должны установить python-Levenshtein пакет.

1 голос
/ 22 февраля 2020

Из документации:

threshold = 80
for x in range(len(list)):
     if fuzzy.ratio(list[x],string) > threshold:
         do a little dance:

* Отказ от ответственности Я никогда раньше не использовал fuzzy, но это должно сработать.

...