Алгоритм слияния результатов поиска - PullRequest
0 голосов
/ 08 ноября 2011

Я реализую панель поиска, которая должна искать 2 основные строки A и B Я отдаю приоритет результатам следующим образом (от наиболее важного к наименее)

  1. результат, объединяющий A и B
  2. результат только для B
  3. результат только для A

так, например, если я ищу "Египет" + "Пирамиды" я хочу, чтобы мои первые результаты были для таких вещей, как «Египетские пирамиды», за которыми следуют результаты о «пирамидах» в целом или в виде геометрической фигуры и т. д., а затем, наконец, результаты для «Египта»

Я пробую несколько поисковых API, таких как Google и Bing, в настоящее время я делаю то, что сначала я ищу оба, чтобы получить набор результатов X, а затем только B, чтобы получить то, что я называю положительным списком, а затем только поиск A чтобы получить отрицательный список .. Я оцениваю результаты в X и штрафую их, если они существуют в отрицательном списке, даю им бонус, если они существуют в положительном списке, затем в конце я складываю все, что осталось в положительном списке, чтобы X ..

Это работает хорошо, но все еще недостаточно хорошо, мне было интересно, может ли кто-нибудь помочь мне с дополнением к этому простому алгоритму или совершенно другой идее

1 Ответ

0 голосов
/ 08 ноября 2011

Вам нужно использовать что-то, что называется «набор» для такой задачи, как эта.http://en.wikipedia.org/wiki/Set_%28computer_science%29

Если вы ищете «Египет» + «Пирамиды», создайте «набор» для каждого из отдельных условий поиска.Наиболее важные результаты в том, что мы называем «пересечением» множеств (как в наборе «Египет», так и в наборе «Пирамиды»).

Результаты с более низким приоритетом находятся в том, что мы называем 'относительные дополнения 'множеств.Представьте, что вам нужно все в B, чего не было в A. Мы называем это относительным дополнением A в B).

Большинство языков программирования имеют библиотеку / пакет, реализующий набор для вас (который оптимизирован).

...