Как ранжировать результаты поиска коротких строковых списков

cs.stackexchange https://cs.stackexchange.com/questions/7842

  •  16-10-2019
  •  | 
  •  

Вопрос

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

Вот пример подзыска после поиска «Apple»:

|-- apple pie
|-+ apples
| |-- cooking
| |-+ eating
|   |-- average
|   |-- Granny Smith
|   |-- Golden Delicious
|-- pork and apple casserole

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

0 Apple pie
0 Apples, cooking
0 Apples, eating, average
0 Apples, eating, Granny Smith
0 Apples, eating, Golden Delicious
2 Pork and apple casserole

Там, где звание является индексом первого матча, понизите звание, тем лучше.

Я хотел бы объединить спички, чтобы я не отображал полную подрисунку в начальном поиске, например:

Apples... (4)
Apple pie
Pork and apple casserole

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

Но я не уверен, как объединить эти рейтинги, так как один из них больше, а один-меньше. Есть ли стандартные способы объединить такие рейтинги? (Я не уверен, что искать, поэтому Google дает мне результаты о поисковой оптимизации и поиске веб -страниц, которые, похоже, не применяются.)

Это было полезно?

Решение

Хотя я действительно не знаю, как результат лучше. Я предполагаю, что то, что вы делаете, хорошо (и, возможно, лучшее, возможно, вы можете получить). Всего одна нота, чтобы быть более точной, вы должны ранжировать узел $ U $ в зависимости от размера поддерева, укоренившегося в $ U $ (не на количестве листьев в этом поддере или детях $ U $). Это лучше (и более общее).

Но один из способов решить подобные проблемы в целом - дать счет каждому узлу в вашем дереве (вес). Чем выше оценка, тем больше он будет оцениваться выше. Тогда вы будете искать поддерево с наибольшим весом. Вы вычисляете это, суммируя веса всех узлов в поддере.

Пример весов (просто чтобы помочь вам сделать ставку):

  • Близость к поисковому термину (например, расстояние в химингах, или другие метрики [например, посмотрите, как работают алгоритмы предложений по орфографии.
  • Если это веб -сайт рецептов, например, узлы могут быть рецептами, а вес узла - это то, сколько «лайков» он получил с веб -сайта.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top