Подтвердить что ты не робот

Как отображать различия слов с помощью С#?

Я хотел бы показать различия между двумя блоками текста. Вместо сравнения строк текста или отдельных символов я хотел бы просто сравнить слова, разделенные указанными символами (например,\n,,,,,). Мое основное соображение для этого состоит в том, что блок текста, который я буду сравнивать в целом, не имеет большого количества разрывов строк в нем, и сравнение букв может быть трудно выполнить.

Я столкнулся с следующей логикой O (ND) в С# для сравнения строк и символов, но я вроде как потеря для того, как изменить его для сравнения слов.

Кроме того, я хотел бы отслеживать разделители между словами и убедиться, что они включены в diff. Поэтому, если место заменено жестким возвратом, я бы хотел, чтобы это появилось как diff.

Я использую Asp.Net(С#) для отображения всего блока текста, включая удаленный исходный текст и добавленный новый текст (оба будут выделены, чтобы показать, что они были удалены/добавлены). Будет оценено решение, которое работает с этими технологиями.

Приветствуются любые советы о том, как это сделать.

4b9b3361

Ответ 1

Microsoft выпустила проект diff на CodePlex, который позволяет вам делать слова, символы и разности строк. Он лицензируется по лицензии Microsoft Public (Ms-PL).

https://github.com/mmanela/diffplex

Ответ 2

Помимо нескольких общих оптимизаций, если вам нужно включить разделители в сравнение, вы по существу делаете символ по сравнению с перерывами. Хотя вы можете использовать O (ND), с которым вы связаны, вы собираетесь сделать так много изменений, как вы в основном пишете свои собственные.

Основная проблема сравнения различий заключается в нахождении продолжения (если я удалю одно слово, но оставлю все остальное).

Если вы хотите использовать начало кода в этом примере и не записывать удаленные символы, если заменены символы в одном и том же месте, не выводите этот результат. Затем вам нужно вычислить самый длинный непрерывный запуск "измененных" слов, выделить эту строку и вывести.

Извините, что ответа не так много, но для этой проблемы ответ в основном заключается в написании и настройке функции.

Ответ 3

Ну String.Split с '\n', '' и '\ t', так как разделительные символы возвратят вам массив слова в вашем блоке текста.

Затем вы можете сравнить каждый массив для различий. Простое сравнение 1:1 скажет вам, было ли какое-либо слово изменено. Сравнение:

hello world how are you

и

hello there how are you

предоставит вам world и изменится на there.

Что бы вы не сказали вам, было бы, если бы слова были вставлены или удалены, и вам все равно придется разбирать символы текстовых блоков по символу, чтобы увидеть, был ли изменен какой-либо из разделительных символов.