Список частот слов с использованием R
Я использую пакет tm для выполнения некоторого текстового анализа.
Моя проблема заключается в создании списка со словами и их частотами, связанными с тем же
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))
Обычно я использую следующий код для генерации списка слов в диапазоне частот
frq1 <- findFreqTerms(myTdm, lowfreq=50)
Есть ли способ автоматизировать это так, что мы получаем фрейм данных со всеми словами и их частотой?
Другая проблема, с которой я сталкиваюсь, заключается в преобразовании матрицы слова документа в фрейм данных. Когда я работаю над большими образцами данных, я сталкиваюсь с ошибками памяти.
Есть ли простое решение для этого?
Ответы
Ответ 1
Попробуйте это
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
Ответ 2
У меня есть следующие строки в R, которые могут помочь создавать частоты слов и помещать их в таблицу, он читает файл текста в формате .txt и создает частоты слов, я надеюсь, что это может помочь любому, кто интересуется.
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")
Ответ 3
Глядя на источник findFreqTerms
, кажется, что функция slam::row_sums
выполняет трюк при вызове в матрице термина-документа, Попробуйте, например:
data(crude)
slam::row_sums(TermDocumentMatrix(crude))
Ответ 4
Дает ли apply(myTdm, 1, sum)
или rowSums(as.matrix(myTdm))
количество nграмм, которые вы после?
Ответ 5
a = scan(file='~/Desktop//test.txt',what="list")
a1 = data.frame(lst=a)
count(a1,vars="lst")
похоже, работает, чтобы получить простые частоты. Я использовал сканирование, потому что у меня был txt файл, но он также должен работать с read.csv.