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

ex1

abc def gkm & abc def 123 gkm

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

ex2
abc 123 def gkm & abc def 123 gkm

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

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

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

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

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

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

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

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

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

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


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

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

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

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

abc 123 def и abc def 123
...
Рейтинг: 0 / 0
22.09.2016, 10:09
    #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
22.09.2016, 10:45
    #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
22.09.2016, 11:31
    #39313255
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поскажите алгоритм сравнения строк
AkinaМне кажется, что корректная подсветка должна быть такой:
abc 123 def gkm | abc def 123 gkm
...
Рейтинг: 0 / 0
22.09.2016, 11:33
    #39313260
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поскажите алгоритм сравнения строк
AkinaМне кажется, что корректная подсветка должна быть такой:
abc 123 def gkm | abc def 123 gkm
а почему не такой вариант?
abc 123 def gkm | abc def 123 gkm
...
Рейтинг: 0 / 0
22.09.2016, 14:38
    #39313479
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поскажите алгоритм сравнения строк
kealon(Ruslan)а почему не такой вариант?В подавляющем большинстве случаев сравниваются исходная и конечная версии. А показанный вариант хорош для сравнения двух независимых конечных версий.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Поскажите алгоритм сравнения строк / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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