2016-01-11 11 views
5

Devo davvero masticare l'API WEKA. Tutto quello che voglio fare è introdurre nuovi valori nominali ai miei attributi.Come aggiungere nuovi valori nominali a Istanze usando AddValues?

Ho dati come Frase 1

@relation i-do-not-care 

@attribute sentence_id {1090587:0} 
@attribute word {here,girlfriend,bday,23rd,go,for,my,just} 
@attribute relations {nmod:poss-,amod+;nsubj-,nsubj+;nmod+;advmod+,amod-,nmod-;case+;nmod:poss+,advmod-,case-} 
@attribute target {0} 

@data 
1090587:0,go,nsubj+;nmod+;advmod+,0 
1090587:0,my,nmod:poss-,0 

e Frase 2

@relation i-do-not-care 

@attribute sentence_id {1090587:1} 
@attribute word {be,idea,house,weehawken,offer,view,top,along,of,have,if,you,a,in,the,ever,to,river,chart} 
@attribute relations {aux-,cop-,nmod-;case+,nsubj+;acl:relcl-;xcomp+,advmod-,det-,nsubj-,advcl+;nsubj+;dobj+,case-,acl:relcl+;det+;nmod+;dobj-,mark+;nsubj+;det+;nmod+;cop+;aux+;case+;advcl-;advmod+,compound+;nsubj-;det+,mark+;xcomp-,mark-,compound-,det+;nmod+;nmod-;case+} 
@attribute target {0,1} 

@data 
1090587:1,a,det-,0 
1090587:1,have,advcl+;nsubj+;dobj+,0 

E quello che cerco di realizzare è l'aggiunta di quelli a un insieme di dati istanza vuota:

@relation features 

@attribute sentence_id {} 
@attribute word {} 
@attribute relations {} 
@attribute target {0,1} 

@data 

Questo è come ho cercato di farlo:

public Instances add(Instances instances, Instances newInstances) { 

    AddValues addValues = new AddValues(); 

    try { 
     // This should just copy 'sentence_id' values 
     // but I am not sure about that.    
     addValues.setAttributeIndex("1"); 
     addValues.setInputFormat(newInstances); 

     instances = Filter.useFilter(instances, addValues); 

     return instances;    
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 

ma è solo sovrascrivere instances invece di aggiungere i valori.

risposta

0

Si sta utilizzando lo stesso codice due volte.

instances = Filter.useFilter(instances, addValues); 

return instances = Filter.useFilter(instances, addValues); 

Prova questo:

instances = Filter.useFilter(instances, addValues); 

return instances; 

O il livello successivo:

return Filter.useFilter(instances, addValues 
+1

spiace, ma questo era solo un resto del codice vero e proprio. L'ho solo semplificato e ho dimenticato di rimuovere la seconda chiamata 'useFilter()' – displayname

+0

Btw: ho già "* managed *" per fare la parte * add * ma sembra che AddValues ​​non si preoccupi dell'indicizzazione o qualcosa del genere perché i dati sono mi sto solo stancando .. sto ancora aspettando che qualcuno sappia come farlo * giusto *. – displayname