如何解决使用R计算大数据集中每一行的情绪
我在计算相对较大的数据集(N = 36140)中每行的平均情感时遇到麻烦。
我的数据集包含Google Play商店中某个应用的评论数据(每一行代表一个评论),我想使用sentiment_by()
函数来计算每个评论的情绪。
问题在于该函数需要大量时间来计算它。
以下是.csv格式的指向我的数据集的链接:
https://drive.google.com/drive/folders/1JdMOGeN3AtfiEgXEu0rAP3XIe3Kc369O?usp=sharing
我尝试使用此代码:
library(sentimentr)
e_data = read.csv("15_06_2016-15_06_2020__sygic.csv",stringsAsFactors = FALSE)
sentiment=sentiment_by(e_data$review)
然后,我收到以下警告消息(超过10分钟后,我取消了该过程):
Warning message:
Each time `sentiment_by` is run it has to do sentence boundary disambiguation when a
raw `character` vector is passed to `text.var`. This may be costly of time and
memory. It is highly recommended that the user first runs the raw `character`
vector through the `get_sentences` function.
我还尝试将get_sentences()
函数与以下代码一起使用,但是sentiment_by()
函数仍需要大量时间来执行计算
e_sentences = e_data$review %>%
get_sentences()
e_sentiment = sentiment_by(e_sentences)
我有关于Google Play商店评论数据的数据集,并且在过去一个月中使用了sentiment_by()函数,并且在计算情感时它工作得非常快...从昨天开始,我才开始进行这种计算。
解决方法
一旦获得超过500条左右的个人评论,$subs = subscription::all();
$details = $subs->pluck('details')->toArray();
中使用的算法就好像是O(N ^ 2),这就是为什么当您大幅增加数据集的大小时突然花费更长的时间的原因。大概是以某种方式比较每对评论吗?
我浏览了帮助文件(sentiment
),它似乎并没有执行取决于对评论的任何操作,所以有点奇怪。
?sentiment
有效地产生相同的输出,这意味着library(data.table)
reviews <- iconv(e_data$review,"") # I had a problem with UTF-8,you may not need this
x1 <- rbindlist(lapply(reviews[1:10],sentiment_by))
x1[,element_id:=.I]
x2 <- sentiment_by(reviews[1:10])
程序包中有一个错误,导致其不必要地变慢。
一种解决方案是批量评论。这将破坏sentimentr
中的“ by”功能,但是我认为您应该能够在发送之前(或之后似乎无关紧要)自行对它们进行分组。
sentiment_by
在我的计算机上花费约45秒的时间(对于更大的数据集,应为batch_sentiment_by <- function(reviews,batch_size = 200,...) {
review_batches <- split(reviews,ceiling(seq_along(reviews)/batch_size))
x <- rbindlist(lapply(review_batches,sentiment_by,...))
x[,element_id := .I]
x[]
}
batch_sentiment_by(reviews)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。