LINUX.ORG.RU

Кому надо было diff?

 , ,


0

2

Тут на форуме второй раз поднимается тема диффа с расстоянием Левенштейна, в связи с чем я вспомнил, что писал как-то подобную функцию на Racket для тренажера азбуки морзе, чтобы оценивать количество ошибок. Только у меня не расстояние Левенштейна, а немного более «умная» функция.

Подправил для более универсального применения, получилась функция для диффа списков: https://github.com/punzik/scheme-list-diff

Протестировать можно так:

$ racket list-diff-test.rkt connect conehead

Disclaimer:
Не пытайтесь сравнивать списки длиной более 500 элементов, не хватит памяти! На полутора тысячах оно отожрало 30 гиг и было убито oom-киллером 👍

★★★★★

Последнее исправление: Puzan (всего исправлений: 1)

Ответ на: комментарий от Puzan

Это когда, когда есть своя функция сравнения символов, и чтобы добить, это сравнение не метрическое.

anonymous
()
Ответ на: комментарий от Puzan

кто использует дифф в таком контексте

Как раз такой дифф и нужен был - со своей функцией сравнения символов-строк на (фонетитескую, визуальную) похожесть.

anonymous
()
Ответ на: комментарий от anonymous

И да Левенштейн - это практически полный перебор - квадрат (прямоугольник) по памяти и по времени. Есть отимизации по памяти, но квадрат по времени остается.

anonymous
()
Ответ на: комментарий от anonymous

Как раз такой дифф и нужен был

Кому?

со своей функцией сравнения символов-строк на (фонетитескую, визуальную) похожесть.

Ну это не задача функции diff. Нужно просто написать функцию сравнения символов с весами, а в diff добавить поддержку этих весов. Это не сложно, по-моему.

Puzan ★★★★★
() автор топика
Ответ на: комментарий от anonymous

И да Левенштейн - это практически полный перебор

У меня даже более ресурсоёмкое сравнение.

Puzan ★★★★★
() автор топика

А я итоге разбил патч на части и удалил блоки у которых + и - имеют высокие коэффициенты сходства.

steemandlinux ★★★★★
()
Ответ на: комментарий от Puzan

написать функцию сравнения символов с весами

В Левенштейне алгоритм опирается на опредленные свойства этих весов. Как минимум - транзитивность ( a=b, b=c –> a=c ). Если эти свойства не выполняются, то D(i,j) будет неправильно построен.

anonymous
()
Ответ на: комментарий от anonymous

Если эти свойства не выполняются, то D(i,j) будет неправильно построен.

Фонетическое сравнение разве нетранзитивно?

Puzan ★★★★★
() автор топика
Ответ на: комментарий от Puzan

Тем, с кем можно дискутировать. Если не будет доказательства, то нет тех, с кем можно дискутировать, в том числе и ты сам.

anonymous
()
Ответ на: комментарий от Puzan

Парадокс - это всего лишь отрицаемое «некоторыми личностями» высказывание, это не противоречие

anonymous
()
Ответ на: комментарий от anonymous

Вернемся к нашим баранам, то есть фонетическим парадоксам

Наполеон косил траву,
поляки пели журавлями.

На поле он косил траву,
поля кипели журавлями.
anonymous
()
Ответ на: комментарий от anonymous

И? Ты, пожалуйста, мысль нормально излагай, развёрнуто. Если хочешь что-то спросить - спрашивай, доказать - доказывай. Не надо в телепатов играть.

Puzan ★★★★★
() автор топика
Ответ на: комментарий от anonymous

«Логический парадокс — противоречие, имеющее статус логически корректного вывода и, вместе с тем, представляющее собой рассуждение, приводящее к взаимно исключающим заключениям.» ©Википедия

Puzan ★★★★★
() автор топика
Ответ на: комментарий от Puzan

Если хочешь что-то спросить - спрашивай, доказать - доказывай.

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

Прогноз погоды: сегодня ожидается восемь - десять градусов Цельсия.

anonymous
()
Ответ на: комментарий от anonymous

Сперва ты приведи доказательство про «некоторых личностей»

Зачем же ты предлагал вернуться к нашим баранам? Не хочешь - не надо, мне с тобой дискутировать не о чем.

Puzan ★★★★★
() автор топика
Ответ на: комментарий от Puzan

©Википедия

А предупреждение прочитать?

В этой статье не хватает ссылок на источники информации.

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

А по ссылке сходить?

https://iphlib.ru/library?el=&a=d&c=newphilenc&d=&rl=1&href=http:%2f%2f2258.html

