Как получить совпадающий текст из заданного списка, который передается fuzzy wuzzy_ratio()?

#python #nlp #fuzzywuzzy

#python #nlp #fuzzywuzzy

Вопрос:

У меня есть строка и список строк. Я просто хочу знать, какой текст в списке на 100% частично соответствует заданной строке.

 from fuzzywuzzy import fuzz 

s1 = "Hello"
s_list= ["Hai all", "Hello world", "Thank you"]

fuzz.partial_ratio(s1, s_list)
  

За это я получаю 100. Поскольку «Hello» имеет частичное совпадение с «Hello world»
Но как я могу получить «Hello World» в качестве вывода?

Кто-нибудь может мне помочь с этим? Заранее спасибо.

Ответ №1:

Вы можете использовать другую функцию

 from fuzzywuzzy import process

s1 = "Hello"
s_list= ["Hai all", "Hello world", "Thank you"]

[s for s, m in process.extract(s1, s_list) if m == 100]
  

Для получения дополнительной информации проверьте help(process.extract) .
Если вы строго хотите 100% частичных совпадений, ответ Нила лучше.

Комментарии:

1. Это значительно дороже, чем использование «in».

2. Это также вернет только «Hello world», даже если в списке есть другое совпадение, например, «Hello there».

3. @Neil Я предположил, что OP хочет использовать эту библиотеку, хотя я вижу, что это не его приоритет.

4. Спасибо @kuco23 и Нилу за ваши ответы. Мое намерение состоит в том, чтобы получить 100% частичное совпадение, поскольку я пытался опубликовать fuzzy-wuzzyи застрял там, я опубликовал таким образом. Но ответ Нила лучше подходит для моего требования. Спасибо, Нил. 🙂

Ответ №2:

Для точного сопоставления вам не нужен fuzzywuzzy . Fuzzywuzzy предназначен для нечеткого сопоставления. Fuzzywuzzy не может создавать индексы для совпадений именно потому, что, как правило, нет «совпадения», только расстояния.

Все, что вам нужно, это Python.

 s1 = "Hello"
s_list= ["Hai all", "Hello world", "Thank you"]

for item in s_list:
    if s1 in item:
        print("item: "   item   "ns1"   s1)
  

Комментарии:

1. Спасибо @Neil. Этот ответ идеально соответствует моему требованию.