#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: прошу прощения за то, что не привел четкого решения под Вашу задачу. Но она достаточно обстрактна что бы просто вставить кусок кода, который Вас выручит. Но в указанных мною ссылках, Вы вполне найдете составные блоки для ее решения.
Комментариев нет:
Отправить комментарий