Проверка 1 списка на сходство по шаблону 2 списка и вывод результата

Я хочу сравнить два списка: command и words. В command хранятся шаблоны слов, а в words - то, что введет сам пользователь. вот пример:

command = ['бег', 'прыжок', 'полет']
words = ['я', 'бегал', 'вчера']

мне нужно, чтобы программа написала, в данном случае, совпадение найдено, потому что бегал почти совпадает со словом бег из списка command. Сейчас я считаю, что это можно реализовать алгоритмом Вагнера — Фишера (чтобы каждой букве присваивался 1-сходство или 0-не сходство) также может быть несколько слов или отпечатка (в слове есть лишняя буква, но так, чтобы смысл самого слова был понятен) вот пример:

command = ['бег', 'прыжок', 'полет']
words = ['я', 'бегал', 'и', 'прыгал', 'вчера']

тут тоже программа видит, что некоторые слова из списка words практически совпадают со списком command, а значит программа напишет совпадение найдено


Ответы (1 шт):

Автор решения: CrazyElf

Ну вот вам "из коробки" практически ваш процент:

# pip install thefuzz[speedup]

from thefuzz import fuzz

command = ['бег', 'прыжок', 'полет']
words = ['бегать', 'прыгать', 'летать']
print(f'{fuzz.token_sort_ratio(command, words)}%')

Вывод:

59%

Но в любом случае, если вы не понимаете, что хотите считать, то это "сферические проценты в вакууме". Вот, например, другой процент с теми же данными:

print(f'{fuzz.ratio(command, words)}%')

Вывод:

74%

Если нужно просто сравнить соответствующие слова из двух списков, то так:

command = ['бег', 'прыжок', 'полет']
words = ['бегать', 'прыгать', 'летать']
for a, b in zip(command, words):
  print(f'{fuzz.ratio(a, b)}%')

Вывод:

67%
46%
55%
→ Ссылка