私は自分のコードが一時間以上Rの正規表現検索を高速化するには?
を実行している(?<!(no|not|n`t|n’t|neither|never|no one|nobody|none|nor|nothing|nowhere|hardly|barely|scarcely|unlikely|seldom|rarely))[ ][aA][bB][aA][nN][dD][oO][nN]
のような500正規表現否定表現と1500のシンボル とDF1について1000以上のテキストの、それぞれにコード
matrix<-outer(df$text, df1$regexp, str_count)
DFを持っています
私のコードをどのように高速化できますか?
例:
library(stringr)
df<-data.frame(names=c("text1","text2"), text=c("one two three four five","six seven eight nine ten"))
regex<-data.frame(names=c("1","2"), regexp=c("(?<!(no|not))[ ][oO][nN][eE]","(?<!(no|not))[ ][fF][iI][vV][eE]"))
matrix<-outer(df$text, as.character(regex$regexp), str_count)
私は変更をした
を
library(stringr)
library(parallel)
no_cores <- detectCores() - 1
df<-data.frame(names=c("text1","text2"), text=c("one two three four five","six seven eight nine ten"))
regex<-data.frame(names=c("1","2"), regexp=c("(?<!(no|not))[ ][oO][nN][eE]","(?<!(no|not))[ ][fF][iI][vV][eE]"))
cl <- makeCluster(no_cores)
matrix<-parSapply(cl,regex$regexp, str_count, string=df$text)
stopCluster(cl)
と並行して実行コードを試してみましたが、今、私の4コアのPC上でより速く約40%をコーディングしましたWiktorのようなすべての正規表現は、古い正規表現を使用した並列コードよりも約25%速いコードを実行することをお勧めします。
あなたはDFとDF1のサンプルを提供することができます。 – xxfelixxx
http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – xxfelixxx
「(?<!n(?:[\ ''] t | e(?: iter | ver)| o(?:t | one | body | ne | r | thing | where){0,1})|殆ど|ほとんどない|ほとんどない| [aA] [nN] [dD] [oO] [nN] '。 –