如何过滤提取的推文中的特定关键字?

How can filter for specific keywords in extracted tweets?

我有一个代码,可以从我的 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 为字符串中的单词提供 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])

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

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 中更具可读性(也更快)。