【问题标题】:Filter Twitter feeds only by language仅按语言过滤 Twitter 提要
【发布时间】:2015-01-09 12:28:13
【问题描述】:

我正在使用 Tweepy API 来提取 Twitter 提要。我只想提取特定语言的所有 Twitter 提要。语言过滤器仅在提供track 过滤器时才有效。以下代码返回406错误:

l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
stream = Stream(auth, l)
stream.filter(languages=["en"])

如何使用 Tweepy 从特定语言中提取所有推文?

【问题讨论】:

  • 这个问题你解决了吗。我还想提取特定语言的推文,比如日语。

标签: python twitter nlp tweepy twitter-streaming-api


【解决方案1】:

您不能(没有特殊访问权限)。流式传输所有推文(未过滤)需要连接到the firehose,这仅在特定用例中由 Twitter 授予。老实说,firehose 并不是真正需要的——正确使用track 可以获得比你知道的更多的推文。

尝试使用这样的东西:

stream.filter(languages=["en"], track=["a", "the", "i", "you", "u"]) # etc

用这样的词过滤会得到很多很多推文。如果您想要最常用词的真实数据,请查看来自时代周刊的这篇文章:The 500 Most Frequently Used Words on Twitter。您可以使用up to 400 关键字,但这可能会在给定的时间间隔内接近 1% 的推文限制。如果您的 track 参数在给定时间匹配 60% 的所有推文,您仍然只会得到 1%(这是很多推文)。

【讨论】:

  • 谢谢!!我在输入stream.filter(lang=["en"], track=["something"])
【解决方案2】:

Cursor() 中尝试lang='en' 参数,例如

tweepy.Cursor(.. lang='en')

【讨论】:

    【解决方案3】:

    除了直接获取过滤后的推文外,您还可以通过以下方式在获取所有不同语言的推文后对其进行过滤:

    tweets = api.search("python")
    for tweet in tweets:
       if tweet.lang == "en":
          print(tweet.text)
          #Do the stuff here
    

    希望对你有帮助。

    【讨论】:

      【解决方案4】:

      你可以在github代码https://github.com/tweepy/tweepy/blob/master/tweepy/streaming.py看到track方法的参数

      将语言放入 ISO_639-1_codes 数组中。

      他们是:

      filter(self, follow=None, track=None, is_async=False, locations=None,
                     stall_warnings=False, languages=None, encoding='utf8', filter_level=None):
      

      所以要按语言进行跟踪:

      class Listener(StreamListener):
      
          def on_data(self, data):
              j = json.loads(data)
              t = {
                'screenName' : j['user']['screen_name'],
                'text:': j['text']
                }
              print(t)
              return(True)
      
          def on_status(self, status):
              print(status.text)
      
      
      auth = OAuthHandler(consumer_key, consumer_secret)
      auth.set_access_token(access_token, access_token_secret)
      
      stream = Stream(auth=auth, listener=Listener(),wait_on_rate_limit=True,wait_on_rate_limit_notify=True)
      
      stream.filter(track=['Trump'],languages=["en","fr","es"])
      

      【讨论】:

        【解决方案5】:

        Tweepy search 允许获取特定语言的推文。您可以使用 ISO 639-1 代码来指定语言参数的值。 以下代码将获取具有指定语言全文的推文(以下示例为英语)

            auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
            auth.set_access_token(access_token, access_token_secret)
            api = tweepy.API(auth)
            tweets = api.search(q = keywordtosearch, lang = 'en', count = 100, truncated = False, tweet_mode = 'extended')
            for tweet in tweets:
                print(tweet.full_text)
                #add your code
        

        【讨论】:

        • 试过你的代码,得到AttributeError: 'API' object has no attribute 'search'
        • 用 search_tweets 替换搜索
        【解决方案6】:

        这对我有用。

        auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
        auth.set_access_token(access_token, access_token_secret)
        api = tweepy.API(auth)
        a=input("Enter Tag: ")
        tweets = api.search(a, count=200)
        a=[]
        for tweet in tweets:
            if tweet.lang == "en":
                a.append(tweet.text)
        

        【讨论】:

          【解决方案7】:

          借助 GetOldTweets3 (https://pypi.org/project/GetOldTweets3/),您可以通过筛选几个条件来下载推文(甚至是旧推文),如下所示:

          tweetCriteria = got.manager.TweetCriteria().setQuerySearch('Coronavirus')\
                                                 .setSince("2020-02-15")\
                                                 .setUntil("2020-03-29")\
                                                 .setMaxTweets(5)\
                                                 .setNear('India')\
                                                 .setLang('en')
          tweets = got.manager.TweetManager.getTweets(tweetCriteria)
          for tweet in tweets:
              print(tweet.text)
              print(tweet.date)
              print(tweet.geo)
              print(tweet.id)
              print(tweet.permalink)
              print(tweet.username)
              print(tweet.retweets)
              print(tweet.favorites)
              print(tweet.mentions)
              print(tweet.hashtags)
              print('*'*50)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-01-28
            • 2010-10-11
            • 2014-03-08
            • 1970-01-01
            • 2015-09-09
            • 1970-01-01
            • 1970-01-01
            • 2023-04-03
            相关资源
            最近更新 更多