Сравните алгоритмы подобия - PullRequest
39 голосов
/ 23 марта 2012

Я хочу использовать функции схожести строк для поиска поврежденных данных в моей базе данных.

Я натолкнулся на несколько из них:

  • Jaro,
  • Jaro-Винклер,
  • Левенштейн,
  • Евклидов и
  • Q-грамм,

Я хотел знать, в чем разница между ними и в чемситуации они работают лучше всего?

Ответы [ 2 ]

38 голосов
/ 30 марта 2012

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

Из Википедии, Яро-Винклер :

В информатике и статистике расстояние Яро-Винклера (Winkler, 1990) является мерой сходства между двумя строками. это вариант метрики расстояния Jaro (Jaro, 1989, 1995) и в основном [ссылка на источник] используется в области увязки записей (дубликат обнаружения). Чем выше расстояние Яро-Винклера для двух струн, чем больше похожи струны. Метрика расстояния Яро – Винклера разработан и лучше всего подходит для коротких строк, таких как имена людей. оценка нормализуется таким образом, что 0 соответствует отсутствию сходства, а 1 - точное совпадение.

Расстояние Левенштейна:

В теории информации и информатике расстояние Левенштейна метрика строки для измерения величины разницы между двумя последовательности. Термин расстояние редактирования часто используется для обозначения до Левенштейна.

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

Евклидово расстояние:

В математике евклидово расстояние или евклидова метрика «обычное» расстояние между двумя точками, которое можно измерить с правитель, и дается формулой Пифагора. Используя эту формулу в качестве расстояния евклидово пространство (или даже любое внутреннее пространство произведения) становится метрическое пространство. Соответствующая норма называется евклидовой нормой. Более старая литература относится к метрике как метафоре Пифагора.

И Q- или n-граммовая кодировка:

В областях компьютерной лингвистики и вероятности n-грамм является непрерывной последовательностью из n элементов из данной последовательности текста или речь. Речь идет о фонемах, слогах, письмах, слова или пары оснований в соответствии с приложением. н-граммы собраны из текстового или речевого корпуса.

Двухъядерный Преимущества n-граммовых моделей (и алгоритмов, которые используют их) являются относительной простотой и возможностью масштабирования - просто увеличивая модель, можно использовать для хранения большего контекста с хорошо понятный компромисс между пространством и временем, позволяющий небольшими экспериментами очень эффективно увеличивать масштаб.

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

Вместо того, чтобы пытаться определить сомнительную схему обнаружения повреждения данных, сделайте это правильно: с помощью контрольных сумм и битов четности для ваших данных. Не пытайтесь решить более сложную задачу, если подойдет более простое решение.

2 голосов
/ 30 марта 2012

Сходство строк помогает во многих отношениях.Например,

  • Google вы имели в виду, что результаты рассчитываются с использованием сходства строк.
  • сходство строк используется для исправления ошибок распознавания.
  • сходство строк используется для исправления клавиатурыошибки ввода.
  • сходство строк используется для поиска наиболее подходящей последовательности двух ДНК в биоинформатике.

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

kitten → sitten

Здесь расстояние - это изменение 1 символа.Вы можете назначить разные веса удалению, добавлению и замене.Например, ошибки распознавания и ошибки клавиатуры дают меньший вес для некоторых изменений.OCR (некоторые символы очень похожи на другие), некоторые символы клавиатуры расположены очень близко друг к другу.Биоинформационное сходство строк позволяет много вставлять.

Ваш второй пример " Jaro – Winkler метрики расстояния разработан и лучше всего подходит для коротких строк, таких как имена людей"

Поэтому вы должны помнить о своемпроблема.

Я хочу использовать функции схожести строк для поиска поврежденных данных в моей базе данных.

Как повреждены ваши данные?Это ошибка пользователя, похожая на ошибку ввода с клавиатуры?Или это похоже на ошибки OCR?Или что-то еще целиком?

...