Я ищу алгоритм полнотекстового поиска, который позволит находить подобные названия программы, например, "Mozilla Firefox" и "Firefox 3.5, или "Adobe Reader" и "Adobe Acrobat Reader v10". Расстояние Левенштейна слишком неэффективно в этом случае, так как написание не изменяется.
Это должно использовать последовательное сканирование (не индексирующий).
Мне нужны максимальная точность и минимальные ошибки.Что Вы порекомендуете?
Спасибо!
Я использовал следующее для автокоррекции некоторых доменных имен.
Идея состоит в том, чтобы посмотреть на небольшие шаблоны, например, на двухсимвольные последовательности. Каждый раз, когда такая последовательность обнаруживается, «оценка» для сравниваемой последовательности увеличивается. Наивысшие баллы, скорее всего, будут похожи.
Пример: Mozilla Firefox => ['mo', 'oz', 'zi', 'il', 'll', 'la', 'a', 'f ',' fi ',' ir ',' re ',' fo ',' ox ']
Результаты:
Эта классификация не является полнотекстовой.
Идея, выраженная в этом документе , состоит в том, чтобы сравнить сжатие конкатенации двух элементов с конкатенацией сжатых элементов.
Пусть c будет функцией, которая возвращает размер сжатого элемента:
d = c (A) + c (B) - c (A + B)
Чем меньше d, тем ближе A и B есть.
Интересным свойством является то, что принцип не зависит от типа и может использоваться с двоичными файлами, такими как музыка, изображения, видео и т. Д.
Еще одна ссылка, более легкая для чтения, но на французском языке.
Я немного устарел по 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