Xquery:计算一组记录中每条记录中术语出现次数

时间:2016-07-18 20:03:24

标签: xquery marklogic

给定一组xml记录和一组术语$terms$terms序列中的术语是从记录集中提取的。我想计算每个段落记录中每个术语的出现次数。我使用以下代码来执行此操作:

for $record in /rec:Record
for $term in $terms
return   xdmp:unquote(concat('<info>',string(count(lower-case($record/rec:paragraph )[. = lower-case($term)])), '</info>'))

对于每个记录中的每个术语,我得到0个计数:

result

示例:$term:='Mathematics'$record/rec:paragraph:='Mathematics is the study of topics such as quantity'

我想要$record/rec:paragraph

中数学一词的出现次数

知道导致这个结果的原因吗?有没有其他方法可以计算每个段落中每个术语的出现次数。

1 个答案:

答案 0 :(得分:2)

使用tokenize()将输入字符串拆分为单词标记。那么计数本身就是微不足道的。例如:

let $text := 'Mathematics is the study of topics such as quantity'
let $myterms := 'mathematics'
let $wds := tokenize($text, '\s+')

for $t in $myterms
return <term name="{$t}">{count($wds[lower-case(.)=lower-case($t)])}</term>

返回:

<term nm="mathematics">1</term>