Newsgroup: it.comp.lang.c
Titolo: ciclatura matrici

Il mio problema è questo: ho due matrici, una di dimensioni
documenti*termini che contiene 1 o 0 a seconda che il
termine in esame è presente o meno nel relativo documento, l'altra mia
matrice è di dimensione termini* termini essa inizialmente è semplicemente
una matrice diagonale
quindi supponendo documenti=3 e terimini=5 ho
    t1 t2 t3 t4 t5           t1 t2 t3 t4 t5
d1  1  1  1  1  0	 t1  1  0  0  0  0
d2  1  0  1  1  1 ->TMP  t2  0  1  0  0  0
d3  0  1  1  1  1	 t3  0  0  1  0  0 ->M
			 t4  0  0  0  1  0 
			 t5  0  0  0  0  1
io mi incasino nel controllare la matrice TMP perchè devo controllare i
termini a coppia, in quanto mi serve il numero
di documenti nei quali i termini che sto controllando compaiono insieme
devo cioè poter fare unacosa del genere:
controllo (d1,t1) e (d1,t2) se sono =1 allora aggiungo uno alla matrice M
in corrispondenza di (t1,t2)e(t2,t1) poi passo alla riga sotto sempre
controllando t1 e t2 ed incrementando in M sempre (t1,t2)e(t2,t1) e di
nuovo passare alla riga successiva... poi controllerò (sempre per tutti e
tre i documenti) (t1,t3) poi (t1,t4) x i tre documenti e infine (t1,t5)
sempre per i tre documenti.. quello che non fa il mio ciclo è passare al
"dopo" e cioè controllare sempre per tutti documenti: (t2,t3) (t2,t4)
(t2,t5) poi (t3,t4) (t3,t5) infine (t4,t5). tutto ciò sempre incrementando
la matrice M ad ogni occorrenza.. quind incrementerò sempre due "caselle"
alla volta.
in questo modo devo poter controllare tutte le coppie possibili ma per
riga, escludendo ovviamente i "doppi" perchè se t1 compare con t2 in 3
documenti anche t2 comparirà con t1 in 3 documenti.
la mia M finale dovrà essere (secondo l'esempio qua riportato) fatta in
questa maniera:
    t1  t2   t3   t4   t5
t1  1(3) 1    2    2    1
t2  1    1(3) 2    2    1
t3  2    2    1(3) 3    2	->matrice simmetrica e diagonale
t4  2    2    3    1(3) 2
t5  1    1    2    2    1(3)
ho messo (3) perchè ogni termine ricorre con se stesso quindi la diagonale
sarebbe composta da 3 però a me rimane 1 (e va bene) in quanto nella
matrice TMP non controllerò mai coppie uguali. è un bel casotto ma spero
di essere stata chiara anche se lunga nelle spiegazioni.. vi riporto la
mia ciclatura l'ho modificata mille volte ed è diventata una cosa
astrusissima ma non fa ciò che deve fare. fino a giro==3 si comporta bene,
poi cicla inutilmente la i su termini... e non riparte da dove dovrebbe
i=0;
giro=0
for ( j=0; j<documenti; j++){	
	i++;	
	for (;i<termini; i++){		
		if(giro<=documenti){	
			i--;
			for (int z=0; z<documenti; z++){
				if (tmp[z](i)==1 && tmp[z](i+1+giro)==1){	
					M[giro](i+1)+=1;	
					M[i+1](giro)+=1;	
				}
			}
			giro++;
		} //chiude if giro
	}
}
Grazie mille.
sara
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 matrice TMP non controllerò mai coppie uguali. 
comunque per t5 dovrebbe venirti 2, perche' compare solo in
2 documenti.
In ogni caso mi sembra una cosa banalissima. Cicli per ogni
documento e per ogni coppia di termini in cui il secondo sia minore del
primo (per non ripetere la ricerca sulla stessa coppia di termini).
Effettui il secondo ciclo su t2 solo se l'elemento in t1 era diverso da
0.
Quindi:
int d,t1,t2;
for (d=0; d<documenti; d++)
   for (t1=1; t1<termini; t1++)
     if (tmp[d][t1])
       for (t2=0; t2<t1; t2++)
         if  (tmp[d][t2])
          {
            M[t1][t2]++;
            M[t2][t1]++;
          }
ciao,
g.

 termine in esame è presente o meno nel relativo documento, l'altra mia
[CUT]
devi fare Latent Semantic Analysis/Clustering ?
A. 


rispondo io per trekappa: si :-)
hai gia' affrontato il problema?
ciao e grazie
Dade 

 Dade
Figurati.
Alex

 g.
Ciao, grazie mille.. quello che per te è stato banale a me ha impiegato
almeno 4 giorni senza combinare nulla :P ho ottenuto un codice
schifosissimo e incomprensibile, il tuo è grandioso!!!
grazie mille ancora!!


 Alex
Ciao, sto facendo una tesi che ha per argomento la semantica latente, devo
praticamente implementare le formule (DOR e TCOR) trovate in un articolo
che mi ha passato la mia prof. Una volta estratte le caratteristiche dei
documenti sia in "modo" DOR sia in "modo" TCOR le passo ad una libreria
creata dalla mia prof e altri ricercatori; essa implementa un algoritmo di
feedback. Il mio lavoro consiste nel provare questo algoritmo con
documenti (testi) perchè con le immagini è già funzionante.
L'ambiente di sviluppo è windows (vc++)
Grazie mille per le info.
