Marklogic:从元素词词典中获取字数

时间:2012-10-09 13:00:49

标签: marklogic

我有两个示例XML文件如下:

abc.xml

<data>
<text>i am a test user and doing testing here more and more. What are you doing?</text>
<data>

def.xml

<data>
<text>We are a doing nothing here you can say it time pass. what are you doing?</text>
<data>

现在我为<text>元素创建了元素词词典。我对以下内容感兴趣:

  1. 在整个数据库中获取所有独特的单词及其计数(拥有 只有两个以上的文件)。
  2. 获取给定文件的所有唯一字词

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

1)对于所有唯一单词和匹配片段的数量:

for $w in cts:element-words(xs:QName('text'))
return 
element word {
    attribute count { 
      xdmp:estimate(cts:search(doc(), cts:word-query($w))
    },
    $w }

这应该很快,但为了得到实际的字数而不仅仅是片段数,我想你可能要检查每个片段,这可能会变得很慢:

sum(
  cts:search(doc(), cts:word-query($w))/cts:highlight(.,
    cts:word-query($w),<match/>)/count(//match)
  )

2)对于每个文件的所有唯一单词:

for $d in doc()
return element file {
    for $w in cts:element-words(xs:QName('text'), (), (),
        cts:document-query(xdmp:node-uri($d))
    return element word { $w }
}

如果您启用了URI词典,那么您可以通过迭代cts:uris()而不是doc()并将该值作为第四个参数传递给cts:element-values()来进一步优化2),而不是在文档上调用xdmp:node-uri