Нахождение похожего слова в тексте

У меня есть текст. Предположим, он будет состоять из одного предложения, хотя это не особо важно.

text = "Привет, меня зовут Ат0н"

и у меня есть список слов, которые нужно найти в тексте

list = ["Вася", "Петя", "Антон", "Вова"]

Но в тексте у нас не Антон, а Ат0н. Возможно ли обнаружить похожее слово?


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

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

Вот идея как такое можно реализовать, функция разбивает предложение на слова, а потом сверяет их со словами в списке, и выписывает похожие слова. Я установил погрешность в два символа, и теперь он выводит в списке похожие слова в таком порядке:
[[оригинал, найденное], [оригинал, найденное]].

#!/usr/bin/env python
# -*- coding: utf-8 -*-

lst = ["Вася", "Петя", "Антон", "Вова"];
text = "Привет, меня зовут Ат0н";

def check_text(input_text, check_list):
    input_text = input_text.decode('utf-8');
    result = [];
    
    for word in input_text.split(" "):
        wrd = {};
        for i in word:
            for n in check_list:
                n = n.decode('utf-8');
                for l in n:
                    if (i == l):
                        try: wrd[n].append(0);
                        except: wrd[n] = [0,];
        for key in wrd.keys():
            if (len(wrd[key]) > len(word)-2) and \
                (len(wrd[key]) <= len(word)):
                result.append([word, key]);
                      
    return result;
    
check_list = check_text(text, lst);
# check_list = [["Ат0н", "Антон"]];

print(check_list[0][0]);
print(check_list[0][1]);
→ Ссылка
Автор решения: ganz

Предлагаю поискать на pypi.org запрос "similar text". К примеру модуль similar_text вычисляет похожесть слов в процентах

>>> from similar_text import similar_text
>>> similar_text('luosicheng', 'lsc')
46
>>> similar_text('lsc', 'luosicheng')
46

Так как из условий вопроса не ясен какой вариант нужен в следующем случае: text='Привет вася воблу взял' list['ася','бася']

→ Ссылка
Автор решения: Alexandr Ogorodnik

В Python вы можете использовать библиотеку difflib

 import difflib

 text = "Привет, меня зовут Ат0н"
 word_list = ["Вася", "Петя", "Антон", "Вова"]

 # Найдем наиболее похожее слово
 most_similar_word = difflib.get_close_matches("Ат0н", word_list, n=1)[0]

 print(f"Наиболее похожее слово: {most_similar_word}")
→ Ссылка