1

ここにある AFINN 111 を使用して投稿の姿勢を判断する作業を行ってい ます。これらの単語の 1 つが投稿で言及されるたびに、対応する値が選択されて追加され、累積スコアが得られます。これは、投稿の性質 (+ve または -ve) を判断するのに役立ちます。

私は配列を持っていcontent = ["bad", "bad", "dog"]ます。この投稿で使用されている単語の合計スコアを取得したいと考えています。だから、私はdbクエリを起動します。

score = Sentiment.where(word: content).pluck(:value).inject(:+)

私が得る結果は-3です。「悪い」という単語の対応するスコアは -3 です。「悪い」という言葉が 2 回繰り返されるので、結果のスコアを -6 にしたいと考えています。

Railsコンソールでこれを起動して、返されるオブジェクトの数を確認してみました。

 Sentiment.where(:id => [1,1])

1つのオブジェクトのみを返します...重複した値を返すことを許可するオプションはありますか?

かなり単純な解決策の 1 つは、配列を反復処理することです。

score = 0
content.each do |word|
score += Sentiment.where(word: word).pluck(:value).first
end

しかし、これには、単一のクエリでジョブを終了するのではなく、n 個のクエリを実行する必要があります...これを達成する他の方法はありますか?

4

1 に答える 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 に答える