Tweepy筛选器中的逻辑运算符

13
我希望跟踪包含一组特定单词但不包含其他单词的推文。例如,如果我的筛选器是:"taco" AND ("chicken" OR "beef")。 它应该返回这些推文:
-I am eating a chicken taco.
-I am eating a beef taco.

它不应该返回这些推文:

-I am eating a taco.
-I am eating a pork taco.

这是我当前正在运行的代码:

from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import time
import json

# authentication data- get this info from twitter after you create your application
ckey = '...'                # consumer key, AKA API key
csecret = '...'             # consumer secret, AKA API secret
atoken = '...'   # access token
asecret = '...'     # access secret

# define listener class
class listener(StreamListener): 

    def on_data(self, data):
        try:
            print data   # write the whole tweet to terminal
            return True
        except BaseException, e:
            print 'failed on data, ', str(e)  # if there is an error, show what it is
            time.sleep(5)  # one error could be that you're rate-limited; this will cause the script to pause for 5 seconds

    def on_error(self, status):
        print status

# authenticate yourself
auth = OAuthHandler(ckey, csecret)
auth.set_access_token(atoken, asecret)
twitterStream = Stream(auth, listener())
twitterStream.filter(track=["taco"])  # track what you want to search for!

我在最后一行代码中遇到了困难;如果我使用以下代码:

twitterStream.filter(track=["taco","chicken","beef"])

它将返回包含这三个单词中任意一个的所有推文。我尝试过其他一些方法,例如:

 twitterStream.filter(track=(["taco"&&("chicken","beef")])

返回语法错误。

我对Python和Tweepy都比较新。这个链接和这个链接似乎是类似的问题,但它们与同时跟踪多个术语相关,而不是跟踪包含一个术语的推文子集。我在tweepy文档中没有找到任何内容。

我知道另一个选项是跟踪所有包含“taco”的推文,然后通过“chicken”或“beef”进行过滤,并将其存储到我的数据库中,但我担心如果我在Python内部进行通用搜索然后进行过滤,就会遇到1%的流速限制问题,因此我更喜欢从Twitter中首先仅流传我想要的术语。

谢谢提前-

山姆

1个回答

15

Twitter不允许您在关键词匹配方面非常精确。但是,跟踪参数文档指出,关键词中的空格相当于逻辑ANDS。您指定的所有术语都会进行OR运算。

因此,要实现您的"taco" AND ("chicken" OR "beef")示例,您可以尝试使用参数[taco chickentaco beef]。这将匹配包含单词tacochickentacobeef的推文。但是,这并不是完美的解决方案,因为包含tacochickenbeef的推文也将被匹配。


感谢@Aaron-,这将很好地解决问题。顺便问一下,你知道是否有一种方法可以返回所有以字符序列开头的单词吗?例如,在R中,如果我想返回“plant”、“planting”和“planted”,我将能够查询“plant+”。 - Sam Zipper
1
抱歉,我不这么认为。就像我在回答中所说的那样,API 在过滤方面的粒度相当粗糙。 - Aaron Hill
例如,要筛选包含单词“hello”和“bye”的推文(逻辑上的OR),我们可以使用track=['hello,bye']或使用track=['hello', 'bye'],或者可能没有区别?@AaronHill - Soheil Pourbafrani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接