#python #анализатор
Задача функции - сравнить входной текст с уже имеющимся и, если он изменился, сигнализировать
об этом. Такая задача возникла при написании бота, который оповещает о новости на определенной
странице сайта. Дело в том, что текст на (чужом) сайте обновляется ручным способом,
и поэтому часто бывает, что текст обновился, но автор решил исправить пару слов, ошибки
в написании и проч. Раньше я тупо сравнивал 2 текста, одинаковы ли они или нет, но
теперь хочу сделать более-менее цивилизованно, чтобы триггер не срабатывал, если в
новом тексте просто добавилась какая-нибудь запятая. Пока что я делаю это таким способом:
def findMessageOverlap(new_message, old_message):
overlap_count = 0
for word in new_message.strip(' '):
if word in old_message:
overlap_count += 1
overlap_percentage = (100 * overlap_count) / len(old_message.strip(' '))
# if overlap percentage is less than 50%, there is new message on the site
if overlap_percentage < 50:
return overlap_percentage
Я обращаю разницу во встречающихся словах нового текста в проценты, и если текст
отличается больше чем на 50% от старого, то сигнализирую об этом. Как вы, опытные разработчики,
решили бы такую задачу? Потому что я лишь начинающий.
Ответы
Ответ 1
Интересная задача) По ней достаточно много обсуждений в теории алгоритмов. Как примеры решений: Алгоритм Шинглов Самый распространненный подход под Вашу задачу ( его как раз используют для выявления плагиатов ). реализации python реализация python part2 Расстояние Левенштейна Это минимальное количество операций для перехода из одной строки в другую. реализация python библиотеки в помощь: difflib в частности посмотрите в сторону SequenceMatcher. Этот класс поможет избавиться от заранее заданных "шумов" ( запятые, табуляции, ненужные части речи ) python-Levenshtein библиотека реализации алгоритма поиска Расстояния Левенштейна PS: прошу прощения за то, что не привел четкого решения под Вашу задачу. Но она достаточно обстрактна что бы просто вставить кусок кода, который Вас выручит. Но в указанных мною ссылках, Вы вполне найдете составные блоки для ее решения.
Комментариев нет:
Отправить комментарий