Как определить, чем отличается один текст от другого и выделить эти различия (difference).
При написании автоматического рерайтера текста, в рамках вот этого проекта, возникла необходимость составить базу синонимичных фраз. Заполнять ее специально (руками) было лень, хотя и сделал такую возможность. Я решил пойти другим путем. Каждый день, я рерайтил по несколько статей для своего новостного блога. Если разобраться, то разница между исходным текстом и результирующим это и есть пары значение-синоним. Осталось только научится находить разницу. Как оказалось задача давно изучена и решена. Есть готовые решения для php, есть для js. Меня интересовала клиентская сторона, поэтому я изучил javascript реализации.
На этом поприще есть лидеры. Самым интересным экземпляром был набор скриптов от самого Google (или самой, зависит от Вашей религии). Там же можно посмотреть и как оно работает
Если не вдаваться в подробности, то нам потребуется всего одна функция, а точнее метод
var dmp = new diff_match_patch(); var res = dmp.diff_main('Текст который мы бы изменили', 'Текст который мы еще не изменили');
на выходе diff_main метод выдает массив отличий, с указанием добавлено ли слово или удалено.
Проще показать
[[0,"Текст который мы "],[-1,"бы"],[1,"еще не"],[0," изменили"]]
-1 удалено
1 добавлено
0 без изменений
Нужно быть внимательными, если при Вы только дописали текст, то значения с -1 не будет.
var res = dmp.diff_main('Текст который мы изменили', 'Текст который мы еще не изменили'); //[[0,"Текст который мы "],[1,"еще не "],[0,"изменили"]]
Я слегка напутал с примерами, конечно, второй текст результирующий, первый исходный.
Касательно моей задачи, то что доктор прописал. Удаленный параметр это значение, добавленный это его синоним. Дальше добавляем некую логику смены позиции, а значит и смены пары значение-синоним. Вот и все задача решена. Лишний раз убеждаюсь, что лень - двигатель прогресса. Рерайтим статью, при этом еще не забываем про просмотр iptv на компьютере, а база при этом заполяется, и в дальнейшем, пропустив через эту базу новые статьи, работать руками придется меньше.
Не зря я вспомнил про iptv каналы, их столько, что порой задаешься вопросом, а как найти разницу между ними. Вот бы такой же скрипт для телевизора правда?!
Смотрим только то, что идет с +1))) ну Вы поняли =)
Комментарии