Подтвердить что ты не робот

Идеи для создания функции "Вы имели в виду XYZ" на сайте?

Я хотел бы предоставить пользователям возможность поиска через большой список предприятий, но все же найти близкие совпадения.

Есть ли у кого-нибудь рекомендации относительно того, как лучше всего это делать, когда вы не нацеливаете простые словарные слова, а вместо этого на сложные имена, такие как ABC Business Name?

С уважением.

4b9b3361

Ответ 1

Ознакомьтесь с статьей wikipedia на расстояние Левенштейна. Это довольно простая концепция, чтобы обернуть голову и довольно легко реализовать алгоритм в зависимости от того, какой язык вы используете, в вашем случае, С#.

Я нашел пример на С# для вас здесь.

Кроме того, здесь является примером корректора орфографии от Питера Норвига из Google. Было сказано, что в подкасте SO несколько эпизодов назад, что Джон Скит попытался переписать этот же алгоритм на С#. Не уверен, выполнил ли он его и/или сделал его общедоступным, хотя.

Ответ 2

Рассмотрите возможность использования совпадения ключевых слов и редактирования расстояния. Может сочетаться с "оригинальным поиском" на "фактически нажатый".

Ответ 3

Это, вероятно, сумасшедшее решение, но вы можете разделить имя предприятия по пробелу и затем искать либо все элементы, либо, возможно, первую пару.

Таким образом, вы можете искать в "ABC" и "Business", но не указывать "Имя", поскольку это может занять слишком много времени.

Вы даже можете проверить, имеет ли строка определенную длину, а затем обрезать и просто выполнить поиск по первым словам 5 букв.

Посмотрели ли вы на soundex как способ поиска через свои предприятия. Опять же, я думаю, вам нужно разбить имя по пространству.

Ответ 4

Вы можете проверить SQL Server SOUNDEX и DIFFERENCE. SOUNDEX преобразует последовательность символов (например, слово) в 4-символьный код, который будет таким же для похожих слов. DIFFERENCE дает число, которое представляет, как "разные" две строки основаны на звуке.

Вы можете, например, создать вычисляемый столбец на основе функции SOUNDEX и позже сопоставить этот столбец. Или вы можете использовать DIFFERENCE в предложении WHERE.