2016-07-18 9 views
2

xmlレコードのセットと用語セットが指定されています。一連のレコードから$termsシーケンスの用語が抽出されます。各段落レコードの各用語の出現回数を数えたいと思います。私はそうするために、次のコードを使用:Xquery:レコードセット内の各レコード内の用語の出現回数をカウントする

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

あなたのクエリにはいくつかの明白な問題がありますが、あなたが照会されているXMLの例なしに、それは確かに言うことはできません。 – wst

+1

計算された文字列の値が小文字の '$ term'の値と等しいか' contains() '(ヒント、ヒント)の値を持つ' rec:paragraph'の数を探していますか?また、 'rec:paragraph'の文字列値をlower-case()にすることもできます。入力例と望ましい結果が参考になります。 –

+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> 
+0

それは働いた。ありがとう –

関連する問題