【问题标题】:How can filter for specific keywords in extracted tweets?如何过滤提取的推文中的特定关键字?
【发布时间】:2022-01-09 22:50:53
【问题描述】:

我有一个代码,它可以在 Twitter 上为我提供来自我的时间线的推文,并将它们保存到 CSV。如何让它只搜索和保存包含特定关键字 X 的推文?

代码如下:

access_token = config['twitter']['access_token']
access_token_secret = config['twitter']['access_token_secret']

auth = tweepy.OAuthHandler(api_key, api_key_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

public_tweets = api.home_timeline()
data = []

for tweet in public_tweets:
    data.append([tweet.created_at, tweet.user.screen_name, tweet.text])

【问题讨论】:

    标签: python twitter data-analysis


    【解决方案1】:

    Python 为字符串中的单词提供了 in 运算符,因此您不必使用正则表达式或比简单的 if 更复杂的东西,如下所示:

    query_string = "word" # your keyword
    
    for tweet in public_tweets:
        if query_string in tweet.text:
            data.append([tweet.created_at, tweet.user.screen_name, tweet.text])
    

    【讨论】:

    • 非常感谢!效果很好:)
    【解决方案2】:

    最简单的方法是检查if keyword in tweet.text,但您会得到误报(例如baseball 将匹配keyword='ball')。更好的方法可以使用正则表达式:

    import tweepy
    import configparser
    import pandas as pd
    import re
    
    config = configparser.ConfigParser()
    config.read('config.ini')
    api_key = config['twitter']['api_key']
    api_key_secret = config['twitter']['api_key_secret']
    access_token = config['twitter']['access_token']
    access_token_secret = config['twitter']['access_token_secret']
    
    auth = tweepy.OAuthHandler(api_key, api_key_secret)
    auth.set_access_token(access_token, access_token_secret)
    
    api = tweepy.API(auth)
    
    public_tweets = api.home_timeline()
    
    columns = ['Time', 'User', 'Tweet']
    
    keywords = ['foo', 'bar']
    regex = re.compile(r'\b(' + '|'.join(keywords) + r')\b')
    data = [[tweet.created_at, tweet.user.screen_name, tweet.text]
            for tweet in public_tweets
            if regex.search(tweet.text)]
        
    df = pd.DataFrame(data, columns=columns)
    df.to_csv('Tweets.csv')
    

    这里\b 指的是单词边界,| 用于分隔组中的单词。因此,如果它们不属于某个更大的单词,我们就会搜索 any 个关键字。 re.compile 仅用于加快速度,而不是为每次迭代重新编译它。与循环中的.append() 相比,列表理解在 IMO 中更具可读性(而且速度也更快)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      • 1970-01-01
      • 2014-06-25
      • 2019-08-08
      • 1970-01-01
      • 2017-10-14
      相关资源
      最近更新 更多