我希望在一个单词列表与其他列表匹配时加权,但我不明白该怎么做。 这是一个例子:
require("stringr")
sample = c("You're awesome and I love you",
"I hate and hate and hate. So angry. Die!")
word.neg = c("hate","angry.")
word.neg.coef =c(-20,-4)
word.list = str_split(sample, '\\s+')
sapply(word.list,function(x) match(x,word.neg))
test <- lapply(word.list, function(x) sum(!is.na(match(x,neg.words))) )
test2 <-unlist(test)
data.frame(sample,test2)
正如你所看到的,在我做了一个真值之后,匹配返回了单词的位置。
但我想要做的是施加一个重量,这意味着每当它看到仇恨它应用-20并且每次看到生气。适用-4 所以最后我想要这样的东西
data.frame(sample,score=c(0,-24))
换句话说,使用单词列表查找句子并应用系数的最佳方法是什么。 我的另一个问题也是要知道是否有某些词语而不是位置:
sapply(word.list,function(x) match(x,word.neg))
这个
[[2]] [1] NA讨厌NA讨厌NA NA NA愤怒。 NA
而不是:
[[2]]
[1] NA 1 NA 1 NA NA NA 2 NA
谢谢
答案 0 :(得分:2)
sapply(word.list,function(x) word.neg[match(x,word.neg)])
#[[1]]
#[1] NA NA NA NA NA NA
#[[2]]
#[1] NA "hate" NA "hate" NA NA NA "angry."
#[9] NA
sapply(word.list,function(x) (as.numeric((word.neg.coef[match(x,word.neg)]))))
#[[1]]
#[1] NA NA NA NA NA NA
#[[2]]
#[1] NA -20 NA -20 NA NA NA -4 NA
sapply(word.list,function(x) sum(word.neg.coef[match(x,word.neg)], na.rm = T))
#[1] 0 -44
答案 1 :(得分:1)
这不是答案,但也许更多的是你想要的更少的努力。 qdap
包提供polarity
功能来进行情感分析。您还可以通过sentiment_frame
提供带权重的自定义词典:
library(qdap)
polarity(sample, id(sample))
## sample total.sentences total.words ave.polarity sd.polarity stan.mean.polarity
## 1 1 1 6 0.816 NA NA
## 2 2 1 9 -1.667 NA NA