Предположим, у меня есть словарь слов, { «кошка», «койку», «катализатор»}, и характер соотношение подобия е (х, у)Как неуловимо искать словарные слова?
f(x, y) = 1, if x and y are similar
= 0, otherwise
Эти «сходства» может быть определен с помощью программист. таким образом, что, скажем,
f('t', 'l') = 1
f('a', 'o') = 1
f('f', 't') = 1
но
f('a', 'z') = 0
etc.
Теперь, если у нас есть запрос 'cofatyst', алгоритм должен сообщить следующие матчи:
('cot', 0)
('cat', 0)
('catalyst', 0)
, где число является начальным индексом на основе 0 найденного совпадения. Я пробовал Aho-Corasick algorithm, и хотя он отлично работает для точного соответствия, и в случае, когда персонаж имеет относительно меньшее количество «похожих» символов, его производительность падает экспоненциально, поскольку мы увеличиваем количество похожих символов для символа. Может ли кто-нибудь указать мне на лучший способ сделать это? Беспокойство - это абсолютная необходимость, и он должен принимать во внимание характер сходства (т. Е. Не слепо зависит от правого расстояния).
Так в принципе, вы хотите какое-то минимальное редактирование расстояния, которое принимает во внимание, что некоторые символы (например, символы близко друг к другу на клавиатуре), скорее всего, будет заменено? Моя кишка говорит мне, что вы получите гораздо лучший ответ на StackOverflow. – acattle
правильный! И понятие подобных символов может быть другим (например, когда вы OCR некоторые вещи, я, скорее всего, будет неверно истолкован как «t» или «i», чем неправильно понимать как «a»). Хорошо, спрашивая SO, как хорошо –
Возможный дубликат [Как fuzzily поиск словарного слова?] (http://stackoverflow.com/questions/16333766/how-to-fuzzily-search-for-a-dictionary-word) Вы, по-видимому, размещены на обоих SO и лингвистика.stackexchange. Затем вопрос о последнем был перенесен сюда. – jogojapan