我正在使用 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-04-12 16:43:01 IST”
[1]“2016-04-12 16:43:09 IST”
有人可以让我知道我做错了什么吗?
如何提高性能?
最佳答案
我是 qdap 的作者。 polarity
函数设计用于较小的数据集。随着角色转变,我开始处理更大的数据集。我需要快速且准确(这两件事彼此对立),并且从那时起开发了一个脱离包装sentimentr。该算法经过优化,比 qdap 的极性更快,更准确。
目前,您有5种基于字典(或基于训练有素的算法)的情感检测方法。每个都有其缺点(-)和优点(+),在某些情况下很有用。
CRAN上的
在下面的代码中,我从上面的前4个示例中显示了对样本数据的时间测试。
安装软件包并进行计时功能
我使用pacman是因为它允许读者只运行代码。尽管您可以替换为
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,如果它对有用,请为存储库加注星标。下面的可视化捕获了自述文件中的测试之一:
关于r - 使用qdap对评论进行情感分析的速度很慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36572677/