我正在努力确定使用AFINN 111的帖子的态度,可以找到它 here。每当帖子中提到其中一个单词时,就会选择并添加相应的值,以给出累积分数,这有助于确定帖子的性质,无论是+ ve还是-ve。
我有一个数组content = ["bad", "bad", "dog"]
。
我想得到这篇文章中使用的单词的总分。所以,我发起了一个数据库查询。
score = Sentiment.where(word: content).pluck(:value).inject(:+)
我得到的结果是-3。 “坏”这个词的对应分数为-3。由于“坏”这个词重复了两次,我希望得分为-6。
我尝试在rails控制台中触发它以检查返回的对象数。
Sentiment.where(:id => [1,1])
只返回一个对象...是否有任何选项可以返回重复值?
一个相当简单的解决方案是遍历数组。
score = 0
content.each do |word|
score += Sentiment.where(word: word).pluck(:value).first
end
但是这将涉及触发多个查询,而不是通过单个查询完成工作......有没有其他方法可以实现这一目标?
答案 0 :(得分:1)
一个查询的另一个解决方案:
content = ['bad', 'bad', 'dog']
sentiments = Sentiment.where(word: content).group_by(&:word)
score = 0
content.each do |word|
score += sentiments[word].score if sentiments[word]
end
score #=> -6