Marklogic: подсчет баллов

У меня есть следующий xml-файл:

<?xml version="1.0" encoding="UTF-8"?>
<data>
<text>We are a doing nothing here you can say it time pass. what are you doing doing doing doing doing time?</text>
<text>We are a doing nothing here you can say it time pass. what are you doing doing doing doing doing time?</text>
</data>

Теперь я выполнил следующий запрос:

let $hits :=
let $terms :=
let $node := xdmp:document-filter(doc("/content/C/Documents and Settings/vimleshm/Desktop/abc.xml"))
return 
(cts:distinctive-terms($node,
<options xmlns="cts:distinctive-terms"
xmlns:db="http://marklogic.com/xdmp/database">
<use-db-config>false</use-db-config>
<score>logtf</score>
<max-terms>100</max-terms>
<db:word-searches>true</db:word-searches>
<db:stemmed-searches>off</db:stemmed-searches>
<db:fast-phrase-searches>false</db:fast-phrase-searches>
<db:fast-element-word-searches>false</db:fast-element-word-searches>
<db:fast-element-phrase-searches>false</db:fast-element-phrase-searches>
</options>)//cts:term)
for $wq in $terms
where $wq/cts:word-query
return element word {
attribute score {                               $wq/@score},
$wq/cts:word-query/cts:text/string() }
return 

let $x:=
for $hit in $hits

return $hit
return $x

Это дает мне следующий ответ:

<?xml version="1.0" encoding="UTF-8"?>
<results warning="more than one root item">
  <word score="36864">doing</word>
  <word score="26624">text</word>
  <word score="26624">you</word>
  <word score="26624">time</word>
  <word score="26624">are</word>
  <word score="22528">a</word>
  <word score="22528">we</word>
  <word score="22528">it</word>
  <word score="22528">data</word>
  <word score="22528">can</word>
  <word score="22528">pass</word>
  <word score="22528">here</word>
  <word score="22528">nothing</word>
  <word score="22528">what</word>
  <word score="22528">say</word>
</results>

Кто-нибудь скажет мне, как на самом деле рассчитывается эта оценка [лог (частота термина)]? Пример в приведенном выше случае термин «делаю» 12 раз из 42 слов.

ниже приведены общие сроки и частота [указаны в скобках] для вышеуказанного файла

doing [12]
you [4]
time [4]
are [4]
a [2]
We [2]
nothing [2]
here [2]
can  [2]
say [2]
it [2]
pass [2]
what [2]

person user1660340    schedule 18.10.2012    source источник


Ответы (1)


http://docs.marklogic.com/guide/search-dev/relevance#chapter, безусловно, лучшее место для начала. Здесь происходит нечто большее, чем logTF. Есть также:

  • IDF - насколько распространены эти слова в базе данных?
  • нормализация длины документа - более длинные документы, как правило, содержат больше слов, чем более короткие документы, поэтому оценка масштабируется по длине документа
  • а logTF на самом деле является естественным логарифмом пошаговой функции TF (для скорости)

Все это работает вместе, чтобы счет был точным, но быстрым.

person SBuxton    schedule 18.10.2012