2012-01-26 15 views
6

esempio, ho miliardi di brevi frasi, e voglio gruppi di loro che sono simili.come trovare frasi/frasi simili in R?

> strings.to.cluster <- c("Best Toyota dealer in bay area. Drive out with a new car today", 
         "Largest Selection of Furniture. Stock updated everyday" , 
         " Unique selection of Handcrafted Jewelry", 
         "Free Shipping for orders above $60. Offer Expires soon", 
         "XXXX is where smart men buy anniversary gifts", 
         "2012 Camrys on Sale. 0% APR for select customers", 
         "Closing Sale on office desks. All Items must go" 
         ) 

presupporre che questo vettore sia centinaia di migliaia di righe. Esiste un pacchetto in R per raggruppare queste frasi in base al significato? oppure qualcuno potrebbe suggerire un modo per classificare frasi "simili" in base a una determinata frase.

+0

Come si propone di definire "significato"? Quali delle tue frasi di esempio dovrebbero essere raggruppate insieme? – tripleee

risposta

7

È possibile visualizzare le frasi come "sacchetti di parole", ovvero creare una matrice (una matrice "term-documento"), con una riga per frase, una colonna per parola, con 1 se la parola si verifica nel frase e 0 altrimenti. (È possibile sostituire 1 con un certo peso che dovrebbe tenere conto della lunghezza della frase e della frequenza della parola). È quindi possibile applicare qualsiasi algoritmo di clustering. Il pacchetto tm può aiutarti a costruire questa matrice.

library(tm) 
library(Matrix) 
x <- TermDocumentMatrix(Corpus(VectorSource(strings.to.cluster))) 
y <- sparseMatrix(i=x$i, j=x$j, x=x$v, dimnames = dimnames(x)) 
plot(hclust(dist(t(y)))) 
+0

Scendendo dal suggerimento di Vincent c'è una statistica di dissomiglianza nel pacchetto tm che richiede numerosi argomenti a distanza tra cui "pearson". Potresti usare una sorta di livello di somiglianza/dissimateria e selezionare solo le frasi che soddisfano i criteri impostati. –

+0

@TylerRinker, grazie per la tua domanda. Sto pensando principalmente a frasi legate al significato. Nel mio esempio, "closing vendita su scrivanie .." e "più grande selezione di mobili ..." per essere raggruppati insieme (insieme, probabilmente, altri) –

+0

Se questo approccio non funziona (si avrebbe bisogno, per esempio, molte frasi sia con il "desk" e le parole "mobili" per loro identificare automaticamente come correlati), è possibile aggiungere una certa conoscenza del significato delle parole (c'è un 'pacchetto di wordnet', che sa che una scrivania è un pezzo di mobili) o taggare manualmente alcune delle frasi (metterle in classi diverse, ad esempio "auto", "mobili", "viaggi", "cibo", ecc.) e usarle come set di allenamento per etichettare automaticamente il resto dei dati. –

1

Forse guardando questo documento: http://www.inside-r.org/howto/mining-twitter-airline-consumer-sentiment potrebbe aiutare, utilizza R e guarda sentimento del mercato per le compagnie aeree che utilizzano Twitter.

+0

che è un approccio interessante, ma sembra più adatto per la classificazione (ad esempio, buono/cattivo, + ve/-ve) e non per il/significato a base di similarità di clustering metrica che mi interessa. –

+0

@sgtpepper Forse il tm pacchetto potrebbe essere un buon posto per iniziare a cercare. – aatrujillob