Идеи для создания функции XYZ на веб-сайте

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

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

С уважением.


person Keith Adler    schedule 08.12.2009    source источник
comment
Я согласен. Я восхищаюсь глубиной знаний моих коллег-разработчиков программного обеспечения, и все эти ответы — хорошие наводки.   -  person Keith Adler    schedule 09.12.2009


Ответы (4)


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

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

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

person jamesaharvey    schedule 08.12.2009
comment
Отличный материал. Я собираюсь адаптировать это для работы на стороне SQL-сервера в качестве sproc, чтобы получить максимально возможную производительность и использовать его только при отсутствии совпадений. Спасибо за понимание. - person Keith Adler; 09.12.2009
comment
В качестве обновления это было реализовано на C# здесь codegrunt.co.uk/2010/11/02/ - person Keith Adler; 22.03.2011

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

person Dr. Xray    schedule 08.12.2009

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

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

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

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

person griegs    schedule 08.12.2009

Вы можете проверить SQL Server SOUNDEX. и РАЗНИЦА. SOUNDEX преобразует последовательность символов (например, слово) в 4-значный код, который будет одинаковым для слов с похожим звучанием. РАЗНИЦА дает число, которое представляет, насколько «различны» две струны на основе звука.

Вы можете, например, создать вычисляемый столбец на основе функции SOUNDEX и сопоставить его позже. Или вы можете использовать РАЗНИЦУ в предложении WHERE.

person Aaron    schedule 08.12.2009
comment
Вы также можете выполнить поиск в Google по запросу MetaPhone, который по сути представляет собой более сложную версию Soundex. Soundex был фактически создан в 1918 году и представляет собой очень простой/базовый алгоритм. Метафон обычно дает лучшие совпадения, но он не встроен в SQL, хотя существует множество его версий T-SQL. - person Sparky; 09.12.2009