Есть ли алгоритм, чтобы узнать, какие слова в строке поиска принадлежат друг другу? - PullRequest
1 голос
/ 13 сентября 2010

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

Кто-нибудь знает, как узнать, какое из напечатанных слов является названием, названием улицы, названием компании? и во-вторых, если это двойное имя, например «Ли Харви», как я могу узнать, что два слова «Ли» и «Харви» принадлежат друг другу? Та же проблема с названиями компаний, такими как «Фрэнк Бейкер Инк.» ...

Есть ли какой-нибудь алгоритм или лучшая практика? спасибо за ссылки, учебные пособия, скрипты и другую помощь; -)

Ответы [ 2 ]

1 голос
/ 13 сентября 2010

То, что вы в основном хотите, это поисковая система :) Вот основные шаги, которые вы должны выполнить -

  1. Вам необходимо создать «Перевернутый указатель» для содержимого, в котором вы хотите выполнить поиск.
  2. Индекс представляет собой пару «имя» => «значение». Вы можете иметь эту пару любым способом (настроенным в соответствии с вашими данными и потребностями.

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

 'lee'=>'lee harvey'
 'harvey'=>'lee harvey'
 ...

таким образом, когда кто-то ищет «Ли», он получает «Ли Харви». Есть и другие лучшие подходы к так называемой индексации «n-грамм». Проверьте это ...

Возможно, вы могли бы создать индексы имен, адресов, адресов электронной почты и т. Д., А когда пользователь вводит запрос, сверяйте его со всеми вашими индексами, используя предложенный выше подход. После того, как вы получите результаты, объедините их. Может быть, вы могли бы ввести понятие ранга, чтобы вы могли отсортировать результаты и показать самые последние или наиболее релевантные в верхней части. Для этого вам нужно найти способ оценить ваши условия ...

0 голосов
/ 13 сентября 2010

Пофиг, просто выполняйте полнотекстовый поиск. Затем вы должны проверить элементы результата, для которых поле содержит условия поиска. Кроме того, вы можете отображать элементы в отдельных списках (термины, найденные в имени, термин в адресе). Единственная сложность заключается в том, что если Джон Смит живет на улице Джона Смихта, вы должны решить, к какому списку / спискам относится элемент результата.

...