【问题标题】:Using scores in sentiment analysis with R在 R 中使用情绪分析中的分数
【发布时间】:2014-08-07 13:39:01
【问题描述】:

一般来说,我有兴趣让流程运行得更快。

我正在使用 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 个小时。那么你知道避免双重 if 循环并加快计算速度的方法吗?

已经提前致谢 迈鲁乌

【问题讨论】:

    标签: r performance sentiment-analysis


    【解决方案1】:

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

    这里也不需要使用for,使用sapply来避免初始化和副作用。

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

    【讨论】:

    • 我真的很想,但显然需要 15 个代表才能这样做
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 2015-10-31
      • 2017-11-06
      • 2013-02-02
      相关资源
      最近更新 更多