2008-09-23 6 views
3

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

Я задаюсь лучшим способ моделировать это на сайте среднего размера (недостаточно трафика, чтобы полагаться на статистику посетителей, чтобы вывести отношения). Моя первоначальная мысль состоит в том, чтобы хранить 10 лучших результатов для каждого уникального запроса, а затем, когда выполняется новый поиск, чтобы найти все исторические поиски, которые соответствуют некоторым результатам из 10 лучших результатов, но в идеале не соответствуют всем им (сопоставление всех из них может предложить эквивалентный поиск и, следовательно, не тот полезный, как предложение).

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

ответ

2

Вы считаете матрицу с ключевыми словами по 1 оси по сравнению с документами на другой оси. как только вы найдете набор веторов, представляющих ключевые слова, найдите наборы наборов ключевых слов, найденных в вашем исходном наборе результатов, а затем найдите способ ранжировать другие ключевые слова по количеству документов, которые они ссылаются, или сколько раз они пересекают набор результатов ,

+0

Это очень похоже на первые шаги пары LSI (http://en.wikipedia.org/wiki/Latent_semantic_indexing), похоже, что это, вероятно, сработает довольно хорошо. (см. следующий комментарий, из космоса) – rcreswick 2008-09-24 00:15:22

2

Я пробовал несколько разных подходов к этому с различными степенями успеха. В конце концов, я думаю, что лучший подход сильно зависит от поиска домена/тем и того, как пользователи формируют запросы.

Ваша мысль о сохранении предыдущих запросов кажется мне разумной. Мне было бы интересно посмотреть, как это работает на практике (я имею в виду, что самым искренним образом - существует множество нюансов, которые могут привести к тому, что эти методы потерпят неудачу в «реальном мире», особенно когда данные разрежены).

Вот некоторые методы, которые я использовал в прошлом, и видели в литературе:

подходов, основанных
  1. Тезауруса: Индекс в тезаурус для каждого термина, который используется пользователь, а затем использовать некоторые эвристики для фильтрации синонимов, чтобы показать пользователю возможные термины поиска.
  2. Стебель и поиск по этому вопросу: Поставьте условия поиска (например: с помощью Porter Stemming Algorithm, а затем используйте исходные условия вместо первоначально предоставленных запросов и дайте пользователю возможность поиска ровно условий, которые они указали (или сделайте обратное, сначала найдите точные термины и используйте его, чтобы найти термины, которые связаны с одним и тем же корнем. Этот второй подход, очевидно, требует некоторой предварительной обработки известного словаря, или вы можете собирать термины, как находит их индексный термин.)
  3. Цепочка: проанализируйте результаты, найденные по запросу пользователя, и извлеките ключевые термины из лучших результатов N (KEA - одна библиотека/алгоритм, который вы можете посмотреть на методы извлечения ключевых слов.)
+0

черт возьми, я бы хотел сказать это ... – MikeJ 2008-09-24 00:08:17