#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. Этот ответ идеально соответствует моему требованию.