R 代码挂在大数据之间?

R code hangs in between with large data?

我正在处理大约 5lac+ 记录的数据库。我想统计数据中的字数。 这是我的代码

library(tm)
library(RPostgreSQL)
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv,user="postgres",password="root", dbname="pharma",host="localhost",port=5432)

query<-"select data->'PubmedArticleSet'->'PubmedArticle'->'MedlineCitation'->'Article'->'Journal'->>'Title' from searchresult where id BETWEEN 1 AND (select max(id) from searchresult)"
der<-dbGetQuery(con,query)
der<- VectorSource(der)
der<- Corpus(der)
der<-tolower(der) 
wordlist<-strsplit(der, "\W+", perl=TRUE)
wordvector<-unlist(wordlist)
freqlist<-table(wordvector)
sortedfreqlist<-sort(freqlist, decreasing=TRUE)
sortedtable<-paste(names(sortedfreqlist),sortedfreqlist, sep="\t")
cat("Word\tFrequency", sortedtable, file=choose.files(), sep="\n")

但是代码在 " wordlist<-strsplit(der, "\W+", perl=TRUE)" 处挂起并停止,有人可以帮我解决这个问题吗? 这是因为庞大的数据吗?

尝试替换

wordlist<-strsplit(der, "\W+", perl=TRUE)

word_vector = scan(text = as.character(der[1]), 
    what = "character", quote = "", quiet = TRUE)

sorted_word_table = sort(table(word_vector ))

您的代码中发生了一些有趣的事情(即您创建了一个 Corpus 然后在整个事情上调用 tolower() 将它变成了一个字符向量),但这应该让你去。

第一位将您的文本拆分为单词。尽管使用 der = removePunctuation(der[1]),您可能还想在执行此操作之前删除标点符号。第二位构成词频的table。

如果第二位很慢,您可以使用 data.table 包和基于 this 答案的以下函数,而不是调用 table()

t_dt <- function(x, key = TRUE){ 
    #creates a 1-d frequency table for x
    library(data.table)
    dt <- data.table(x)
    if(key) setkey(dt,x)    
    tab <- dt[, list(freq = .N), by = x] 
    out <- tab$freq
    names(out) <- tab$x
    out 
}

sorted_word_table = sort(t_dt(word_vector ))