Расстояние Левенштейна, несколько путей - PullRequest
0 голосов
/ 30 мая 2018

Редактировать: TL; версия DR: как получить все возможные обратные следы для расстояния Дамерау – Левенштейна между двумя словами?Я использую https://en.wikipedia.org/wiki/Wagner%E2%80%93Fischer_algorithm, чтобы вычислить расстояние, и тривиальный алгоритм обратного следа (показанный ниже), чтобы восстановить список исправлений.

Более подробная информация ниже:

Только что застрял с оптимальным выравниванием струн (вроде расстояния Дамерау – Левенштейна) при попытке получить полный наборвозможных выравниваний.

Цель состоит в том, чтобы выровнять 2 строки для дальнейшего сравнения в алгоритме автоматического предложения.В частности, я хотел бы игнорировать вставки после конца первого слова.

Проблема в том, что в некоторых случаях возможно несколько «оптимальных» выравниваний, например,

align("goto", "go to home")

1) go to
   go to home

2) go t   o
   go to home

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

Я пытался выполнить какой-либо поиск пути A * или BFS, но похоже, что матрица вычисления стоимости "настроена" только для (2) варианта.Ниже приведен скриншот, где я могу найти красный путь, но похоже, что зеленого пути нет: screenshot

Однако кто-то сделал демо-версию, которая реализует именно то, что я хочу:web demo

Что мне здесь не хватает?

Возможно, моя реализация слишком длинна, чтобы публиковать ее здесь, поэтому есть ссылка на github: https://github.com/victor-istomin/incrementalSpellCheck/blob/f_improvement/spellCheck.hpp

Реализация расстояния находится в методах optimStringAlignementDistance () и optimStringAlignmentBacktrace ().

...