单词匹配计算

时间:2014-10-12 14:35:24

标签: r

我希望在一个单词列表与其他列表匹配时加权,但我不明白该怎么做。 这是一个例子:

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

谢谢

2 个答案:

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