Сходство Джаро — Винклера

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

В области информатики и статистики сходство Джаро — Винклера представляет собой меру схожести строк[en]* для измерения расстояния между двумя последовательностями символов. Это вариант, который в 1999 году предложил Уильям Э. Винклер (William E. Winkler) на основе расстояния Джаро (1989, Мэтью А. Джаро, Matthew A. Jaro). Неформально, расстояние Джаро между двумя словами — это минимальное число односимвольных преобразований, которое необходимо для того, чтобы изменить одно слово в другое.

Чем меньше расстояние Джаро — Винклера для двух строк, тем больше сходства имеют эти строки друг с другом. Результат нормируется, так что означает отсутствие сходства, а  — точное совпадение. Сходство Джаро — Винклера равно .

Определение[править | править код]

Расстояние Джаро[править | править код]

Расстояние Джаро между двумя заданными строками и это:

Где:

  •  — длина строки ;
  •  — число совпадающих символов (см. ниже);
  •  — половина числа транспозиций (см. ниже).

Два символа из и соответственно, считаются совпадающими только если они одинаковы и не дальше, чем .

Каждый символ строки сравнивается со всеми соответствующими ему символами в . Количество совпадающих (но отличающихся порядковыми номерами) символов, которое делится на 2, определяет число транспозиций. Например, при сравнении слова CRATE со словом TRACE, только 'R' 'A' и 'Е' являются совпадающими символами, то есть m=3. Хотя 'C' и 'T' появляются в обоих строках, они дальше, чем на 1, то есть floor(5/2)-1=1. Следовательно, t=0 . В сравнении DwAyNE с DuANE соответствующие буквы находятся уже в том же самом порядке D-A-N-E, так что никаких перестановок не требуется.

Расстояние Джаро — Винклера[править | править код]

Расстояние Джаро — Винклера использует коэффициент масштабирования , что дает более благоприятные рейтинги строкам, которые совпадают друг с другом от начала до определённой длины , которая называется префиксом. Даны две строки и . Их расстояние Джаро — Винклера это:

где:

  •  — расстояние Джаро для строк и
  •  — длина общего префикса от начала строки до максимума 4-х символов
  •  — постоянный коэффициент масштабирования, использующийся для того, чтобы скорректировать оценку в сторону повышения для выявления наличия общих префиксов. не должен превышать 0,25, поскольку в противном случае расстояние может стать больше, чем 1. Стандартное значение этой константы в работе Винклера: .

Хотя расстояние Джаро-Винклера часто называют метрикой расстояния, это не метрика в математическом смысле этого слова, потому что оно не подчиняется неравенству треугольника . Также расстояние Джаро-Винклера не удовлетворяет аксиоме, которая гласит, что [1].

В некоторых реализациях алгоритма расчёта расстояния Джаро — Винклера префиксный бонус добавляется, только если сравниваемые строки имеют расстояние Джаро выше установленного «порога усиления» . Порог в реализации Винклера составил 0,7.

Примеры[править | править код]

Следует отметить, что написанный Винклером программный код на языке программирования C различается по крайней мере в двух местах от опубликованных работ по метрике Джаро — Винклера. Первое — это его использование таблицы опечаток (adjwt), а второе — это некоторые дополнительные условия для длинных строк.

Пример 1[править | править код]

Даны строки MARTHA и MARHTA. Представим их пересечение в табличном виде:

M A R T H A
M 1 0 0 0 0 0
A 0 1 0 0 0 0
R 0 0 1 0 0 0
H 0 0 0 0 1 0
T 0 0 0 1 0 0
A 0 0 0 0 0 1

Здесь максимальное расстояние составляет 6/2 — 1 = 2. В желтых ячейках приведенной таблицы указаны единицы, когда символы идентичны (имеется совпадение), и нули в противном случае.

Получается:

  • Есть несовпадающие символы T/H и Н/Т, в результате:

Расстояние Джаро:

Чтобы найти результат Джаро — Винклера с помощью стандартного веса мы продолжаем искать:

Таким образом:

Пример 2[править | править код]

Даны строки DWAYNE и DUANE. Получается:

Расстояние Джаро:

Чтобы найти результат Джаро-Винклера с помощью стандартного веса мы продолжаем искать:

Таким образом:

Пример 3[править | править код]

Даны строки DIXON и DICKSONX. Получается:

D I X O N
D 1 0 0 0 0
I 0 1 0 0 0
C 0 0 0 0 0
K 0 0 0 0 0
S 0 0 0 0 0
O 0 0 0 1 0
N 0 0 0 0 1
X 0 0 0 0 0

Здесь закрашенные клетки — это окно соответствия для каждого символа. Единицы в ячейке указывает на совпадение. Заметим, что два икса (X) не считаются совпавшими, поскольку они находятся за пределами третьего окна совпадения.

Расстояние Джаро:

Чтобы найти результат Джаро-Винклера с помощью стандартного веса мы продолжаем искать:

Таким образом:

Отношения с другими метриками изменения расстояния[править | править код]

Есть и другие популярные меры изменения расстояния, которые рассчитываются с использованием другого набора допустимых операций редактирования. Например,

Изменение расстояния обычно определяется как параметризуемая метрика, вычисленная с помощью определённого набора допустимых операций редактирования, и каждой операции присваивается стоимость (возможно, бесконечная). Это является дальнейшим обобщением генетических алгоритмов выравнивания последовательностей, таких, как алгоритм Смита-Ватермана, которые делают стоимость операции зависящей от того, где она применяется.

Практическое применение[править | править код]

  • Алгоритм Джаро-Винклера использовался для обработки результатов переписи населения[2].
  • Алгоритм сравнения строк Джаро — Винклера реализован в СУБД Oracle[3].

Реализации алгоритма на различных языках программирования[править | править код]

Примечания[править | править код]

  1. Record Linkage Algorithms in F# — Extensions to Jaro-Winkler Distance (Part 3). Дата обращения: 21 марта 2017. Архивировано 31 декабря 2019 года.
  2. Алгоритмы приблизительного сравнения текста, часть 2. Дата обращения: 21 марта 2017. Архивировано 22 марта 2017 года.
  3. Database PL/SQL Packages and Types Reference. Дата обращения: 21 марта 2017. Архивировано 12 января 2017 года.
  4. Архивированная копия. Дата обращения: 23 февраля 2011. Архивировано из оригинала 23 февраля 2011 года.
  5. Distance de jaro-winkler Архивная копия от 22 марта 2017 на Wayback Machine (фр.)
  6. [1] (англ.)

Ссылки[править | править код]