Расстояние Дамерау – Левенштейна
В теории информации и информатике расстояние Дамерау – Левенштейна (названное в честь Фредерика Дж. Дамерау и Владимира И. Левенштейна). [ 1 ] [ 2 ] [ 3 ] ) — строковая метрика для измерения расстояния редактирования между двумя последовательностями. Неформально расстояние Дамерау-Левенштейна между двумя словами представляет собой минимальное количество операций (состоящих из вставок, удалений или замен одного символа или перестановки двух соседних символов), необходимых для преобразования одного слова в другое.
Расстояние Дамерау-Левенштейна отличается от классического расстояния Левенштейна тем, что включает транспозиции среди допустимых операций в дополнение к трем классическим операциям редактирования одного символа (вставки, удаления и замены). [ 4 ] [ 2 ]
В своей основополагающей статье [ 5 ] Дамерау заявил, что при расследовании орфографических ошибок в информационно-поисковой системе более 80% были результатом единственной ошибки одного из четырех типов. В статье Дамерау рассматривались только орфографические ошибки, которые можно было исправить не более чем за одну операцию редактирования. Хотя первоначальная мотивация заключалась в измерении расстояния между человеческими орфографическими ошибками для улучшения таких приложений, как проверка правописания , расстояние Дамерау-Левенштейна также нашло применение в биологии для измерения различий между белковыми последовательностями. [ 6 ]
Определение
[ редактировать ]Чтобы выразить расстояние Дамерау – Левенштейна между двумя строками и , функция определяется, значением которого является расстояние между -префикс символа (начальная подстрока) строки и -префикс символа .
Функция ограниченного расстояния определяется рекурсивно как: [ 7 ] : А:11 где индикаторная функция равна 0, когда и равен 1 в противном случае.
Каждый рекурсивный вызов соответствует одному из случаев, охватываемых расстоянием Дамерау – Левенштейна:
- соответствует делеции (от a до b ),
- соответствует вставке (от a до b ),
- соответствует совпадению или несовпадению, в зависимости от того, совпадают ли соответствующие символы,
- соответствует транспозиции между двумя последовательными символами.
Расстояние Дамерау – Левенштейна между a и b затем определяется значением функции для полных строк: , где обозначает длину строки a и длина b .
Алгоритм
[ редактировать ]Здесь представлены два алгоритма: первый, [ 8 ] более простой, вычисляет так называемое оптимальное расстояние выравнивания строки или ограниченное расстояние редактирования , [ 7 ] в то время как второй [ 9 ] вычисляет расстояние Дамерау – Левенштейна с соседними транспозициями. Добавление транспозиций существенно усложняет задачу. Разница между двумя алгоритмами состоит в том, что алгоритм оптимального выравнивания строк вычисляет количество операций редактирования, необходимых для приведения строк в равенство при условии, что ни одна подстрока не редактируется более одного раза , тогда как второй алгоритм не имеет такого ограничения.
Возьмем, к примеру, расстояние редактирования между CA и ABC . Расстояние Дамерау–Левенштейна LD( CA , ABC ) = 2, потому что CA → AC → ABC , но оптимальное расстояние выравнивания строки OSA( CA , ABC ) = 3, потому что если используется операция CA → AC , использовать ее невозможно. AC → ABC, потому что это потребует редактирования подстроки более одного раза, что не разрешено в OSA, и поэтому кратчайшая последовательность операций — CA → A → AB → ABC . Обратите внимание, что для оптимального расстояния выравнивания строки неравенство треугольника не выполняется: OSA( CA , AC ) + OSA( AC , ABC ) < OSA( CA , ABC ), и поэтому это не истинная метрика.
Оптимальное расстояние выравнивания струн
[ редактировать ]Оптимальное расстояние выравнивания строки можно вычислить с помощью простого расширения Вагнера-Фишера алгоритма динамического программирования , который вычисляет расстояние Левенштейна . В псевдокоде :
algorithm OSA-distance is input: strings a[1..length(a)], b[1..length(b)] output: distance, integer let d[0..length(a), 0..length(b)] be a 2-d array of integers, dimensions length(a)+1, length(b)+1 // note that d is zero-indexed, while a and b are one-indexed. for i := 0 to length(a) inclusive do d[i, 0] := i for j := 0 to length(b) inclusive do d[0, j] := j for i := 1 to length(a) inclusive do for j := 1 to length(b) inclusive do if a[i] = b[j] then cost := 0 else cost := 1 d[i, j] := minimum(d[i-1, j] + 1, // deletion d[i, j-1] + 1, // insertion d[i-1, j-1] + cost) // substitution if i > 1 and j > 1 and a[i] = b[j-1] and a[i-1] = b[j] then d[i, j] := minimum(d[i, j], d[i-2, j-2] + 1) // transposition return d[length(a), length(b)]
Отличием от алгоритма для расстояния Левенштейна является добавление одной рекуррентности:
if i > 1 and j > 1 and a[i] = b[j-1] and a[i-1] = b[j] then d[i, j] := minimum(d[i, j], d[i-2, j-2] + 1) // transposition
Расстояние с соседними транспозициями
[ редактировать ]Следующий алгоритм вычисляет истинное расстояние Дамерау – Левенштейна с соседними транспозициями; этот алгоритм требует в качестве дополнительного параметра размер алфавита Σ , чтобы все элементы массивов находились в [0, |Σ|) : [ 7 ] : А:93
algorithm DL-distance is input: strings a[1..length(a)], b[1..length(b)] output: distance, integer da := new array of |Σ| integers for i := 1 to |Σ| inclusive do da[i] := 0 let d[−1..length(a), −1..length(b)] be a 2-d array of integers, dimensions length(a)+2, length(b)+2 // note that d has indices starting at −1, while a, b and da are one-indexed. maxdist := length(a) + length(b) d[−1, −1] := maxdist for i := 0 to length(a) inclusive do d[i, −1] := maxdist d[i, 0] := i for j := 0 to length(b) inclusive do d[−1, j] := maxdist d[0, j] := j for i := 1 to length(a) inclusive do db := 0 for j := 1 to length(b) inclusive do k := da[b[j]] ℓ := db if a[i] = b[j] then cost := 0 db := j else cost := 1 d[i, j] := minimum(d[i−1, j−1] + cost, //substitution d[i, j−1] + 1, //insertion d[i−1, j ] + 1, //deletion d[k−1, ℓ−1] + (i−k−1) + 1 + (j-ℓ−1)) //transposition da[a[i]] := i return d[length(a), length(b)]
Чтобы разработать правильный алгоритм для расчета неограниченного расстояния Дамерау – Левенштейна, обратите внимание, что всегда существует оптимальная последовательность операций редактирования, при которой однажды транспонированные буквы никогда впоследствии не изменяются. (Это справедливо до тех пор, пока стоимость транспозиции , представляет собой, по крайней мере, среднее значение стоимости вставки и удаления, т. е. . [ 9 ] ) Таким образом, нам нужно рассмотреть только два симметричных способа изменения подстроки более одного раза: (1) переставить буквы и вставить между ними произвольное количество символов или (2) удалить последовательность символов и переставить буквы, которые становятся соседними после удаление. Прямая реализация этой идеи дает алгоритм кубической сложности: , где M и N — длины строк. Используя идеи Лоуренса и Вагнера, [ 9 ] этот наивный алгоритм можно улучшить, чтобы он стал в худшем случае именно это и делает приведенный выше псевдокод.
Интересно, что алгоритм bitap можно модифицировать для обработки транспонирования. См. раздел «Поиск информации» [1] для примера такой адаптации.
Приложения
[ редактировать ]Расстояние Дамерау–Левенштейна играет важную роль в обработке естественного языка . В естественных языках строки короткие, а количество ошибок (опечаток) редко превышает 2. В таких обстоятельствах ограниченное и реальное расстояние редактирования различаются очень редко. Ооммен и Локи [ 8 ] даже смягчил ограничение на ограниченное расстояние редактирования, введя обобщенные транспозиции . Тем не менее, следует помнить, что ограниченное расстояние редактирования обычно не удовлетворяет неравенству треугольника и, следовательно, не может использоваться с метрическими деревьями .
ДНК
[ редактировать ]Поскольку в ДНК часто происходят вставки, делеции, замены и транспозиции, и каждая из этих операций происходит примерно в одном и том же временном масштабе, расстояние Дамерау-Левенштейна является подходящим показателем вариаций между двумя цепями ДНК. [ 6 ] Более распространенным в задачах выравнивания ДНК, белков и других задач, связанных с биоинформатикой, является использование тесно связанных алгоритмов, таких как алгоритм Нидлмана-Вунша или алгоритм Смита-Уотермана . [ нужна ссылка ]
Обнаружение мошенничества
[ редактировать ]Алгоритм можно использовать с любым набором слов, например с именами поставщиков. Поскольку ввод по своей сути осуществляется вручную, существует риск попадания поддельного поставщика. Сотрудник-мошенник может указать одного настоящего поставщика, например «Rich Heir Estate Services», а не ложного поставщика «Rich Hier State Services». Затем мошенник создаст фальшивый банковский счет и заставит компанию направлять чеки реальному и ложному поставщику. Алгоритм Дамерау-Левенштейна обнаружит транспонированную и пропущенную букву и обратит внимание на эти элементы эксперта по борьбе с мошенничеством.
Экспортный контроль
[ редактировать ]Правительство США использует расстояние Дамерау-Левенштейна в своем API сводного списка проверки. [ 10 ]
См. также
[ редактировать ]- Ispell – предлагает поправки, основанные на расстоянии Дамерау–Левенштейна, равном 1.
- Тайпсквоттинг - форма киберсквоттинга, основанная на ошибках при вводе адреса веб-сайта.
Ссылки
[ редактировать ]- ^ Брилл, Эрик; Мур, Роберт С. (2000). Улучшенная модель ошибок для исправления орфографии в канале с шумом (PDF) . Материалы 38-го ежегодного собрания Ассоциации компьютерной лингвистики. стр. 286–293. дои : 10.3115/1075218.1075255 . Архивировано из оригинала (PDF) 21 декабря 2012 г.
- ^ Перейти обратно: а б Бард, Грегори В. (2007), «Толерантные к орфографическим ошибкам, независимые от порядка фразы-пароли с помощью метрики расстояния редактирования строки Дамерау – Левенштейна», Труды Пятого австралийского симпозиума по границам ACSW: 2007, Балларат, Австралия, январь 30 - 2 февраля 2007 г. , Конференции по исследованиям и практике в области информационных технологий, том. 68, Дарлингхерст, Австралия: Австралийское компьютерное общество, Inc., стр. 117–124, ISBN. 978-1-920682-49-1 .
- ^ Ли; и др. (2006). Изучение моделей, основанных на сходстве распределения, для исправления орфографии запроса (PDF) . Материалы 21-й Международной конференции по компьютерной лингвистике и 44-го ежегодного собрания Ассоциации компьютерной лингвистики. стр. 1025–1032. дои : 10.3115/1220175.1220304 . Архивировано из оригинала (PDF) 1 апреля 2010 г.
- ^ Левенштейн, Владимир И. (февраль 1966 г.), «Двоичные коды, способные исправлять удаления, вставки и обращения», Доклады физики СССР , 10 (8): 707–710, Бибкод : 1966СФД...10..707Л
- ^ Дамерау, Фред Дж. (март 1964 г.), «Техника компьютерного обнаружения и исправления орфографических ошибок», Communications of the ACM , 7 (3): 171–176, doi : 10.1145/363958.363994 , S2CID 7713345
- ^ Перейти обратно: а б Майорек, Каролина А.; Дунин-Горкавич, Станислав; и др. (2013), «Суперсемейство РНКазы H: новые члены, сравнительный структурный анализ и эволюционная классификация», Nucleic Acids Research , 42 (7): 4160–4179, doi : 10.1093/nar/gkt1414 , PMC 3985635 , PMID 24464998
- ^ Перейти обратно: а б с Бойцов, Леонид (май 2011 г.). «Методы индексирования для приблизительного поиска по словарю». Журнал экспериментальной алгоритмики . 16 :1. дои : 10.1145/1963190.1963191 . S2CID 15635688 .
- ^ Перейти обратно: а б Ооммен, Би Джей; Локи, РКС (1997). «Распознавание строк с заменами, вставками, удалениями и обобщенными транспозициями». Распознавание образов . 30 (5): 789–800. Бибкод : 1997PatRe..30..789O . CiteSeerX 10.1.1.50.1459 . дои : 10.1016/S0031-3203(96)00101-X .
- ^ Перейти обратно: а б с Лоуренс, Рой; Вагнер, Роберт А. (апрель 1975 г.), «Расширение проблемы коррекции по строкам», J ACM , 22 (2): 177–183, doi : 10.1145/321879.321880 , S2CID 18892193
- ^ «API сводного списка скрининга» . Портал разработчиков Trade.gov . Управление международной торговли Министерства торговли США. Архивировано из оригинала 30 октября 2019 г.
Дальнейшее чтение
[ редактировать ]- Наварро, Гонсало (март 2001 г.), «Экскурсия по приблизительному сопоставлению строк», ACM Computing Surveys , 33 (1): 31–88, doi : 10.1145/375360.375365 , S2CID 207551224