Changeset: f3ede6dccbc4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f3ede6dccbc4
Modified Files:
        monetdb5/extras/rdf/rdfschema.c
        monetdb5/extras/rdf/rdfschema.h
Branch: rdf
Log Message:

Merge the mergeCS and CS structs and modify the implemention for this merging.

Briefly verify the result with existing results


diffs (truncated from 482 to 300 lines):

diff --git a/monetdb5/extras/rdf/rdfschema.c b/monetdb5/extras/rdf/rdfschema.c
--- a/monetdb5/extras/rdf/rdfschema.c
+++ b/monetdb5/extras/rdf/rdfschema.c
@@ -133,6 +133,7 @@ void addCStoSet(CSset *csSet, CS item)
        csSet->numCSadded++;
 }
 
+/*
 static 
 void addmergeCStoSet(mergeCSset *mergecsSet, mergeCS item)
 {
@@ -151,6 +152,7 @@ void addmergeCStoSet(mergeCSset *mergecs
        mergecsSet->items[mergecsSet->nummergeCSadded] = item;
        mergecsSet->nummergeCSadded++;
 }
+*/
 
 static 
 CSrel* creataCSrel(oid csoid){
@@ -770,6 +772,7 @@ void freeCSset(CSset *csSet){
        free(csSet);    
 }
 
+/*
 static
 void freemergeCSset(mergeCSset *csSet){
        int i;
@@ -780,6 +783,8 @@ void freemergeCSset(mergeCSset *csSet){
        free(csSet->items);
        free(csSet);    
 }
+*/
+
 
 static 
 CSset* initCSset(void){
@@ -791,6 +796,7 @@ CSset* initCSset(void){
        return csSet;
 }
 
+/*
 static 
 mergeCSset* initmergeCSset(void){
        mergeCSset *mergecsSet = (mergeCSset*) malloc(sizeof(mergeCSset)); 
@@ -801,6 +807,8 @@ mergeCSset* initmergeCSset(void){
        return mergecsSet;
 }
 
+*/
+
 /*
 static 
 void freeCS(CS *cs){
@@ -918,18 +926,19 @@ void mergeOidSets(oid* arr1, oid* arr2, 
 }
 
 static 
-mergeCS* mergeTwoCSs(CS cs1, CS cs2, oid maxCSid1, oid maxCSid2, int support, 
int coverage){
+CS* mergeTwoCSs(CS cs1, CS cs2, int freqIdx1, int freqIdx2, oid mergeCSId){
        
        int numCombineP; 
-       mergeCS *mergecs = (mergeCS*) malloc (sizeof (mergeCS)); 
+       CS *mergecs = (CS*) malloc (sizeof (CS)); 
+       mergecs->type = MERGECS; 
        mergecs->numConsistsOf = 2; 
-       mergecs->lstConsistsOf = (oid*) malloc(sizeof(oid) * 2);
-
-       //mergecs->lstConsistsOf[0] = cs1.csId;  
-       //mergecs->lstConsistsOf[1] = cs2.csId; 
-
-       mergecs->lstConsistsOf[0] = maxCSid1;  
-       mergecs->lstConsistsOf[1] = maxCSid2; 
+       mergecs->lstConsistsOf = (int*) malloc(sizeof(int) * 2);
+
+       //mergecs->lstConsistsOf[0] = cs1->csId;  
+       //mergecs->lstConsistsOf[1] = cs2->csId; 
+
+       mergecs->lstConsistsOf[0] = freqIdx1;  
+       mergecs->lstConsistsOf[1] = freqIdx2; 
        
        mergecs->lstProp = (oid*) malloc(sizeof(oid) * (cs1.numProp + 
cs2.numProp));  // will be redundant
 
@@ -941,9 +950,10 @@ mergeCS* mergeTwoCSs(CS cs1, CS cs2, oid
        mergeOidSets(cs1.lstProp, cs2.lstProp, mergecs->lstProp, cs1.numProp, 
cs2.numProp, &numCombineP); 
 
        mergecs->numProp = numCombineP;
-       mergecs->support = support;
-       mergecs->coverage = coverage;
-       mergecs->isRemove = 0;
+       mergecs->support = cs1.support + cs2.support;
+       mergecs->coverage = cs1.coverage + cs2.coverage;
+       mergecs->parentFreqIdx = -1; 
+       mergecs->csId = mergeCSId; 
        
        return mergecs; 
 
@@ -951,21 +961,21 @@ mergeCS* mergeTwoCSs(CS cs1, CS cs2, oid
 
 
 static 
-void mergeACStoExistingmergeCS(CS cs, oid maxCSid, mergeCS *mergecs, int 
support, int coverage){
+void mergeACStoExistingmergeCS(CS cs, int freqIdx , CS *mergecs){
        
        int numCombineP; 
        oid* _tmp1; 
        oid* _tmp2; 
        oid* oldlstProp; 
 
-        _tmp1 = realloc(mergecs->lstConsistsOf, ((mergecs->numConsistsOf + 1) 
* sizeof(oid)));
+        _tmp1 = realloc(mergecs->lstConsistsOf, ((mergecs->numConsistsOf + 1) 
* sizeof(int)));
 
        if (!_tmp1){
                fprintf(stderr, "ERROR: Couldn't realloc memory!\n");
        }
-       mergecs->lstConsistsOf = (oid*)_tmp1;
+       mergecs->lstConsistsOf = (int*)_tmp1;
        //mergecs->lstConsistsOf[mergecs->numConsistsOf] = cs.csId; 
-       mergecs->lstConsistsOf[mergecs->numConsistsOf] = maxCSid; 
+       mergecs->lstConsistsOf[mergecs->numConsistsOf] = freqIdx; 
        mergecs->numConsistsOf++;
 
        oldlstProp = malloc (sizeof(oid) * (mergecs->numProp)); 
@@ -981,8 +991,8 @@ void mergeACStoExistingmergeCS(CS cs, oi
        mergeOidSets(cs.lstProp, oldlstProp, mergecs->lstProp, cs.numProp, 
mergecs->numProp, &numCombineP); 
 
        mergecs->numProp = numCombineP;
-       mergecs->support = support;
-       mergecs->coverage = coverage;
+       mergecs->support += cs.support;
+       mergecs->coverage += cs.coverage;
 
        free(oldlstProp);
 }
@@ -990,21 +1000,21 @@ void mergeACStoExistingmergeCS(CS cs, oi
 
 /*Merge two mergeCSs with the condition that no parent belongs to both of them 
*/
 static 
-void mergeTwomergeCS(mergeCS *mergecs1, mergeCS *mergecs2, int support, int 
coverage){
+void mergeTwomergeCS(CS *mergecs1, CS *mergecs2, int parentFreqIdx){
        
        int numCombineP; 
-       oid* _tmp1; 
+       int* _tmp1; 
        oid* _tmp2; 
        oid* oldlstProp1; 
        oid* oldlstProp2; 
        int i; 
 
-        _tmp1 = realloc(mergecs1->lstConsistsOf, ((mergecs1->numConsistsOf + 
mergecs2->numConsistsOf) * sizeof(oid)));
+        _tmp1 = realloc(mergecs1->lstConsistsOf, ((mergecs1->numConsistsOf + 
mergecs2->numConsistsOf) * sizeof(int)));
 
        if (!_tmp1){
                fprintf(stderr, "ERROR: Couldn't realloc memory!\n");
        }
-       mergecs1->lstConsistsOf = (oid*)_tmp1;
+       mergecs1->lstConsistsOf = (int*)_tmp1;
        for (i = 0; i < mergecs2->numConsistsOf; i++){
                mergecs1->lstConsistsOf[mergecs1->numConsistsOf] = 
mergecs2->lstConsistsOf[i]; 
                mergecs1->numConsistsOf++;
@@ -1027,11 +1037,11 @@ void mergeTwomergeCS(mergeCS *mergecs1, 
        mergeOidSets(oldlstProp1, oldlstProp2, mergecs1->lstProp, 
mergecs1->numProp, mergecs2->numProp, &numCombineP); 
 
        mergecs1->numProp = numCombineP;
-       mergecs1->support = support;
-       mergecs1->coverage = coverage;
+       mergecs1->support += mergecs2->support;
+       mergecs1->coverage += mergecs2->coverage;
 
        // Remove mergecs2
-       mergecs2->isRemove = 1; 
+       mergecs2->parentFreqIdx = parentFreqIdx; 
 
        free(oldlstProp1);
        free(oldlstProp2); 
@@ -1189,7 +1199,7 @@ str printamergeCS(mergeCS cs, int mergec
 */
 
 static 
-str printmergeCSSet(mergeCSset *mergecsSet, CSset *freqCSset, oid* 
superCSFreqCSMap, int freqThreshold){
+str printmergeCSSet(CSset *freqCSset, int freqThreshold){
 
        int     i,j; 
        FILE    *fout; 
@@ -1202,8 +1212,8 @@ str printmergeCSSet(mergeCSset *mergecsS
        int     nummergecs;     
        CS      freqcs; 
 
-       nummergecs = mergecsSet->nummergeCSadded; 
-       
+       nummergecs = freqCSset->numCSadded; 
+
        if (TKNZRopen (NULL, &schema) != MAL_SUCCEED) {
                throw(RDF, "rdf.rdfschema",
                                "could not open the tokenizer\n");
@@ -1217,12 +1227,12 @@ str printmergeCSSet(mergeCSset *mergecsS
 
        fout = fopen(filename,"wt"); 
 
-       for (i = 0; i < nummergecs; i++){
-               mergeCS cs = (mergeCS)mergecsSet->items[i];
-               if (cs.isRemove == 0){
+       for (i = freqCSset->numOrigFreqCS; i < nummergecs; i++){
+               CS cs = (CS)freqCSset->items[i];
+               if (cs.parentFreqIdx == -1){
                        fprintf(fout, "MergeCS %d (Number of parent: %d) \n",i, 
cs.numConsistsOf);
                        for (j = 0; j < cs.numConsistsOf; j++){
-                               freqcs = 
freqCSset->items[superCSFreqCSMap[cs.lstConsistsOf[j]]];
+                               freqcs = freqCSset->items[cs.lstConsistsOf[j]];
                                fprintf(fout, " " BUNFMT " ", freqcs.csId);
                        }
                        fprintf(fout, "\n");
@@ -1749,43 +1759,6 @@ void getMaximumFreqCSs(CSset *freqCSset,
 
 }
 
-/*
-static
-void mergeMaximumFreqCSs(CSset *freqCSset, oid* superCSFreqCSMap, oid* 
superCSMergeMaxCSMap, mergeCSset* mergecsSet, int numMaxCSs){
-       int             i, j; 
-       int             maxCSid = 0; 
-       int             freqId1, freqId2; 
-       float           simscore = 0.0; 
-       mergeCS         *mergecs;
-       int             numCombineP = 0; 
-
-
-       for (i = 0; i < freqCSset->numCSadded; i++){
-               if (freqCSset->items[i].parentFreqIdx == -1){
-                       superCSFreqCSMap[maxCSid] = i; 
-                       maxCSid++;
-               }
-       }
-
-       
-       for (i = 0; i < numMaxCSs; i++){
-               for (j = (i+1); j < numMaxCSs; j++){
-                       freqId1 = superCSFreqCSMap[i]; 
-                       freqId2 = superCSFreqCSMap[j];
-                       simscore = 
similarityScore(freqCSset->items[freqId1].lstProp, 
freqCSset->items[freqId2].lstProp,
-                                       
freqCSset->items[freqId1].numProp,freqCSset->items[freqId2].numProp,
-                                       &numCombineP);
-                       if (simscore > 0.6){
-                               mergecs = 
mergeTwoCSs(freqCSset->items[freqId1],freqCSset->items[freqId2], 0, 0);
-                               addmergeCStoSet(mergecsSet, *mergecs);
-                               superCSMergeMaxCSMap[i] = j;    
-                               //printf("Can merge " BUNFMT " and " BUNFMT " 
(sscore: %.2f) \n", 
freqCSset->items[freqId1].csId,freqCSset->items[freqId2].csId, simscore);
-                       }
-               }
-       }
-}
-*/
-
 
 static 
 PropStat* initPropStat(void){
@@ -1900,17 +1873,17 @@ void freePropStat(PropStat *propStat){
 
 
 static
-void mergeMaximumFreqCSsAll(CSset *freqCSset, oid* superCSFreqCSMap, oid* 
superCSMergeMaxCSMap, mergeCSset* mergecsSet, int numMaxCSs){
+void mergeMaximumFreqCSsAll(CSset *freqCSset, oid* superCSFreqCSMap, oid* 
superCSMergeMaxCSMap, int numMaxCSs, oid maxCSoid){
        int             i, j, k; 
        int             maxCSid = 0; 
        int             freqId1, freqId2; 
        float           simscore = 0.0; 
-       mergeCS         *mergecs;
+       CS              *mergecs;
        oid             mercsId = 0; 
        oid             existMergecsId = BUN_NONE; 
        int             numCombineP = 0; 
-       CS              cs1, cs2;
-       mergeCS         *existmergecs, *mergecs1, *mergecs2; 
+       CS              *cs1, *cs2;
+       CS              *existmergecs, *mergecs1, *mergecs2; 
 
        PropStat        *propStat;      /* Store statistics about properties */
 
@@ -1935,20 +1908,20 @@ void mergeMaximumFreqCSsAll(CSset *freqC
 
        for (i = 0; i < numMaxCSs; i++){
                freqId1 = superCSFreqCSMap[i];
-               cs1 = (CS)freqCSset->items[freqId1];
+               cs1 = (CS*) &(freqCSset->items[freqId1]);
                for (j = (i+1); j < numMaxCSs; j++){
                        freqId2 = superCSFreqCSMap[j];
-                       cs2 = (CS)freqCSset->items[freqId2];
+                       cs2 = (CS*) &(freqCSset->items[freqId2]);
                        
                        if(USINGTFIDF == 0){
-                               simscore = similarityScore(cs1.lstProp, 
cs2.lstProp,
-                                       cs1.numProp,cs2.numProp,&numCombineP);
+                               simscore = similarityScore(cs1->lstProp, 
cs2->lstProp,
+                                       cs1->numProp,cs2->numProp,&numCombineP);
 
                                //printf("simscore Jaccard = %f \n", simscore);
                        }
                        else{
-                               simscore = similarityScoreTFIDF(cs1.lstProp, 
cs2.lstProp,
-                                       cs1.numProp,cs2.numProp,&numCombineP, 
propStat);
+                               simscore = similarityScoreTFIDF(cs1->lstProp, 
cs2->lstProp,
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to