0

次の 2 つのサンプル 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. DB全体ですべての一意の単語とその数を取得します(2つ以上のファイルしかありません)。
  2. 指定されたファイルの一意の単語をすべて取得する
4

2 に答える 2

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 レキシコンを有効にしている場合は、ドキュメントを呼び出す代わりに、その値を の 4 番目の引数として反復して渡すことcts:uris()により、2) をさらに最適化できます。doc()cts:element-values()xdmp:node-uri

于 2012-10-09T16:52:01.353 に答える
1

http://docs.marklogic.com/guide/search-dev/lexicon#chapterを参照してください

于 2012-10-09T16:48:45.820 に答える