Jump to content

Примерное соответствие строк

Нечеткий поиск в Mediawiki по запросу «злой смайлик» дает в качестве предполагаемого результата «андре эмоции».

В информатике , приблизительное сопоставление строк (часто называемое в просторечии поиском нечетких строк ) — это метод поиска строк соответствуют шаблону которые приблизительно (а не точно) . Проблема приблизительного сопоставления строк обычно делится на две подзадачи: поиск приблизительных совпадений подстроки внутри заданной строки и поиск словарных строк, которые приблизительно соответствуют шаблону.

Обзор [ править ]

Близость совпадения измеряется количеством примитивных операций, необходимых для преобразования строки в точное совпадение. Это число называется расстоянием редактирования между строкой и шаблоном. Обычные примитивные операции: [1]

  • вставка: кроватка co a t
  • удаление: co a t кроватка
  • замена: co a t co s t

Эти три операции можно обобщить как формы замены, добавив символ NULL (здесь обозначенный *) везде, где символ был удален или вставлен:

  • вставка: co * t co a t
  • удаление: co a t co * t
  • замена: co a t co s t

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

  • : стоимость котировки транспонирование

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

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

Постановка задачи и алгоритмы [ править ]

Одно из возможных определений проблемы приблизительного сопоставления строк следующее: Учитывая строку-шаблон и текстовая строка , найти подстроку в T , которая из всех подстрок T имеет наименьшее расстояние редактирования до шаблона P .

При грубом подходе можно было бы вычислить расстояние редактирования до P для всех подстрок T, а затем выбрать подстроку с минимальным расстоянием. Однако этот алгоритм будет иметь время работы O ( n 3  м ).

Лучшее решение, предложенное Селлерсом, [2] опирается на динамическое программирование . Он использует альтернативную формулировку задачи: для каждой позиции j в тексте T и каждой позиции i в шаблоне P вычисляется минимальное расстояние редактирования между i первыми символами шаблона, и любая подстрока T , который заканчивается в позиции j .

Для каждой позиции j в тексте T и каждой позиции i в шаблоне P просмотрите все подстроки T, заканчивающиеся на позиции j , и определите, какая из них имеет минимальное значение.отредактируйте расстояние до первых шаблона P. символов Запишите это минимальное расстояние как E ( i , j ). Вычислив E ( i , j ) для всех i и j , мы можем легко найти решение исходной проблемы: это подстрока, для которой E ( m , j ) минимальна ( m — длина шаблона P ).

Вычисление E ( m , j ) очень похоже на вычисление расстояния редактирования между двумя строками. Фактически, мы можем использовать алгоритм дистанционных вычислений Левенштейна для E ( m , j ), с той лишь разницей, что мы должны инициализировать первую строку нулями и сохранить путь вычисления, то есть использовали ли мы E ( i − 1, j ), E( i , j - 1) или E ( i - 1, j - 1) при вычислении E ( i , j ).

Затем в массиве, содержащем значения E ( x , y ), мы выбираем минимальное значение в последней строке, пусть это будет E ( x 2 , y 2 ), и следуем по пути вычислений назад, обратно к строке номер 0. Если поле, к которому мы пришли, было E (0, y 1 ), то T [ y 1 + 1] ... T [ y 2 ] является подстрокой T с минимальным расстоянием редактирования до шаблона P .

Вычисление массива E ( x , y ) занимает время O ( mn ) с помощью алгоритма динамического программирования, а фаза обратной работы занимает время O ( n + m ).

Еще одна недавняя идея — соединение по подобию. Когда сопоставление базы данных относится к большому объему данных, время O ( mn ) с алгоритмом динамического программирования не может работать в течение ограниченного времени. Итак, идея состоит в том, чтобы уменьшить количество пар-кандидатов вместо вычисления сходства всех пар строк. Широко используемые алгоритмы основаны на проверке фильтров, хешировании, локально-зависимом хешировании (LSH), попытках и других жадных и аппроксимирующих алгоритмах. Большинство из них спроектированы так, чтобы соответствовать какой-либо платформе (например, Map-Reduce) для параллельных вычислений.

Онлайн и офлайн [ править ]

Традиционно алгоритмы приблизительного сопоставления строк подразделяются на две категории: онлайновые и офлайновые. С помощью онлайн-алгоритмов шаблон можно обработать перед поиском, а текст — нет. Другими словами, онлайн-методы выполняют поиск без индекса. Ранние алгоритмы онлайн-приблизительного сопоставления были предложены Вагнером и Фишером. [3] и Селлерс. [2] Оба алгоритма основаны на динамическом программировании , но решают разные задачи. Алгоритм Селлерса приблизительно ищет подстроку в тексте, тогда как алгоритм Вагнера и Фишера вычисляет расстояние Левенштейна , подходящее только для нечеткого поиска по словарю.

Методики онлайн-поиска неоднократно совершенствовались. Пожалуй, самый Известным усовершенствованием является битовый алгоритм (также известный как алгоритм сдвига-или и сдвига-и), который очень эффективен для относительно коротких строк шаблонов. Алгоритм Bitap — это сердце Unix поиска утилиты agrep . Обзор алгоритмов онлайн-поиска был сделан Дж. Наварро. [4]

Хотя существуют очень быстрые оперативные методы, их производительность при работе с большими данными неприемлема. текста Предварительная обработка или индексирование значительно ускоряет поиск.Сегодня представлены различные алгоритмы индексации. Среди них есть суффиксные деревья , [5] метрические деревья [6] и n-граммные методы. [7] [8] Подробный обзор методов индексации, позволяющих найти произвольную подстроку в тексте, дан Наварро и др. [7] Вычислительный обзор словарных методов (т. е. методов, позволяющих найти все словарные слова, приблизительно соответствующие шаблону поиска) дан Бойцовым. [9]

Приложения [ править ]

Общие применения приблизительного соответствия включают проверку орфографии . [5] Благодаря наличию большого количества данных о ДНК сопоставление нуклеотидных последовательностей стало важным применением. [1] Приблизительное соответствие также используется при фильтрации спама . [5] Связывание записей — это распространенное приложение, в котором сопоставляются записи из двух разных баз данных.

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

Распространенный инструмент командной строки fzf часто используется для интеграции приблизительного поиска строк в различные приложения командной строки. [10]

См. также [ править ]

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

Цитаты [ править ]

  1. ^ Jump up to: Перейти обратно: а б с Кормен и Лейзерсон, 2001 .
  2. ^ Jump up to: Перейти обратно: а б Селлерс 1980 .
  3. ^ Вагнер и Фишер 1974 .
  4. ^ Наварро 2001 .
  5. ^ Jump up to: Перейти обратно: а б с Гасфилд 1997 .
  6. ^ Баеза-Йейтс и Наварро 1998 .
  7. ^ Jump up to: Перейти обратно: а б Navarro et al. 2001Наварро и др. 2001
  8. ^ Зобель и Дарт 1995 .
  9. ^ Бойцов 2011 .
  10. ^ «Fzf — быстрый нечеткий поиск файлов из терминала Linux» . www.tecmint.com . 08.11.2018 . Проверено 8 сентября 2022 г.

Цитируемые работы [ править ]

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 54f638dd7e1238f855853953233b9778__1718960880
URL1:https://arc.ask3.ru/arc/aa/54/78/54f638dd7e1238f855853953233b9778.html
Заголовок, (Title) документа по адресу, URL1:
Approximate string matching - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)