不同文档数量的情感分析
sentiment analysis with different number of documents
我正在尝试对报纸文章进行情绪分析并跟踪不同时间的情绪水平。为此,我基本上会在一天内识别所有相关新闻文章,将它们输入 polarity() 函数并获得所有文章的平均极性分数(更准确地说,是所有文章中所有句子的平均值)在那一天之内。
问题是,有些日子,与其他日子相比,文章会更多,我认为如果我们简单地跟踪每日平均极性分数,这可能会掩盖一些信息。例如,与仅从 3 篇文章生成的 0.1 分相比,30 篇新闻文章的 0.1 分应该具有更大的权重。果然,我获得的一些更极端的极性分数来自那些只有很少相关文章的日子。
有没有办法考虑到每天不同的文章数量?
library(qdap)
sentence = c("this is good","this is not good")
polarity(sentence)
我会警告说,有时用很少的话来表达强烈的观点可能最有冲击力。确保您所做的事情对您的数据和研究问题有意义。
一种方法是使用以下示例中的单词数(我更喜欢这里的第一种方法):
poldat2 <- with(mraja1spl, polarity(dialogue, list(sex, fam.aff, died)))
output <- scores(poldat2)
weight <- ((1 - (1/(1 + log(output[["total.words"]], base = exp(2))))) * 2) - 1
weight <- weigth/max(weight)
weight2 <- output[["total.words"]]/max(output[["total.words"]])
output[["weighted.polarity"]] <- output[["ave.polarity"]] * weight
output[["weighted.polarity2"]] <- output[["ave.polarity"]] * weight2
output[, -c(5:6)]
## sex&fam.aff&died total.sentences total.words ave.polarity weighted.polarity weighted.polarity2
## 1 f.cap.FALSE 158 1641 0.083 0.143583793 0.082504197
## 2 f.cap.TRUE 24 206 0.044 0.060969157 0.005564434
## 3 f.mont.TRUE 4 29 0.079 0.060996614 0.001397106
## 4 m.cap.FALSE 73 651 0.031 0.049163984 0.012191207
## 5 m.cap.TRUE 17 160 -0.176 -0.231357933 -0.017135804
## 6 m.escal.FALSE 9 170 -0.164 -0.218126656 -0.016977931
## 7 m.escal.TRUE 27 590 -0.067 -0.106080866 -0.024092720
## 8 m.mont.FALSE 70 868 -0.047 -0.078139272 -0.025099276
## 9 m.mont.TRUE 114 1175 -0.002 -0.003389105 -0.001433481
## 10 m.none.FALSE 7 71 0.066 0.072409049 0.002862997
## 11 none.none.FALSE 5 16 -0.300 -0.147087026 -0.002925046
我正在尝试对报纸文章进行情绪分析并跟踪不同时间的情绪水平。为此,我基本上会在一天内识别所有相关新闻文章,将它们输入 polarity() 函数并获得所有文章的平均极性分数(更准确地说,是所有文章中所有句子的平均值)在那一天之内。
问题是,有些日子,与其他日子相比,文章会更多,我认为如果我们简单地跟踪每日平均极性分数,这可能会掩盖一些信息。例如,与仅从 3 篇文章生成的 0.1 分相比,30 篇新闻文章的 0.1 分应该具有更大的权重。果然,我获得的一些更极端的极性分数来自那些只有很少相关文章的日子。
有没有办法考虑到每天不同的文章数量?
library(qdap)
sentence = c("this is good","this is not good")
polarity(sentence)
我会警告说,有时用很少的话来表达强烈的观点可能最有冲击力。确保您所做的事情对您的数据和研究问题有意义。
一种方法是使用以下示例中的单词数(我更喜欢这里的第一种方法):
poldat2 <- with(mraja1spl, polarity(dialogue, list(sex, fam.aff, died)))
output <- scores(poldat2)
weight <- ((1 - (1/(1 + log(output[["total.words"]], base = exp(2))))) * 2) - 1
weight <- weigth/max(weight)
weight2 <- output[["total.words"]]/max(output[["total.words"]])
output[["weighted.polarity"]] <- output[["ave.polarity"]] * weight
output[["weighted.polarity2"]] <- output[["ave.polarity"]] * weight2
output[, -c(5:6)]
## sex&fam.aff&died total.sentences total.words ave.polarity weighted.polarity weighted.polarity2
## 1 f.cap.FALSE 158 1641 0.083 0.143583793 0.082504197
## 2 f.cap.TRUE 24 206 0.044 0.060969157 0.005564434
## 3 f.mont.TRUE 4 29 0.079 0.060996614 0.001397106
## 4 m.cap.FALSE 73 651 0.031 0.049163984 0.012191207
## 5 m.cap.TRUE 17 160 -0.176 -0.231357933 -0.017135804
## 6 m.escal.FALSE 9 170 -0.164 -0.218126656 -0.016977931
## 7 m.escal.TRUE 27 590 -0.067 -0.106080866 -0.024092720
## 8 m.mont.FALSE 70 868 -0.047 -0.078139272 -0.025099276
## 9 m.mont.TRUE 114 1175 -0.002 -0.003389105 -0.001433481
## 10 m.none.FALSE 7 71 0.066 0.072409049 0.002862997
## 11 none.none.FALSE 5 16 -0.300 -0.147087026 -0.002925046