【发布时间】:2015-08-02 20:28:58
【问题描述】:
目前正在参加 MOOC 并尝试进行一些情绪分析,但在使用 R 代码时遇到了问题。
我有一个坏词列表和一个好词列表。例如我的坏话是 c("dent", "broken", "wear", "cracked") 等。
我的数据框中有一个描述列表,我想做的是计算列表中出现了多少我的坏词以及每一行出现了多少我的好词。
例如假设这是我的数据框
desc = c("this screen is cracked", "minor dents and scratches", "100% good", "in perfect condition")
id = c(1,2,3,4)
df = data.frame(id, desc)
bad.words = c("cracked", "scratches", "dents")
我想要的是创建一个总和列来计算每个坏词在描述中出现的频率
所以希望我的最终 df 看起来像
id desc sum
1 "this screen is cracked" 1
2 "minor dents and scratches" 2
3 "100% good" 0
4 "in perfect condition" 0
我目前拥有的是
df$sum <- grepl(paste( bad.words, collapse="|"), df$desc)
只有在出现单词时才会让我判断是真还是假
【问题讨论】:
-
sum(grepl(paste(bad.words, collapse="|"), description))?如果是这样,是的,尝试一下,但结果似乎不正确,因为所有列的值都相同
-
最终的目标是尝试使用正则表达式,这样crack也可以匹配cracked和/或cracks
-
试图让它更清楚一点,因为它仍然无法与 sapply 一起使用
-
可能是
colSums(sapply(df$desc, function(x) sapply(bad.words, function(y) sum(grepl(y,x)))))或sapply(strsplit(as.character(df$desc), ' '), function(x) sum(x %in% bad.words))
标签: r sentiment-analysis