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

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

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

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

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

Любой совет для того, как выполнить это, ценится.

18
задан Jim Geurts 8 March 2011 в 15:12
поделиться

3 ответа

Microsoft выпустила Diff Project On CodePlex, который позволяет делать Word, символ и линию дифференциров. Он лицензирован в соответствии с публичной лицензией Microsoft (MS-PL).

https://github.com/mmanela/diffplex

17
ответ дан 30 November 2019 в 09:06
поделиться

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

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

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

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

1
ответ дан 30 November 2019 в 09:06
поделиться

Хорошо String.Split с '\ n', '' и '\ t' в качестве разделенных символов вернет вам массив слов в вашем блоке текста.

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

hello world how are you

и:

hello there how are you

даст вам этот мир и изменит его на там .

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

0
ответ дан 30 November 2019 в 09:06
поделиться
Другие вопросы по тегам:

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