我正在使用tm包在R中进行文本情感分析。我从路透社那里删了新闻文章,并根据他们的约会给他们一个变量名。我添加了a,b,c等来表示每天多篇文章,如下所示:
art170411a
art170411b
art170411c
art170410a
...
......
然后我运行标准的正面/负面条款分析,它给出了每篇文章的情绪评分。我的问题是:我如何平均这些分数,以便每天获得情绪评分?
我有一个包含3年以上2000多篇文章的VCorpus。每篇文章都有一个日期戳。为了匹配正面/负面的术语,我将我的语料库转换为一个列表,然后是一包这样的单词:
$
我有两种格式的最终得分:
corp_list <- lapply(corp, FUN = paste, collapse=" ")
corp_bag <- str_split(corp_list, pattern = "\\s+")
所以我的问题是:我如何将多个情绪分数平均为一天的分数?
答案 0 :(得分:0)
我用可重复的数据重新编写了我的答案,一旦你对数据进行了排序,这应该可以正常工作。
library(tm)
reut21578 <- system.file("texts", "crude", package = "tm")
corp <- VCorpus(DirSource(reut21578),readerControl = list(reader = readReut21578XMLasPlain))
timestamps <- meta(reuters,"datetimestamp")
days <- sapply(timestamps,strftime,format="%Y-%m-%d")
pos <- c("good","excellent","positive","effective")
neg <- c("bad","terrible","negative")
corp_list <- lapply(corp, FUN = paste, collapse=" ")
daily_bows <- aggregate(corp_list ~ days,data.frame(corp_list = unlist(corp_list),days = days),FUN=paste,collapse = " ")
corp_bag <- str_split(daily_bows$corp_list, pattern = "\\s+")
score_string <- function(x){
sum(!is.na(match(x, pos))) - sum(!is.na(match(x, neg)))
}
daily_bows$scores <- sapply(corp_bag,score_string)
print(daily_bows[,c("days","scores")])
# days scores
# 1 1987-02-26 3
# 2 1987-03-01 1
# 3 1987-03-02 1