微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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."]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