<?xml version="1.0" encoding="utf-8"?>
<transaction>
<itemset id="1">
<item>pen</item>
<item>notebook</item>
<item>pencile box</item>
</itemset>
<itemset id="2">
<item>pen</item>
<item>notebook</item>
<item>pencile box</item>
<item>ink</item>
</itemset>
<itemset id="3">
<item>ink</item>
<item>milk</item>
</itemset>
<itemset id="4">
<item>pen</item>
<item>notebook</item>
<item>pencile box</item>
<item>ink</item>
<item>milk</item>
<item>paper</item>
</itemset>
<itemset id="5">
<item>pen</item>
<item>ink</item>
<item>notebook</item>
</itemset>
</transaction>
我是 XQuery 的新手。我正在使用 BaseX 来运行 XQuery。我的目标是从每个事务中找到基于非常流行的 Apriori 算法的 1-频繁 2-频繁项集... n-频繁项集,并希望对它们进行计数。
我已经找到了 1-frequent 项集及其支持计数。但我无法使用 XQuery 找到 2-itemset 及其支持计数。谁能帮我做到这一点?这是我尝试过的代码...
let $src:= doc('XML/test.xml')/transaction/itemset
let $minsup:= 3
let $C:=distinct-values($src/*)
let $l:=for $itemset in $C
let $items:=(for $item in $src/*
where $itemset=$item
return $item)
let $sup := count($items)
where $sup>=$minsup
order by $sup descending
return<itemset>
<item> {$itemset} </item>
<support> {$sup} </support>
</itemset>
let $C1:=distinct-values($l/item)
let $C2:=distinct-values($l/item)
let $cnt:=count(distinct-values($l/item))
let $counter:=0
for $a in $C1
for $b in $C2
where $a>$b
return <items>
<item>{concat($a,',',$b)}</item>
</items>
预期输出看起来像
<itemset>
<item>pen</item>
<support>4</support>
</itemset>
<itemset>
<item>notebook</item>
<support>4</support>
</itemset>
...............
<itemset>
<item>pen</item>
<item>notebook</item>
<support>4</support>
</itemset>
<itemset>
<item>pen</item>
<item>pencile box</item>
<support>3</support>
</itemset>
................
<itemset>
<item>pen</item>
<item>notebook</item>
<item>pencile box</item>
<support>3</support>
</itemset>
<itemset>
<item>pen</item>
<item>notebook</item>
<item>ink</item>
<support>3</support>
</itemset>
...............