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 ))
我正在处理大约 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 ))