ruby-on-rails – 推文排除

让我们假设我有一个用户创建主题并在Fruit上编写主题的网站.

为了让用户了解整个网络上的所有Fruit对话,我收集与特定主题相关的推文,并根据推文的内容创建线程.

显然,推文与主题相关非常重要.假设用户创建了一个名为Apples和Oranges的主题.我拉所有包含关键词Apples和/或Oranges的推文.

我遇到的问题是,一些Twitter用户编写了一条推文,其中包含关键词Apples,Oranges,Pears等,并将其收集并作为线程发布到Apples和Oranges讨论主题.这让用户生气!

所以我需要的是一种过滤任何包含苹果和/或橘子以外的水果单词的推文的方法.

例如,如果Twitter用户写“我喜欢苹果,橘子,梨和葡萄”,那么不应该包含该推文.

现在,您只能使Twitter搜索查询如此复杂.因此,在收集推文后,必须在Ruby中执行排除逻辑.

以编程方式,你将如何解决这个问题?

解决方法

确定与主题名称相关的单词.梨,葡萄等您可以排除使用这些相关单词的推文.

一种方法是使用Google Sets.

注意:我处于不完全宽容我自己的解决方案的不幸的位置,因为这个服务没有官方API(这将是真棒!).虽然如果您打算使用此策略,我建议存储Google Set结果.

require 'google_set'

twitter_search_terms = ['apples','oranges']
# Mocked twitter search method
tweets = search_twitter(twitter_search_terms)
# returns ["Both apples and oranges are great!","I love Apples,Pears,and Grapes."]

related_words = GoogleSet.for(*twitter_search_terms)
# returns ["apples","oranges","bananas","peaches","pears","grapes","strawberries","plums",...]
related_words = (related_words - twitter_search_terms).each(&:downcase)

good_tweets = []
bad_tweets = []
tweets.each do |tweet|
  tweet_words = tweet.downcase.split
  # Remove any non-word characters
  tweet_words = tweet_words.map { |word| word.gsub(/\W+/,'') }.compact

  if (tweet_words - related_words).size == tweet_words.size
    good_tweets << tweet
  else
    bad_tweets << tweet
  end
end

p good_tweets
# returns ["Both apples and oranges are great!"]

p bad_tweets
# returns ["I love Apples,and Grapes."]

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...