加速应用程序对100条推文进行情绪分析的最佳方法是什么?

时间:2015-05-24 17:37:29

标签: ruby-on-rails ruby

我正在创建一个应用程序,从Twitter的API中返回100条推文,然后对所有100条推文进行情绪分析。当用户键入感兴趣的查询并且浏览器向' / get_tweets'提出请求时,将调用以下方法。

def get_tweets
  tweets = $twitter.search(query_params, count: 100).attrs[:statuses]
  @tweets = []
  datumbox = Datumbox.create('2ef48d67598553804617c9862dfcaf8f')
  tweets.each do |t|
    tweet = Tweet.new
    tweet.twitter_id = t[:id_str]
    tweet.text = t[:text]
    tweet.user_id = t[:user][:id_str]
    tweet.name = t[:user][:name]
    tweet.screen_name = t[:user][:screen_name]
    tweet.location = t[:user][:location]
    tweet.profile_image_url = t[:user][:profile_image_url_https]
    tweet.tweet_created_at = t[:created_at]

    # Need to remove @ symbols to use datumbox API analysis
    sentiment_text = tweet.text.gsub(/@/,'')
    tweet.sentiment = datumbox.twitter_sentiment_analysis(text: sentiment_text)
    @tweets << tweet
  end
  render :index
end

问题是这非常慢。一切都是当用户输入他/她感兴趣的查询时,此方法执行101个API调用。

加快这一过程的最佳方法是什么?在构建需要制作大型应用程序的应用程序时,是否需要考虑设计方法? API调用次数?最后,我想以标签格式向用户显示推文,他们可以在正面,中性和负面推文之间切换。我是否应该考虑批量调用情绪分析API?

建议非常感谢!

1 个答案:

答案 0 :(得分:0)

可能的方法:

  1. 预先在后台处理推文,以便用户不会实时查询Twitter API,只查看预处理过的数据库。
  2. 使用AJAX以便不会完整地重新加载页面。您可以显示加载指示符,该指示符将向用户显示正在发生的事情。
  3. 不要同时收到100条推文。通过保持连接打开,一次一个地将它们发送给用户。您可以查看ActionController::Live,或者某种WebSockets实现。你的javascript会有一个事件处理程序,可以在每个已处理的推文到达时将它们放入你的UI中。