Задать вопрос
youngmysteriouslight
@youngmysteriouslight
ТК, ТТ, JS, FP, WM

Чем сравнить две версии размеченного текста на уровне слов?

Общая задача передо мною стоит так:
есть два файла с размеченным текстом, а точнее один файл и один diff, который выдала СКВ.
Нужно из них составить корректный (по языку разметки) файл, в котором включены обе версии, общие части не дублируются, различные части обрамляются специальными тегами.
При этом изменения в словах должны выделяться на уровне слов.
Например,
Файл 1:
<h1>Заголовок</h1>
Подзаголовок
Мама мыла раму.
Не было тучь на небе.

Файл 2:
<h1>Название</h1>
<h2>Подзаголовок</h2>
Мама мыла пуделя.
В небе были тучи.

Результат:
<h1><span class=old>Заголовок</span> <span class=new>Название</span><h1>
<h2>Подзаголовок</h2>
Мама мыла <span class=old>раму</span> <span class=new>пуделя</span>.
<span class=old>Не было тучь на небе.</span>
<span class=new>В небе были тучи.</span>

В принципе, я могу написать функцию, которая принимает два фрагмента и возвращает результат слияния, учитывая мои желания о результате и особенности используемого языка разметки.
Тогда задача сводится к определению этих самых фрагментов.

diff не подходит, потому что он сравнивает построчно, а строка слишком велика, чтобы её выделять и дублировать, если в ней только одно слово изменено, как в примере с рамой и названием. К тому же, мне хочется, чтобы как можно меньше была вероятность попадания тегов в фрагмент, если тот невелик (см. пример с Заголовком). Вариант вставить в файл дополнительные разрывы строк, чтобы на одной строке было слово, а затем применить diff не подходит, потому что в больших отличающихся фрагментах почти наверняка есть повторяющиеся слова, напр., союзы (см. пример со словом "небе").

Я бы хотел найти какую-нибудь программу, которая работает наподобие kdiff3, который может в строке подсветить отличающиеся символы,
при этом выход этой программы должен быть в таком формате, чтобы я мог дальше применить свою функцию.

Собственно, вопрос:
есть ли какая-нибудь программа, которая могла бы определить фрагменты, в которых два файла отличаются, на уровне слов, а не строк, и формировала список фрагментов с их координатами в легкопарсимом формате?


Или подойти к задаче с другой стороны?
  • Вопрос задан
  • 51 просмотр
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
как вы себе представляете функционал такой программы?

чекайте левенштейном, и где близко - делите словами, далеко - строками
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы