powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Поскажите алгоритм сравнения строк
32 сообщений из 32, показаны все 2 страниц
Поскажите алгоритм сравнения строк
    #39312109
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно сравнить два похожих текста и подсветить отличающиеся части, например как это делает Araxis Merge.
Попробовал погуглить, но гуглятся лишь алгоритмы сравнения типа одинаковые/разные, меряющиеся производительностью.
А мне нужно, например, на выходе получить два массива, в которых чередуются одинаковые и разные куски исходных строк.
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312120
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
diff чем не устраивает?
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312124
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, тебе подойдут алгоритмы поиска [наибольшей] общей подстроки? Нашёл (есссно, вменяемо некороткие), вырезал (есссно запомнив, откуда), нашёл, вырезал... а что останется - то и есть различия.
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312140
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owldiff чем не устраивает?
дифф из цигвина не сравнивает кирилицу вроде?
или в ютифи8 он её сравнивает?
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312154
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owldiff чем не устраивает?а это что?
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312170
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyWhite Owldiff чем не устраивает?а это что?утилита такая из стандартного набора GNU распространяющаяся в исходниках во всех дистрибутивах линуксов.
Тебе ж алгоритм нужен? Ну так возьми и прочитай работающий пример.
https://www.gnu.org/software/diffutils/
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312309
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyWhite Owldiff чем не устраивает?а это что?
в первую очередь алгоритм поиска совпадающей подцепочки максимальной длины
или же старая добрая юниксовая утилита
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312348
command.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
собственно алгоритм - http://www.angusj.com/delphi/textdiff.html
но работает _построчно_
для "подсветить отличающиеся части, например как это делает Araxis Merge" придется допиливать - перед скармливанием алгоритму разбивать текст _пословно_
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312397
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

ex1

abc def gkm & abc def 123 gkm

Согласно вашей логике 123 будет подсвечено.

ex2
abc 123 def gkm & abc def 123 gkm

Будет ли что-то подсвечено в данном примере, и что именно?
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312532
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryex2
abc 123 def gkm & abc def 123 gkm

Будет ли что-то подсвечено в данном примере, и что именно?будет подсвечено 123 в обеих строках.
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312538
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
command.comсобственно алгоритм - http://www.angusj.com/delphi/textdiff.html
но работает _построчно_
для "подсветить отличающиеся части, например как это делает Araxis Merge" придется допиливать - перед скармливанием алгоритму разбивать текст _пословно_не подходит, нужно подсвечивать и куски слов.
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312546
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312648
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага, только мне самому нужно такое в html забацать.
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312713
dimonz80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312731
hclubmk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На гитхабе что-то было
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312741
command.com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariyне подходит, нужно подсвечивать и куски слов.ты бы разобрался получше сначала
алгоритм работает с двумя списками (последовательностями) неких сущностей (например, строк или символов или каких-то кусков текста), сравнивая их посущностно (покусочно)
разбивка на эти куски - вне ответственности алгоритма, ему на вход подаются предварительно подготовленные последовательности.

если сразу скормить ему отдельные символы - на выходе будет полная каша.
имеет смысл сначала дать ему пару текстов, разбитых на строки, затем - пары _несовпадающих_ групп строк, разбитых на слова, а уже затем, если нужно - пары _несовпадающих_ слов посимвольно, чтобы получить подсветку отдельных символов, а не слов целиком
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312743
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariySashaMercuryex2
abc 123 def gkm & abc def 123 gkm

Будет ли что-то подсвечено в данном примере, и что именно?будет подсвечено 123 в обеих строках.

А почему не def?
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312801
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryAntonariyпропущено...
будет подсвечено 123 в обеих строках.

А почему не def?потому что abc 123 def и abc def отличаются лишь отсутствием 123.

в общем, сделал на алгоритме наибольшей общей подстроки по совету Akina, всем спасибо.

работает не идеально, но ко всему, чему нужно, внимание привлекает:
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39312947
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, делал сам похожую штуку.

Есть разные алгоритмы создания диффов - они отличаются используемой эвристикой, т.к. "честный" дифф достаточно тяжел вычислительно.

На что следует обратить внимание:
- https://ru.wikipedia.org/wiki/Наибольшая_общая_подстрока
- https://ru.wikipedia.org/wiki/Расстояние_Левенштейна - обобщить для удаления и вставки подстрок вместо отдельных символов
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39313056
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariySashaMercuryпропущено...


А почему не def?потому что abc 123 def и abc def отличаются лишь отсутствием 123.

в общем, сделал на алгоритме наибольшей общей подстроки по совету Akina, всем спасибо.

