我有N个跟踪的不同关键字(为简单起见,让N = 3)。所以在GET状态/过滤器中,我将在“track”参数中给出3个关键字。
现在我将收到的推文可以来自我提到的3个关键词中的任何一个。 问题是我想解决哪个推文对应哪个关键字。 即推文和关键字之间的映射(在“跟踪”参数中提到)。
显然,如果不对收到的推文进行任何处理,就无法做到这一点。
所以我想知道进行这种处理的最佳方法是什么? 在推文文本中搜索关键字?不区分大小写的情况怎么样?当同一个关键词中存在多个单词时,例如:“Katrina Kaif”?
我目前正在尝试制定一些正则表达式......
我在想最好的方法是使用相同的逻辑(正则表达式等),就像最初使用的状态/过滤器API一样。如何知道Twitter API状态/过滤器本身使用什么逻辑来匹配推文到关键字?
么?帮助
P.S。:我正在使用Python,Tweepy,Regex,MongoDb / Apache S4(用于分布式计算)
答案 0 :(得分:2)
我想到的第一件事就是为每个关键字创建一个单独的流,并在一个单独的线程中启动它,如下所示:
from threading import Thread
import tweepy
class StreamListener(tweepy.StreamListener):
def __init__(self, keyword, api=None):
super(StreamListener, self).__init__(api)
self.keyword = keyword
def on_status(self, tweet):
print 'Ran on_status'
def on_error(self, status_code):
print 'Error: ' + repr(status_code)
return False
def on_data(self, data):
print self.keyword, data
print 'Ok, this is actually running'
def start_stream(auth, track):
tweepy.Stream(auth=auth, listener=StreamListener(track)).filter(track=[track])
auth = tweepy.OAuthHandler(<consumer_key>, <consumer_secret>)
auth.set_access_token(<key>, <secret>)
track = ['obama', 'cats', 'python']
for item in track:
thread = Thread(target=start_stream, args=(auth, item))
thread.start()
如果您仍希望在单个流中按关键字区分推文,请参阅some info有关twitter如何使用track
请求参数的信息。有一些边缘情况可能会导致问题。
希望有所帮助。
答案 1 :(得分:0)
返回任何/所有&#39;触发的&#39;跟踪条款
我有一个非常相关的问题,我通过列表理解解决了它。也就是说,我有一个原始推文列表,我的跟踪过滤条件是&#39; listoftermstofind&#39;和&#39; rawtweetlist&#39;。然后,您可以运行以下命令返回每条推文中找到的任何和所有曲目术语的列表列表。
j=[x.upper() for x in listoftermstofind] #your track filters, but making case insensitive
ListOfTweets=[x.upper() for x in rawtweetlist] #converting case to upper for all tweets
triggers=list(map(lambda y: list(filter(lambda x: x in y, j)), ListOfTweets))
这很有效,因为API中的跟踪过滤器是特定的(直到字符级别),而不是任何自然语言搜索处理或类似的东西。我建议您详细阅读有关过滤的API文档,它会很好地完成使用:https://dev.twitter.com/streaming/overview/request-parameters