如何使用多个文本平均一天的情绪分数?

时间:2017-06-08 12:26:50

标签: r sentiment-analysis tm

我正在使用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+")

所以我的问题是:我如何将多个情绪分数平均为一天的分数?

1 个答案:

答案 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