1

我正在使用 AFINN 111 确定帖子的态度,可以在 这里找到。每当帖子中提到其中一个词时,都会选择并添加它们的对应值,以给出累积分数,这有助于确定帖子的性质,无论是 +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

但这将涉及触发 n 个查询,而不是通过单个查询完成工作......还有其他方法可以实现这一点吗?

4

1 回答 1

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
于 2013-09-12T15:18:27.157 回答