Tweepy: собирайте твиты, содержащие не менее 1 слова в каждом из двух списков поисковых слов.

#python #twitter #tweepy

#питон #Twitter #tweepy

Вопрос:

Я использую Tweepy и его курсор для сбора твитов с определенными условиями поиска. Моя цель — иметь два списка слов по двум разным темам, например, список 1 со словами о любви и список 2 со словами о здоровье. Затем я хочу выполнить поиск твитов, каждый из которых содержит хотя бы одно слово из списка 1 и хотя бы одно слово из списка 2. Моя проблема в том, что я даже не могу запустить поиск, который использует только один список.

Итак, у меня есть следующий код:

 # extracting words from a csv-file
file_loc1 = "search_words/love.xlsx"
love_words = pd.read_excel(file_loc1, index_col=None, na_values=['NA'], usecols = "A", skiprows=11)
love_words = str(love_words['love'].values)

# converting the list to readable search terms (there are probably more elegant ways...)
love_words = love_words.lower()
love_words = love_words.replace("r","")
love_words = love_words.replace("n","")
love_words = love_words.replace("' '", " OR ")
love_words = love_words.replace("[", "")
love_words = love_words.replace("]", "")
love_words = love_words.replace("'", "")

search_words = love_words   " -filter:retweets"
date_since = "2020-01-01"

tweets = tw.Cursor(api.search,
              q=search_words,
              lang="en",
              since=date_since).items(5000)

tweet_text = [tweet.text for tweet in tweets]
 

Итак, я извлекаю слова из файла csv и помещаю их все в строку, которая в итоге будет выглядеть так : word1 OR word2 OR word3 -filter:retweets .
Если это всего два или три слова, кажется, это работает, и я получаю много твитов. Но если я использую больше терминов, я не получаю никаких твитов. Похоже, что, возможно, оператор OR работает не так, как я думаю… И в конце я хотел бы, чтобы поиск был похож (love1 OR love2 OR love3 OR ...) AND (health1 OR health2 OR ...) , чтобы я получал твиты, содержащие одно или несколько слов из каждого из двух списков.

Я надеюсь, что это объяснение имеет смысл. Есть предложения? Спасибо!

Ответ №1:

Я реализовал Tweepy и обнаружил, что оператора OR недостаточно. Я выполняю отдельный поиск по каждому ключевому слову и собираю все твиты:

 tweet_list = []
for word in keyword_list:
    tweets = api.search(word)
    tweet_list.append(tweets)
 

Затем, после того, как у меня есть все мои твиты, я фильтрую, содержат ли они интересующие меня слова.

Это неэффективно и вряд ли будет лучшим решением. Но это работает для меня.