如何过滤提取的推文中的特定关键字?
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 中更具可读性(也更快)。
我有一个代码,可以从我的 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 中更具可读性(也更快)。