Страницы

Поиск по вопросам

вторник, 7 апреля 2020 г.

Какую методику применить для анализа изменяемого текста (на Python)?

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

Комментариев нет:

Отправить комментарий