Vamos a replicar un ejemplo ya presentado con WPS en esta misma bitácora. Tratamos de hacer algo tan sencillo como contar palabras y para ello empleamos de nuevo un debate del Congreso de los Diputados de España. Estas intervenciones las transformamos en un fichero de texto que vosotros podéis descargaros de este link. Bien, partimos de un archivo de texto de Windows y con él vamos a crear un data frame de R que contendrá las palabras empleadas en esa sesión del Congreso español. Pasamos a analizar el código empleado:
#Leemos el fichero de una ubicación de nuestro equipo
ubicacion="D:\\raul\\wordpress\\text minning R\\datos\\intervencion_congreso.txt"
texto = read.table (ubicacion,sep="\r")
#Dejamos todas las palabras en mayúsculas
texto = toupper(texto$V1)
#El texto lo transformamos en una lista separada por espacios
texto_split = strsplit(texto, split=" ")
#Deshacemos esa lista y tenemos el data.frame
texto_col = as.character(unlist(texto_split))
texto_col = data.frame(texto_col)
names(texto_col) = c("V1")
Está bien comentado en el código, pero repetimos. Leemos el archivo de texto con una sóla variable y donde el retorno de carro es el separador, en R el retorno de carro es \r. Con toupper ponemos todas las palabras en mayúsculas y a partir de ahí creamos una lista con los elementos de la tabla inicial partiendo por espacios en blanco. Se deshace la lista y se crea un data frame con una variable que llamamos V1. Ahora es necesario realizar una pequeña depuración de las palabras. Mi hijo acaba de tirar una piedra al portátil así que no me entretendré mucho con esta tarea:
#Eliminamos algunos caracteres regulares
texto_colV1 = sub("([[:space:]])","",texto_colV1)
texto_colV1 = sub("([[:digit:]])","",texto_colV1)
texto_colV1 = sub("([[:punct:]])","",texto_colV1)
#Creo una variable longitud de la palabra
texto_collargo = nchar(texto_colV1)
#Controles que utilizo
head(texto_col)
hist(texto_col$largo)
Con la función sub vamos a eliminar caracteres regulares como espacios («([[:space:]])») números («([[:digit:]])») y signos de puntuación («([[:punct:]])»). Con nchar creamos una variable en el data frame para determinar la longitud de la palabra. Se realiza un histograma para analizar estas longitudes.
Ya disponemos de un data frame preparado para nuestro objetivo, ahora sólo nos queda realizar la tabla de frecuencias y para ello vamos a emplear el paquete sqldf (como no):
library(sqldf)
contador = sqldf("
select V1 as palabra,count(*) as frec
from texto_col
where largo > 4
group by palabra
order by count(*) desc ;")
head(contador)
Vemos que el código requiere de una cierta mejora, pero parece claro que les preocupaba la REFORMA CONSTITUCIONAL y la CONSTITUCION (ahora nos acordamos de ella). Esta entrada continuará con la creación de una nube de palabras que realizaremos con ggplot2.
Por cierto, este trabajo se intentó hacer con la librería tm y no pude con los caracteres especiales tales como ñ o tildes, ¿alguien sabe cómo solventar este problema?
Hola Ramón. Yo creo que lo de tm es un problema de la codificación de carácteres. Si quieres, mándame el archivo de texto y hago alguna prueba con tm que a mi me ha funcionado bien con texto en castellano.
Hola, soy Raúl, no Ramón. La verdad es que no le di muchas vueltas al problema con tm, en la lista de r en español se planteó la duda y no se resolvió.
En la entrada aparece el link al archivo de texto plano (https://analisisydecision.es/wp-content/uploads/2011/09/intervencion_congreso.txt)
Empecé con:
library(tm)
#directorio de trabajo
ub_datos = «D:/wordpress/text minning R/datos»
estruc = Corpus(DirSource(ub_datos))
texto.matrix<-TermDocumentMatrix(estruc, control = list(removePunctuation = TRUE, stemming = TRUE, minWordLength = 5)) Y en el momento que obtuve 2 veces este error: Error en tolower(txt) : invalid input 'ORDEN DEL DÍA: ' in 'utf8towcs' No me compliqué mucho más la vida. A ver si puedes resolver el problema y en la siguiente entrada empleo tm. Gracias
Hola
¿Cómo hacer para que reconozca las tildes del idioma español?
Realizando :
text <- readLines("/Users/usuario/Desktop/intervencion_congreso.txt",encoding="UTF-8")
Coge las tildes como:
"Eran las doce y cuarenta minutos del medioda.»
En vez de: Eran las doce y cuarenta minutos del mediodía.
Hola, ¿utilizas R-Studio?
Hola, me han demostrado que UTF no puede con todo, utiliza latin1 en el encoding. Evita utilizar fileEncoding.
Estoy realizando un Trabajo Fin de Máster en la Universidad de Extremadura. Me gustaría saber si podría contactar contigo por privado. He creado un fichero de datos por scraping sobre comentarios y necesito contar las palabras de este fichero. Estoy trabajando en windows.
buenas tardes tengo una consulta, como puedo realizar una concatenación de caracteres utilizando una condicion if cual seria la sintaxis , gracias de antemano
para concatenar caracteres emplea paste o paste0, lo que no entiendo muy bien es a que te refieres con una condición if, pon un ejemplo aunque no funcione.
Tienes que usar:
encoding = «latin1»
al cargar el archivo
Hola, que pasa si no fuera un .txt sino una columna con texto? alguien sabe?
Gracias.