Jump to content

Расстояние Дамерау – Левенштейна

В теории информации и информатике расстояние Дамерау – Левенштейна (названное в честь Фредерика Дж. Дамерау и Владимира И. Левенштейна). [ 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.
  • Тайпсквоттинг - форма киберсквоттинга, основанная на ошибках при вводе адреса веб-сайта.
  1. ^ Брилл, Эрик; Мур, Роберт С. (2000). Улучшенная модель ошибок для исправления орфографии в канале с шумом (PDF) . Материалы 38-го ежегодного собрания Ассоциации компьютерной лингвистики. стр. 286–293. дои : 10.3115/1075218.1075255 . Архивировано из оригинала (PDF) 21 декабря 2012 г.
  2. ^ Перейти обратно: а б Бард, Грегори В. (2007), «Толерантные к орфографическим ошибкам, независимые от порядка фразы-пароли с помощью метрики расстояния редактирования строки Дамерау – Левенштейна», Труды Пятого австралийского симпозиума по границам ACSW: 2007, Балларат, Австралия, январь 30 - 2 февраля 2007 г. , Конференции по исследованиям и практике в области информационных технологий, том. 68, Дарлингхерст, Австралия: Австралийское компьютерное общество, Inc., стр. 117–124, ISBN.  978-1-920682-49-1 .
  3. ^ Ли; и др. (2006). Изучение моделей, основанных на сходстве распределения, для исправления орфографии запроса (PDF) . Материалы 21-й Международной конференции по компьютерной лингвистике и 44-го ежегодного собрания Ассоциации компьютерной лингвистики. стр. 1025–1032. дои : 10.3115/1220175.1220304 . Архивировано из оригинала (PDF) 1 апреля 2010 г.
  4. ^ Левенштейн, Владимир И. (февраль 1966 г.), «Двоичные коды, способные исправлять удаления, вставки и обращения», Доклады физики СССР , 10 (8): 707–710, Бибкод : 1966СФД...10..707Л
  5. ^ Дамерау, Фред Дж. (март 1964 г.), «Техника компьютерного обнаружения и исправления орфографических ошибок», Communications of the ACM , 7 (3): 171–176, doi : 10.1145/363958.363994 , S2CID   7713345
  6. ^ Перейти обратно: а б Майорек, Каролина А.; Дунин-Горкавич, Станислав; и др. (2013), «Суперсемейство РНКазы H: новые члены, сравнительный структурный анализ и эволюционная классификация», Nucleic Acids Research , 42 (7): 4160–4179, doi : 10.1093/nar/gkt1414 , PMC   3985635 , PMID   24464998
  7. ^ Перейти обратно: а б с Бойцов, Леонид (май 2011 г.). «Методы индексирования для приблизительного поиска по словарю». Журнал экспериментальной алгоритмики . 16 :1. дои : 10.1145/1963190.1963191 . S2CID   15635688 .
  8. ^ Перейти обратно: а б Ооммен, Би Джей; Локи, РКС (1997). «Распознавание строк с заменами, вставками, удалениями и обобщенными транспозициями». Распознавание образов . 30 (5): 789–800. Бибкод : 1997PatRe..30..789O . CiteSeerX   10.1.1.50.1459 . дои : 10.1016/S0031-3203(96)00101-X .
  9. ^ Перейти обратно: а б с Лоуренс, Рой; Вагнер, Роберт А. (апрель 1975 г.), «Расширение проблемы коррекции по строкам», J ACM , 22 (2): 177–183, doi : 10.1145/321879.321880 , S2CID   18892193
  10. ^ «API сводного списка скрининга» . Портал разработчиков Trade.gov . Управление международной торговли Министерства торговли США. Архивировано из оригинала 30 октября 2019 г.

Дальнейшее чтение

[ редактировать ]
  • Наварро, Гонсало (март 2001 г.), «Экскурсия по приблизительному сопоставлению строк», ACM Computing Surveys , 33 (1): 31–88, doi : 10.1145/375360.375365 , S2CID   207551224
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d9b5d934fea7ae266643b92bdedca24f__1708536600
URL1:https://arc.ask3.ru/arc/aa/d9/4f/d9b5d934fea7ae266643b92bdedca24f.html
Заголовок, (Title) документа по адресу, URL1:
Damerau–Levenshtein distance - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)