У меня есть требование в моем приложении, чтобы нечеткое совпадение со строковым значением, введенным пользователем, против хранилища данных.Fuzzy String Matching
Я в основном пытаюсь найти возможные дубликаты в процессе добавления данных в систему.
Я посмотрел на Метафон, Двойной Метафон и Звук, и вывод, к которому я пришел, - это все хорошо и хорошо, когда речь идет о единственной строке ввода слова; однако я пытаюсь сопоставлять неопределенное количество слов (они на самом деле являются географическими именами).
Я действительно рассматривал разложение каждого слова из строки (исключая любые слова, которые я определяю как шумовые слова), а затем реализую некоторую логику, которая определяла бы, какие имена мест в моем хранилище данных лучше всего соответствуют (на основе ключей от алгоритм, который я выбираю); преимущество, которое я вижу в этом, было бы выборочно подтянуть или ослабить критерии соответствия в соответствии с приложением: однако это кажется мне немного грязным.
Так что мой вопрос (ы):
1: Могут ли я приближаюсь эта проблемой в правильном направлении, да я понимаю, что это будет довольно дорого; однако (не углубляясь в реализацию) эта информация будет поступать из базы данных memcache.
2: Существуют ли какие-либо алгоритмы, которые уже специализируются на фонетическом сопоставлении нескольких слов? Если да, не могли бы вы предоставить мне некоторую информацию о них и, если возможно, их сильные и слабые стороны.
Не совсем понятно, что вы на самом деле пытаетесь сделать. что такое вход? Каков ожидаемый результат? – njzk2
Если вы не хотите идти по маршруту, чтобы обозначить имена в словах, знаменательные биграммы и триграммы будут интересны. http://en.wikipedia.org/wiki/N-gram – hatchet
Вы можете попробовать расстояние Levensthein, которое возвращает число для различий между двумя строками. Полезно ли найти правильное написание для «фонетического» (можно привести пример этого?), Можно легко протестировать. Большинство примеров - для отдельных слов, но оно может работать и с более длинными строками. – usr2564301