Полнотекстовый поиск: найдите подобные названия программного обеспечения

Я ищу алгоритм полнотекстового поиска, который позволит находить подобные названия программы, например, "Mozilla Firefox" и "Firefox 3.5, или "Adobe Reader" и "Adobe Acrobat Reader v10". Расстояние Левенштейна слишком неэффективно в этом случае, так как написание не изменяется.

Это должно использовать последовательное сканирование (не индексирующий).

Мне нужны максимальная точность и минимальные ошибки.Что Вы порекомендуете?

Спасибо!

5
задан animuson 6 April 2012 в 17:59
поделиться

1 ответ

Сравнение шаблонов

Я использовал следующее для автокоррекции некоторых доменных имен.

Идея состоит в том, чтобы посмотреть на небольшие шаблоны, например, на двухсимвольные последовательности. Каждый раз, когда такая последовательность обнаруживается, «оценка» для сравниваемой последовательности увеличивается. Наивысшие баллы, скорее всего, будут похожи.

Пример: Mozilla Firefox => ['mo', 'oz', 'zi', 'il', 'll', 'la', 'a', 'f ',' fi ',' ir ',' re ',' fo ',' ox ']

Результаты:

  • ' Firefox 3.5 '=> 5,
  • ' Adobe Reader '=> 0,
  • 'Adobe Acrobat Reader v10' => 1

Автоматическая классификация с использованием сжатия

Эта классификация не является полнотекстовой.

Идея, выраженная в этом документе , состоит в том, чтобы сравнить сжатие конкатенации двух элементов с конкатенацией сжатых элементов.

Пусть c будет функцией, которая возвращает размер сжатого элемента:

d = c (A) + c (B) - c (A + B)

Чем меньше d, тем ближе A и B есть.
Интересным свойством является то, что принцип не зависит от типа и может использоваться с двоичными файлами, такими как музыка, изображения, видео и т. Д.

Еще одна ссылка, более легкая для чтения, но на французском языке.

Использование полнотекстовых функций SGDB

Я немного устарел по SQL Server, но SQLite или MySQL предлагают полнотекстовый поиск.
Результаты включают значение "ранга", которое можно рассматривать как оценку сходства.

В MySQL:

SELECT
  t.*,
  MATCH(my_field) AGAINST 'Mozilla Firefox' as relevance
FROM
  table t
WHERE
  MATCH(my_field) AGAINST 'Mozilla Firefox'
ORDER BY relevance DESC
LIMIT 100
3
ответ дан 15 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: