2012-01-26 17 views
6

Ejemplo, tengo miles de millones de frases cortas, y quiero clústeres de ellas que sean similares.cómo encontrar oraciones/frases similares en 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" 
         ) 

Supongamos que este vector tiene cientos de miles de filas. ¿Hay un paquete en R para agrupar estas frases por su significado? o alguien podría sugerir una manera de clasificar las frases "similares" por el significado de una frase determinada.

+0

¿Cómo se propone definir el "significado"? ¿Cuáles de tus frases de ejemplo deben agruparse? – tripleee

Respuesta

7

Puede ver sus frases como "bolsas de palabras", es decir, crear una matriz (una matriz de "documento de término"), con una fila por frase, una columna por palabra, con 1 si la palabra aparece en el frase y 0 de lo contrario. (Puede reemplazar 1 con algún peso que represente la longitud de la frase y la frecuencia de la palabra). A continuación, puede aplicar cualquier algoritmo de agrupamiento. El paquete tm puede ayudarlo a construir esta matriz.

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

Saliendo de la sugerencia de Vincent hay una estadística de disimilitud en el paquete tm que toma numerosos argumentos a distancia, incluyendo "pearson". Podría usar algún tipo de nivel de similitud/disimilaerty y seleccionar solo las oraciones que llenen los criterios establecidos. –

+0

@TylerRinker, gracias por su pregunta. Estoy pensando principalmente en frases relacionadas con el significado. En mi ejemplo, "cierre de venta en escritorios de oficina ..." y "Selección más grande de muebles ..." para agruparlos (junto con posiblemente otros) –

+0

Si este enfoque no funciona (necesitaría, por ejemplo, muchas oraciones con las palabras "escritorio" y "mobiliario" para identificarlas automáticamente como relacionadas), puede agregar algún conocimiento sobre el significado de las palabras (hay un paquete 'wordnet', que sabe que un escritorio es una pieza de muebles) o etiquetar manualmente algunas de las oraciones (ponerlas en diferentes clases, por ej., "automóviles", "muebles", "viajar", "comida", etc.) y usarlas como un conjunto de capacitación para etiquetar automáticamente el resto de los datos. –

1

Quizás al mirar este documento: http://www.inside-r.org/howto/mining-twitter-airline-consumer-sentiment podría ayudar, utiliza R y analiza el sentimiento del mercado para las aerolíneas que utilizan Twitter.

+0

que es un enfoque interesante, pero parece más adecuado para la clasificación (por ejemplo, bueno/malo, + ve/-ve) y no para la métrica de similitud basada en clústeres/significado que estoy interesado. –

+0

@sgtpepper Tal vez el paquete tm podría ser un buen lugar para comenzar a buscar. – aatrujillob

Cuestiones relacionadas