С# Diff Алгоритм для текста
Я ищу алгоритм diff, который даст результаты, такие как SO edit revisions page. Я более или менее просто начал смотреть, и я не против этого, но мне не нужно изобретать велосипед.
Я буду использовать С# 4.0. У меня в основном две строки, а одна - новая. Я хочу знать, что изменилось в новом, выделив и пробив.
Ответы
Ответ 1
Он основан на алгоритме Longest common subsequence
, который широко известен как LCS
.
LCS старого текста и нового текста дает часть, которая остается неизменной. Таким образом, части старого текста, которые не являются частью LCS, являются тем, который был изменен.
На странице wiki выше:
Это классическая проблема компьютерных наук, основа diff (программа сравнения файлов, которая выводит различия между двумя файлами), и имеет приложения в биоинформатике.
Ответ 2
Вы можете посмотреть Menees Diff для примера, написанного на С#.
Ответ 3
Обычно реализуется с помощью алгоритма длинной общей подстроки. Этот пост будет интересен.
Ответ 4
Я нашел этот пост легко следовать с четким кодом и простыми примерами. Я только прочитал его, но еще не выполнил его.
Ответ 5
Я обнаружил, что Google опубликовал код для выполнения diff, match и patch, который содержит классы С# и тестовый код. Код не слишком сложный для использования IMHO.
https://code.google.com/archive/p/google-diff-match-patch/
Хорошо документировано здесь:
https://code.google.com/archive/p/google-diff-match-patch/wikis/API.wiki