Как определить, чем отличается один текст от другого и выделить эти различия (difference). 

При написании автоматического рерайтера текста, в рамках вот этого проекта, возникла необходимость составить базу синонимичных фраз. Заполнять ее специально  (руками) было лень, хотя и сделал такую возможность. Я решил пойти другим путем. Каждый день, я рерайтил по несколько статей для своего новостного блога. Если разобраться, то разница между исходным текстом и результирующим это и есть пары значение-синоним. Осталось только научится находить разницу. Как оказалось задача давно изучена и решена. Есть готовые решения для php, есть для js. Меня интересовала клиентская сторона, поэтому я изучил javascript реализации.

На этом поприще есть лидеры. Самым интересным экземпляром был набор скриптов от самого Google (или самой, зависит от Вашей религии). Там же можно посмотреть и как оно работает

Demo

 

Если не вдаваться в подробности, то нам потребуется всего одна функция, а точнее метод

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))) ну Вы поняли =)

 

Рассказать друзьям

Добавить комментарий


Защитный код
Обновить

Комментарии   

0
5000155
# 5000155 10.06.2013 21:04
Привет) Нарел на твой блог из гугла, понравилось как пишешь и решаешь разные задачи :) Есть предложение для тебя, если не сложно - напиши в асю 5000155. Спасибо заранее)