使用 qdap 对评论评论的情感分析很慢

Sentimental Analysis of review comments using qdap is slow

我正在使用 qdap 包来确定特定应用程序的每条评论评论的情绪。我从 CSV 文件中读取评论意见并将其传递给 qdap 的极性功能。一切正常,我得到了所有评论的极性,但问题是计算所有句子的极性需要 7-8 秒(CSV 文件中的句子总数为 779)。我在下面粘贴我的代码。

  temp_csv <- filePath()
  attach(temp_csv)
  text_data <- temp_csv[,c('Content')]
  print(Sys.time())
  polterms <- list(neg=c('wtf'))
  POLKEY <- sentiment_frame(positives=c(positive.words),negatives=c(polterms[[1]],negative.words))     
  polarity <- polarity(sentences, polarity.frame = POLKEY) 
  print(Sys.time())

所用时间如下:

[1]“2016 年 4 月 12 日 16:43:01 IST”

[1]“2016 年 4 月 12 日 16:43:09 IST”

如果我做错了什么,有人可以告诉我吗? 我怎样才能提高性能?

我是 qdap 的作者。 polarity 函数专为更小的数据集而设计。随着我角色的转变,我开始处理更大的数据集。我需要快速和准确(这两个东西是相互对立的)并且已经开发了一个分离包 sentimentr。该算法经过优化,比 qdap 的极性更快更准确。

就目前而言,您有 5 个基于字典(或基于训练算法)的情绪检测方法。每个都有其缺点 (-) 和优点 (+),并且在某些情况下很有用。

  1. qdap +在 CRAN 上; -慢
  2. syuzhet +在 CRAN 上; +快速; +伟大的阴谋; - 非文学用途不太准确
  3. sentimentr +快速; +更高的准确性; -GitHub 仅
  4. stansent (stanford port) +最准确; -较慢
  5. tm.plugin.sentiment - 在 CRAN 上存档; -我无法让它轻松工作

我在下面的代码中显示了对上面的前 4 个选择的样本数据的时间测试。

安装包并制作计时功能

我使用 pacman,因为它允许 reader 仅 运行 代码;尽管您可以替换为 install.packages & library 调用。

if (!require("pacman")) install.packages("pacman")
pacman::p_load(qdap, syuzhet, dplyr)
pacman::p_load_current_gh(c("trinker/stansent", "trinker/sentimentr"))

pres_debates2012 #nrow = 2912

tic <- function (pos = 1, envir = as.environment(pos)){
    assign(".tic", Sys.time(), pos = pos, envir = envir)
    Sys.time()
}

toc <- function (pos = 1, envir = as.environment(pos)) {
    difftime(Sys.time(), get(".tic", , pos = pos, envir = envir))
}

id <- 1:2912

时间

## qdap
tic()
qdap_sent <- pres_debates2012 %>%
    with(qdap::polarity(dialogue, id))
toc() # Time difference of 18.14443 secs


## sentimentr
tic()
sentimentr_sent <- pres_debates2012 %>%
    with(sentiment(dialogue, id))
toc() # Time difference of 1.705685 secs


## syuzhet
tic()
syuzhet_sent <- pres_debates2012 %>%
    with(get_sentiment(dialogue, method="bing"))
toc() # Time difference of 1.183647 secs


## stanford
tic()
stanford_sent <- pres_debates2012 %>%
    with(sentiment_stanford(dialogue))
toc() # Time difference of 6.724482 mins

有关时间和准确性的更多信息,请参阅我的sentimentr README.md,如果有用,请为回购加注星标。下面的可视化捕捉了自述文件中的一项测试: