Подтвердить что ты не робот

Список частот слов с использованием 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)

Есть ли способ автоматизировать это так, что мы получаем фрейм данных со всеми словами и их частотой?

Другая проблема, с которой я сталкиваюсь, заключается в преобразовании матрицы слова документа в фрейм данных. Когда я работаю над большими образцами данных, я сталкиваюсь с ошибками памяти. Есть ли простое решение для этого?

4b9b3361

Ответ 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.