работает не идеально, но ко всему, чему нужно, внимание привлекает:

строки не такие. А такие:

abc 123 def и abc def 123
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39313163
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryAntonariyпропущено...
потому что abc 123 def и abc def отличаются лишь отсутствием 123.

в общем, сделал на алгоритме наибольшей общей подстроки по совету Akina, всем спасибо.

работает не идеально, но ко всему, чему нужно, внимание привлекает:

строки не такие. А такие:

abc 123 def и abc def 123а если бы были abc def 123 и abc 123 def, то подсветилось бы def.
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39313202
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyесли бы были abc def 123 и abc 123 def, то подсветилось бы def.В рамках задачи на поиск отличающихся вставок это имхо некорректно.
SashaMercuryex2
abc 123 def gkm & abc def 123 gkm

Будет ли что-то подсвечено в данном примере, и что именно?
Мне кажется, что корректная подсветка должна быть такой:
abc 123 def gkm | abc def 123 gkm
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39313255
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaМне кажется, что корректная подсветка должна быть такой:
abc 123 def gkm | abc def 123 gkm
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39313260
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaМне кажется, что корректная подсветка должна быть такой:
abc 123 def gkm | abc def 123 gkm
а почему не такой вариант?
abc 123 def gkm | abc def 123 gkm
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39313479
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)а почему не такой вариант?В подавляющем большинстве случаев сравниваются исходная и конечная версии. А показанный вариант хорош для сравнения двух независимых конечных версий.
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39313812
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariySashaMercuryпропущено...


строки не такие. А такие:

abc 123 def и abc def 123а если бы были abc def 123 и abc 123 def, то подсветилось бы def.

Хорошо. Тогда что по вашему должно быть подсвечено в таком случае. Внимательно изучите две строки и ваш предыдущий ответ, прежде чем сделать вывод. И объясните его пожалуйста

abcdefgklmn AND abcefgklmnd


Судя по вашей логике, подсеченным будет следующие элементы

abcd efgklmn AND abc efgklmn d
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39313813
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryAntonariyпропущено...
а если бы были abc def 123 и abc 123 def, то подсветилось бы def.

Хорошо. Тогда что по вашему должно быть подсвечено в таком случае. Внимательно изучите две строки и ваш предыдущий ответ, прежде чем сделать вывод. И объясните его пожалуйста

abcdefgklmn AND abcefgklmnd


Судя по вашей логике, подсеченным будет следующие элементы

abcd efgklmn AND abc efgklmn d

А если это так, то алгоритм сравнения двух строк тривиальный.
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39314037
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, судя по приведённому в 19692849 фрагменту, единицей сравнения должно быть слово, а не символ.
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39314119
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryAntonariyпропущено...
а если бы были abc def 123 и abc 123 def, то подсветилось бы def.

Хорошо. Тогда что по вашему должно быть подсвечено в таком случае. Внимательно изучите две строки и ваш предыдущий ответ, прежде чем сделать вывод. И объясните его пожалуйста

abcdefgklmn AND abcefgklmnd


Судя по вашей логике, подсеченным будет следующие элементы

abcd efgklmn AND abc efgklmn dнеа

abcdefgklmn AND abcefgklmnd

Это не моя логика, это логика araxis merge, и она работает как надо. Если в тексте пропущена буква, то он подсветит место, откуда буква пропала в первой строке (вставляет голубенькую полоску между буквами) и ее наличие в этом месте во второй строке. То, что текст efgklmn из-за пропавшей/появившейся буквы сдвинулся, не значит, что он изменился. Пользователю же нужно видеть семантическое изменение строки, а не физическое, и алгоритм наибольших подстрок хорошо сохраняет именно семантические сходства.
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39314133
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyabcdefgklmn| AND abc|efgklmndвот так
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39314647
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy, и алгоритм наибольших подстрок хорошо сохраняет именно семантические сходства.может бьть, что- то такое будет лучше? https://habrahabr.ru/post/114997/
хотя и сложнее намного.
...
Рейтинг: 0 / 0
Поскажите алгоритм сравнения строк
    #39317271
interweb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyНужно сравнить два похожих текста и подсветить отличающиеся части, например как это делает Araxis Merge.
Попробовал погуглить, но гуглятся лишь алгоритмы сравнения типа одинаковые/разные, меряющиеся производительностью.
А мне нужно, например, на выходе получить два массива, в которых чередуются одинаковые и разные куски исходных строк.

Я такое на angularjs делал в качестве тестового задания
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Поскажите алгоритм сравнения строк
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]