使用R中的情绪分析得分

时间:2014-08-07 13:39:02

标签: r performance sentiment-analysis

通常我有兴趣让流程更快地运行。

我正在使用R对大约8000个文档的德语语料库进行情感分析。我不是只计算正面和负面的单词,而是将-1和-1之间的值分配给大约3000个不同的术语。由于我没有使用词干功能,并且仍然想要获得所有变形的德语语法,我的单词列表会变得更长。

为了匹配我现在正在使用此代码:

score.sum <- rep(0, length(texts))
for (i in 1:length(texts)){
for (j in 1:length(sent.words)){
if(sent.words[j] %in% strsplit(texts[i], split=" ")[[1]] {
score.sum[i] <- score.sum[i] + sent.words_score[j]
}}}

作为一个小例子,可以使用:

texts <- c("I like ice cream. It is great","I hate flying because it makes me sick","If I get bored I do something fun")

sent.words <- c("like","great","hate","sick","bored","fun","joy")
sent.words_score <- c(0.3,0.7,-0.5,-0.4,-0.4,0.3,0.5)

也许计算花费的时间比你想要的还长。在我的8000文件的上下文中,我需要大约6个小时。那么你知道一种避免dubble if-loop并更快地计算的方法吗?

先谢谢了 Mairuu

2 个答案:

答案 0 :(得分:2)

strplit已向量化,因此您可以执行一次。

此处无需使用for,请使用sapply以避免初始化和副作用。

sapply(strsplit(texts, split=" "),
      function(x)sum(sent.words_score[sent.words  %in% x]))

答案 1 :(得分:0)

我正在用c ++编写情感分析器。我使用TRIES数据结构来存储所有单词。反应非常快。每个单词的成功是O(n),其中n是字符串的长度,而失败明显小于该字符串。只是要考虑提高性能。