ПАРАДОКС ЛОГИЧЕСКИЙ – рассуждение либо высказывание, в котором, пользуясь средствами, не выходящими (по видимости) за рамки логики, и посылками, которые кажутся заведомо приемлемыми, приходят к заведомо неприемлемому результату.

anonymous
()
Ответ на: комментарий от Puzan

Зачем же ты предлагал вернуться к нашим баранам?

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

Зачем ты влез в мою дискусию с самим собой?! Соблюдай социальную дистанцию!

- Иди отсюда.
- Идиот, сюда.
anonymous
()
Ответ на: комментарий от anonymous

Если ты не заметил, это был ответ самому себе.

Пожалуйста, сам с собой иди беседовать в другое место, не засирай мне тему. Я тебе уже говорил: Хочешь конструктива? Пожалуйста, милости просим. Нет? До свиданья.

Puzan ★★★★★
() автор топика
Ответ на: комментарий от Puzan

Конструктив был - как получить нетразитивные фонетические конструкции. Уже несколько сообщений даю примеры таких конструкций. При особом желании, думаю, можно еще привести примеры буквосочетаний с нетранзитивной фонетикой, особенно для английского.

anonymous
()
Ответ на: комментарий от anonymous

Уже несколько сообщений даю примеры таких конструкций.

Докажи. То, что ты написал - просто текст и твои фантазии.

Puzan ★★★★★
() автор топика
Ответ на: комментарий от Puzan

Если хочешь

Так ты просто хотел порекламировать свою «поделку»? Так следовало бы тогда рекламировать, а не внушать отвращение «тупняком», вроде? Не заметил как твоя «реклама» стала «антирекламой»?

anonymous
()
Ответ на: комментарий от anonymous

Не заметил как твоя «реклама» стала «антирекламой»?

Нет.

внушать отвращение «тупняком»

Ты должен был заметить, что отвращение тупняком вызываешь ты, а не я. Причём уже много лет.

Puzan ★★★★★
() автор топика
Ответ на: комментарий от Puzan

Нет.

Чего нет то? Потерялся, чтоле? Очнуться не хочешь? (И кстати, а с кем ты беседовал?).

anonymous
()
Ответ на: комментарий от Puzan

К себе пробовал применить? «Ты, пожалуйста, мысль нормально излагай, развёрнуто»

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

Начни с себя - расскажи про этого Анонимуса.

anonymous
()
Ответ на: комментарий от anonymous

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

Замечу, что я просто спросил, не Анонимус ли ты. Твой ответ дал основания полагать, что это так и есть.

А твоё «конструктивное» предложение изначально было некорректно

Игнорируем одну ошибку: ab=abc, abc=bc –> ab=bc. Но ab != bc - 2 ошибки

Потому что «=» - это не равенство, а степень сходства, и транзитивность на него не натягивается.

Puzan ★★★★★
() автор топика
Ответ на: комментарий от Puzan

Замечу, что я просто спросил, не Анонимус ли ты. Твой ответ дал основания полагать, что это так и есть.

Вот это «нормально изложил, развернуто». Я сразу понял про этого Анонимуса

Потому что «=» - это не равенство, а степень сходства, и транзитивность на него не натягивается.

Если на него транзитивность не натягивается, то тебе придется по новой доказывать работоспособность алгоритма. Если ты читал вики, то транзитивность используется в доказательстве. Например, для расстояния Дамерау - Левенштейна, где вводят операцию транспозиции - обмена соседних (условно замена 2 соседних символов имеет вес 1 = 2*w, где w = 0.5) уже другой алгоритм. И расстояние Дамерау - Левенштейна уже не обладает свойствами метрики.

А для произволных весов в русской вики написано

задачу для произвольных w, решает алгоритм Вагнера — Фишера, приведённый ниже. Здесь и ниже мы считаем, что все w неотрицательны, и действует правило треугольника: если две последовательные операции можно заменить одной, это не ухудшает общую цену (например, заменить символ x на y, а потом с y на z не лучше, чем сразу x на z).

anonymous
()
Ответ на: комментарий от Puzan

Ты несешь какую-то дичь, ей богу, свалил всё в кучу.

Вот это «нормально изложил, развернуто».

Контрольный вопрос: ты писал Левенштейна с призвольными весами для каждого символа? Или твой «рекет» - это максимум что ты смог?

anonymous
()

О, какая вещь, посмотрю.

anonymous
()
Ответ на: комментарий от Puzan

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

anonymous
()
Ответ на: комментарий от anonymous

Ты всё тот же анонимус, или другой? Подписывайтесь хоть.

Puzan ★★★★★
() автор топика
Последнее исправление: Puzan (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.