ruby on rails -什么是加快应用程序对100条推文进行情感分析的最佳方法?



我正在创建一个应用程序,从Twitter的API返回100条tweet,然后对所有100条tweet进行情感分析。当用户输入感兴趣的查询并且浏览器向'/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调用的应用程序时,是否需要考虑一种设计方法?最后,我想以选项卡格式向用户显示tweet,他们可以在积极,中性和消极tweet之间切换。我是否应该考虑批量调用情感分析API ?

建议非常感谢!

可能的方法:

  1. 预先在后台处理tweet,这样用户就不会实时查询Twitter API,而只是查询您的预处理数据库。
  2. 使用AJAX,这样页面就不会全部重新加载。你可以显示一个加载指示器,它将显示正在发生的事情。
  3. 不要一次收到100条推文。每次执行一个,并通过保持连接打开,在处理每个请求时将其发送给用户。你可以看看ActionController::Live,或者一些WebSockets实现。你的javascript将有一个事件处理程序,当每条处理过的tweet到达时将其放入你的UI。

最新更新