R代码在大数据之间挂起?

时间:2015-03-12 10:20:34

标签: r bigdata

我正在使用大约5lac +记录处理db。我想数数据中的单词。 这是我的代码

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)"处挂起并停止,有人可以帮助我吗? 这是因为巨大的数据吗?

1 个答案:

答案 0 :(得分:0)

尝试替换

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])之前删除标点符号。第二位表示单词频率。

如果第二位慢,您可以使用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 ))
相关问题