How to Implementation of the Apriori algorithm in XQuery?

Maschekpo

New Member
my code sample :I found this code in Internet and run program into Altova XMlSpy but the output did not have correctly.Please help me correct this program.input xml:\[code\]<transactions> <transaction id="1"> <items> <item>a</item> <item>d</item> <item>e</item> </items> </transaction> <transaction id="2"> <items> <item>b</item> <item>c</item> <item>d</item> </items></transaction> <transaction id="3"> <items> <item>a</item> <item>c</item> </items> </transaction> <transaction id="4"> <items> <item>b</item> <item>c</item> <item>d</item> </items> </transaction><transaction id="5"> <items> <item>a</item> <item>b</item> </items></transaction></transactions>\[/code\]my program : \[code\]xquery version "1.0";declare namespace local = "http://www.w3.org/2003/11/xpath-local-functions";declare function local:join($X as element()*, $Y as element()*) as element()* {let $items := (for $item in $Y where every $i in $X satisfies $i != $item return $item)return $X union $items};declare function local:commonIts($X as element()*, $Y as element()*) as element()* {for $item in $Xwhere some $i in $Y satisfies $i = $itemreturn $item};declare function local:removeIts($X as element()*, $Y as element()*) as element()* {for $item in $Xwhere every $i in $Y satisfies $i != $itemreturn $item};declare function local:candidateGen($l as element()* ) as element()* {for $freqSet1 in $llet $items1 := $freqSet1//itemfor $freqSet2 in $llet $items2 := $freqSet2//itemwhere $freqSet2 >> $freqSet1 and count($items1)+ 1 = count($items1 union $items2) and local:prune(local:join($items1,$items2), $l)return <items>{local:join($items1,$items2)}</items>};declare function local:prune($X as element()*, $Y as element()*) as xs:boolean{every $item in $X satisfiessome $items in $Y//items satisfiescount(local:commonIts(local:removeIts($X,$item),$items/*))= count($X) - 1};declare function local:removeDuplicate($C as element()*) {for $itemset1 in $Clet $items1 := $itemset1/*let $items :=(for $itemset2 in $Clet $items2 := $itemset2/* where $itemset2>>$itemset1 andcount($items1) =count(local:commonIts($items1, $items2))return $items2)where count($items) = 0return $itemset1};declare function local:getLargeItemsets($C as element()*, $minsup as xs:decimal, $total as xs:decimal, $src as element()*) as element()* {for $items in $Clet $trans := (for $tran in $src where every $item1 in $items/* satisfiessome $item2 in $tran/* satisfies $item1 = $item2 return $tran)let $sup := (count($trans) * 1.00) div $total where $sup >= $minsupreturn <largeItemset> {$items}<support> {$sup} </support></largeItemset>};declare function local:apriori($l as element()*, $L as element()*, $minsup as xs:decimal, $total as xs:decimal, $src as element()*, $i) as element()* {let $Ck := local:candidateGen($l)let $R := local:removeDuplicate($Ck)let $Lk := local:getLargeItemsets($R, $minsup, $total, $src)let $L := $Lk union $Lreturn if (empty($Lk)) then $L else local:apriori($Lk, $L, $minsup, $total, $src, ($i - 1)) };<largeItemsets>{let $src := doc("d5.xml")//itemslet $minsup := 0.4let $total := count($src) * 1.00let $C := distinct-values($src/*)let $K := count($C)let $l := (for $itemset in $C let $items := (for $item in $src/* where $itemset = $item return $item) let $sup := (count($items)*1.00) div $total where $sup >= $minsup return <largeItemset> <items><item>{$itemset}</item></items> <support>{$sup}</support> </largeItemset>)let $L := $l return local:apriori($l, $L,$minsup, $total, $src, $K)}</largeItemsets>\[/code\]i want to :\[code\] <largeItemsets> <largeItemset> <items> <item>a</item> </items> <support>0.6</support> </largeItemset> <largeItemset> <items> <item>d</item> </items> <support>0.6</support> </largeItemset> <largeItemset> <items> <item>b</item> </items> <support>0.6</support> </largeItemset> <largeItemset> <items> <item>c</item> </items> <support>0.6</support> </largeItemset> <largeItemset> <items> <item>d</item> <item>b</item> </items> <support>0.4</support> </largeItemset> <largeItemset> <items> <item>d</item> <item>c</item> </items> <support>0.4</support> </largeItemset> <largeItemset> <items> <item>b</item> <item>c</item> </items> <support>0.4</support> </largeItemset> <largeItemset> <items><item>d</item> <item>b</item> <item>c</item> </items> <support>0.4</support> </largeItemset> </largeItemsets>\[/code\]The program output is not correct.help me
 
Back
Top