ker*_*lin 4 ruby twitter 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, Oranges, 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, Oranges, Pears, and Grapes."]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
365 次 |
| 最近记录: |