Я хотел бы показать различия между двумя блоками текста. Вместо того, чтобы сравнивать строки текстовых или отдельных символов, я хотел бы просто сравнить слова, разделенные указанными символами ('\n', '', '\t', например). Мое основное обоснование для этого состоит в том, что блок текста, который я буду сравнивать обычно, не имеет многих разрывов строки в нем и обозначает буквами сравнения, может быть твердо следовать.
Я столкнулся со следующим O (ND) логика в C# для сравнения строк и символов, но я - вид в недоумении для того, как изменить его для сравнения слов.
Кроме того, я хотел бы отслеживать разделители между словами и удостовериться, что они включены с различным. Таким образом, если бы пространство заменяется жестким переводом строки, я хотел бы, чтобы это подошло как различное.
Я использую Asp. Сеть (c#) для отображения всего блока текста включая удаленный оригинальный текст и добавила новый текст (оба будут выделены, чтобы показать, что они были удалены/добавлены). Решение, которое работает с теми технологиями, ценилось бы.
Любой совет для того, как выполнить это, ценится.
Microsoft выпустила Diff Project On CodePlex, который позволяет делать Word, символ и линию дифференциров. Он лицензирован в соответствии с публичной лицензией Microsoft (MS-PL).
Помимо нескольких общих оптимизаций, если вам нужно включить разделители в сравнение, вы, по сути, выполняете сравнение символов по символам с разрывами. Хотя вы можете использовать связанный O (ND), вы собираетесь внести в него столько изменений, сколько вы бы написали свои собственные.
Основная проблема при сравнении различий - найти продолжение (если я удалю одно слово, но оставлю все без изменений).
Если вы хотите использовать их код, начните с примера и не записывайте удаленные символы, если в том же месте есть замененные символы, не выводите этот результат. Затем вам нужно вычислить самый длинный непрерывный цикл «измененных» слов, выделить эту строку и вывести результат.
Извините, это не так уж много ответа, но для этой проблемы ответ в основном заключается в написании и настройке функции.
Хорошо String.Split
с '\ n', '' и '\ t' в качестве разделенных символов вернет вам массив слов в вашем блоке текста.
Затем вы можете сравнить каждый массив на предмет различий. Простое сравнение 1: 1 скажет вам, было ли изменено какое-либо слово. Сравнение:
hello world how are you
и:
hello there how are you
даст вам этот мир
и изменит его на там
.
Он не скажет вам, если слова были вставлены или удалены и вам все равно придется разбирать текстовые блоки посимвольно, чтобы увидеть, не был ли изменен какой-либо из разделительных символов.