Information Retrieval: Consiste en encontrar información, mayormente en la forma de documentos, pero que se encuentran en una forma no estructurada. Estos datos satisfacen las necesidades de grandes repositorios de datos. Existen diversas técnicas que se utilizan en Information Retrieval, en esta ocasión veremos una relacionada con text mining. Caso Práctico: Extracción de información proveniente de tweets. Se requiere descargar el paquete twitter. Para hacer esto seleccionar la opción de Install Packages: De aquí se selecciona el servidor o repositorio de paquetes de R:
- Cargarlo: FACULTAD DE INGENIERIA DE SISTEMAS, CÓMPUTO Y TELECOMUNICACIONES
library(twitter) FACULTAD DE INGENIERIA DE SISTEMAS, CÓMPUTO Y TELECOMUNICACIONES Usualmente saldrán estos tres mensajes: Recomendaciones: Grabar sus comandos en la forma de un R Script, en algunos casos puede haber incompatibilidad entre los paquetes instalados. En caso de no tener acceso a la librería twitter se puede hacer una descarga del archivo Obama de la página web. Hacer doble click en el archivo RData, esto cargará un data frame df y continuar desde(**) - Se utiliza timeline para descargar del ejemplo cierta cantidad de tweets, descargaremos 200: rdmtweets<-usertimeline("rdatamining",n=200) - Se puede visualizar de nuestra variable rdmtweets la información que tiene como si fuera un vector: rdmtweets[1:10] Nota: La nomenclatura [[n]] se refiere al índice dentro de una lista, el segundo índice se refiere al elemento de la lista. Paso opcional: Si se desea de que los tweets salgan impresos en forma de lista se puede usar el siguiente código: for (i in 1:10) + { + cat(paste("[[",i,"]]",sep="")) + writelines(strwrap(rdmtweets[[i]]$gettext(),width=73)) + }
Concepto de Corpus: También conocido como plural corpora o text corpus, consiste en un conjunto de textos estructurados. Se utilizan para análisis estadísticos. Ejemplo: Bank of English - Se puede convertir nuestros datos a un corpus, para luego manipularlo. Primeramente se debe convertir a un data.frame #do.call(what,args) ejecuta una función, what es la función y args son los argumentos con los cuales se utilizaría dicha función. Para este caso se va a ensamblar la lista de tweets en una estructura más simple con rbind. #rbind combina datos por filas #lapply(datos,función) aplica la función sobre todos los datos y retorna una lista. > #conversión de tweets a un data frame > df<-do.call("rbind",lapply(rdmtweets,as.data.frame)) La información después de lapply sería: Después de aplicar do.call la información quedaría agrupada en filas:
- Para convertir el texto a un corpus se puede utilizar la librería de text mining lm: (**) library(tm) m.corpus<-corpus(vectorsource(df$text)) Limpieza de los datos: Los datos textuales antes de ser procesados deben de ser limpiados, por ejemplo se debe de remover signos de puntuación, números, urls y otros elementos que pueden impedir su correcta clasificación. Algunas operaciones básicas: m.corpus<-tm_map(m.corpus,tolower) Si se quieren visualizar los cambios, se puede utilizar la instrucción inspect: inspect(m.corpus[1:5])
Nota: Los stop words son palabras que no brindan más información al contexto del cual se esté tratando. - Sacar los stop words de los tweets: m.corpus<-tm_map(m.corpus,removewords,stopwords)
Stemming Words: FACULTAD DE INGENIERIA DE SISTEMAS, CÓMPUTO Y TELECOMUNICACIONES Se le conoce como palabras derivadas Consiste en obtener la raíz de las palabras de tal modo que no se vea afectada por sus diversos sufijos. Ejemplo: wait, waits, waited - Para este proceso de stemming lo que se hará es conseguir las raíces de las palabras, luego estas se compararán con el listado de palabras antes del stem. Este último paso es para que se escojan las palabras que tengan mayor frecuencia: - Instalar los siguientes paquetes: Snowball, RWeka, rjava y RWekajars m.copiacorpus<-m.corpus
El comando stemcompletion, completa las palabras procesadas mediante stem mediante un diccionario. Construcción de una matriz de términos y documentos: Representa las relaciones entre términos y documentos. En las filas se colocarán las palabras o términos y en las columnas los documentos. #TermDocumentMatrix su parámetro control=list(wordlenghts=c(1,inf)) define que todos los términos serán usados, se pueden eliminar los valores máximos y mínimos Term frequency: Mide cuantas veces una palabra se encuentra en una colección de documentos. - Obteniendo la frecuencia de términos
- Visualización de datos mediante un gráfico de barras. Descargar la librería ggplot2 termfrecuencia<-rowsums(as.matrix(matriz.td)) > termfrecuencia<-subset(termfrecuencia,termfrecuencia>=10) > library(ggplot2) > qplot(names(termfrecuencia),termfrecuencia,geom="bar")+coord_flip() Nube de Palabras: Sirve para determinar la importancia de las palabras. Para este proceso la matriz de términos y documentos se convierte a una matriz normal, luego se calculará la frecuencia de palabras. - Instalar el paquete wordcloud library(wordcloud) > m<-as.matrix(matriz.td) > freqpalabras<-sort(rowsums(m),decreasing=true) > set.seed(375) > graylevels<-gray((freqpalabras+10)/(max(freqpalabras)+10))
> wordcloud(words=names(freqpalabras),freq=freqpalabras,min.freq=3,random.order=f,colors=graylevels) Referencias: (tomadas sin ninguna estructura en particular) [1] Introduction to Information Retrieval, disponible en: http://nlp.stanford.edu/ir-book/pdf/01bool.pdf [2] R and Data Mining: Examples and Case Studies, disponible en: http://www.rdatamining.com/docs [3] http://cran.r-project.org/doc/manuals/r-intro.html#lists [4] http://cran.r-project.org/doc/manuals/r-lang.html