varias tabla studio poligono para lineas leyendas grafico graficas funcion frecuencias frecuencia datos agrupados r text-mining word-frequency term-document-matrix

tabla - lista de frecuencias de palabras usando R



tabla de frecuencias en r studio (6)

He estado usando el paquete tm para ejecutar un análisis de texto. Mi problema es crear una lista con palabras y sus frecuencias asociadas con la misma

library(tm) library(RWeka) txt <- read.csv("HW.csv",header=T) df <- do.call("rbind", lapply(txt, as.data.frame)) names(df) <- "text" myCorpus <- Corpus(VectorSource(df$text)) myStopwords <- c(stopwords(''english''),"originally", "posted") myCorpus <- tm_map(myCorpus, removeWords, myStopwords) #building the TDM btm <- function(x) NGramTokenizer(x, Weka_control(min = 3, max = 3)) myTdm <- TermDocumentMatrix(myCorpus, control = list(tokenize = btm))

Normalmente uso el siguiente código para generar una lista de palabras en un rango de frecuencia

frq1 <- findFreqTerms(myTdm, lowfreq=50)

¿Hay alguna forma de automatizar esto de modo que obtengamos un marco de datos con todas las palabras y su frecuencia?

El otro problema al que me enfrento es con la conversión del término matriz de documentos en un marco de datos. Cuando estoy trabajando en grandes muestras de datos, me encuentro con errores de memoria. ¿Hay una solución simple para esto?


¿ apply(myTdm, 1, sum) o rowSums(as.matrix(myTdm)) dan los recuentos de ngram que está buscando?


Dependiendo de sus necesidades, el uso de algunas funciones tidyverse puede ser una solución aproximada que ofrece cierta flexibilidad en términos de cómo manejar el uso de mayúsculas, puntuación y palabras de parada:

text_string <- ''I have been using the tm package to run some text analysis. My problem is with creating a list with words and their frequencies associated with the same. I typically use the following code for generating list of words in a frequency range. Is there any way to automate this such that we get a dataframe with all words and their frequency? The other problem that i face is with converting the term document matrix into a data frame. As i am working on large samples of data, I run into memory errors. Is there a simple solution for this?'' stop_words <- c(''a'', ''and'', ''for'', ''the'') # just a sample list of words I don''t care about library(tidyverse) data_frame(text = text_string) %>% mutate(text = tolower(text)) %>% mutate(text = str_remove_all(text, ''[[:punct:]]'')) %>% mutate(tokens = str_split(text, "//s+")) %>% unnest() %>% count(tokens) %>% filter(!tokens %in% stop_words) %>% mutate(freq = n / sum(n)) %>% arrange(desc(n)) # A tibble: 64 x 3 tokens n freq <chr> <int> <dbl> 1 i 5 0.0581 2 with 5 0.0581 3 is 4 0.0465 4 words 3 0.0349 5 into 2 0.0233 6 list 2 0.0233 7 of 2 0.0233 8 problem 2 0.0233 9 run 2 0.0233 10 that 2 0.0233 # ... with 54 more rows


Mirando la source de findFreqTerms , parece que la función slam::row_sums hace el truco cuando se llama en una matriz de documento de término. Intente, por ejemplo:

data(crude) slam::row_sums(TermDocumentMatrix(crude))


Prueba esto

data("crude") myTdm <- as.matrix(TermDocumentMatrix(crude)) FreqMat <- data.frame(ST = rownames(myTdm), Freq = rowSums(myTdm), row.names = NULL) head(FreqMat, 10) # ST Freq # 1 "(it) 1 # 2 "demand 1 # 3 "expansion 1 # 4 "for 1 # 5 "growth 1 # 6 "if 1 # 7 "is 2 # 8 "may 1 # 9 "none 2 # 10 "opec 2


Tengo las siguientes líneas en R que pueden ayudar a crear frecuencias de palabras y ponerlas en una tabla, lee el archivo de texto en formato .txt y crea las frecuencias de las palabras, espero que esto pueda ayudar a cualquier persona interesada.

avisos<- scan("anuncio.txt", what="character", sep="/n") avisos1 <- tolower(avisos) avisos2 <- strsplit(avisos1, "//W") avisos3 <- unlist(avisos2) freq<-table(avisos3) freq1<-sort(freq, decreasing=TRUE) temple.sorted.table<-paste(names(freq1), freq1, sep="//t") cat("Word/tFREQ", temple.sorted.table, file="anuncio.txt", sep="/n")


a = scan(file=''~/Desktop//test.txt'',what="list") a1 = data.frame(lst=a) count(a1,vars="lst")

Parece funcionar para conseguir frecuencias simples. He usado la exploración porque tenía un archivo txt, pero también debería funcionar con read.csv.