Нахождение похожего слова в тексте
У меня есть текст. Предположим, он будет состоять из одного предложения, хотя это не особо важно.
text = "Привет, меня зовут Ат0н"
и у меня есть список слов, которые нужно найти в тексте
list = ["Вася", "Петя", "Антон", "Вова"]
Но в тексте у нас не Антон, а Ат0н. Возможно ли обнаружить похожее слово?
Ответы (3 шт):
Вот идея как такое можно реализовать, функция разбивает предложение на слова, а потом сверяет их со словами в списке, и выписывает похожие слова. Я установил погрешность в два символа, и теперь он выводит в списке похожие слова в таком порядке:
[[оригинал, найденное], [оригинал, найденное]].
#!/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]);
Предлагаю поискать на pypi.org запрос "similar text". К примеру модуль similar_text вычисляет похожесть слов в процентах
>>> from similar_text import similar_text
>>> similar_text('luosicheng', 'lsc')
46
>>> similar_text('lsc', 'luosicheng')
46
Так как из условий вопроса не ясен какой вариант нужен в следующем случае: text='Привет вася воблу взял' list['ася','бася']
В 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}")