Рубрики
Без рубрики

Соскабливание данных Twitter с помощью Python для задач NLP

“Мы верим в Бога. Все остальные должны принести данные. “-W. Edwards Deming, если вы начинаете с инкорда … Tagged с помощью Python, Machine Learning, Data Science, NLP.

“Мы верим в Бога. Все остальные должны принести данные. “-У. Эдвардс Деминг

Если вы начинаете в невероятном поле NLP, вы захотите испачкать руки с помощью реальных текстовых данных, которые вы можете использовать, чтобы играть с концепциями, которые вы узнали. Twitter является отличным источником таких данных. В этом посте я представлю скребок, который вы можете использовать, чтобы очистить твиты тем, которые вас интересуют, и получить все занудное, как только вы получите свой набор данных. Я использовал эту удивительную библиотеку, которую вы можете найти здесь . Я расскажу о том, как установить и использовать эту библиотеку, а также предложу некоторые методы, чтобы сделать весь процесс быстрее, используя параллелизацию. Полный ноутбук, содержащий код, можно найти здесь

Монтаж

Библиотека может быть установлена с помощью PIP3 с помощью следующей команды

pip3 install twitter_scraper

Создание списка ключевых слов

Следующая задача – создать список ключевых слов, которые вы хотите использовать для соскоба Twitter.

# List of hashtags that we're interested in
keywords = ['machinelearning', 'ML', 'deeplearning', 
            '#artificialintelligence', '#NLP', 'computervision', 'AI', 
            'tensorflow', 'pytorch', "sklearn", "pandas", "plotly", 
            "spacy", "fastai", 'datascience', 'dataanalysis']

Соскабливание твитов за одно ключевое слово

Прежде чем мы запустим нашу программу, чтобы извлечь все ключевые слова, мы запустим нашу программу одним ключевым словом и распечатаем поля, которые мы можем извлечь из объекта. В приведенном ниже коде я показал, как итерация над возвращенным объектом и распечатать поля, которые вы хотите извлечь. Вы можете видеть, что у нас есть следующие поля, которые мы извлекаем

  • Твит идентификатор
  • Это ретвит или нет
  • Время твита
  • Текст твита
  • Ответы на твит
  • Всего ретвитов
  • Любит твит
  • Записи в твиттере
# Lets run one iteration to understand how to implement this library
tweets = get_tweets("#machinelearning", pages = 5)
tweets_df = pd.DataFrame()

# Lets print the keys and values obtained
for tweet in tweets:
  print('Keys:', list(tweet.keys()), '\n')
  break

# Running the code for one keyword and extracting the relevant data
for tweet in tweets:
  _ = pd.DataFrame({'text' : [tweet['text']],
                    'isRetweet' : tweet['isRetweet'],
                    'replies' : tweet['replies'],
                    'retweets' : tweet['retweets'],
                    'likes' : tweet['likes']
                    })
  tweets_df = tweets_df.append(_, ignore_index = True)
tweets_df.head()

Запуск кода последовательно для всех ключевых слов

Теперь, когда мы решили, какие данные мы хотим хранить в нашем объекте, мы запустим нашу программу последовательно, чтобы получить твиты тем, которые нас интересуют. Мы сделаем это с помощью нашего знакомого для цикла, чтобы пройти каждое ключевое слово один за другим и сохранить успешные результаты.

# We'll measure the time it takes to complete this process sequentially
%%time
all_tweets_df = pd.DataFrame()
for word in tqdm(keywords):
  tweets = get_tweets(word, pages = 100)
  try:
    for tweet in tweets:    
      _ = pd.DataFrame({'hashtag' : word, 
                        'text' : [tweet['text']],
                        'isRetweet' : tweet['isRetweet'],
                        'replies' : tweet['replies'],
                        'retweets' : tweet['retweets'],
                        'likes' : tweet['likes']
                      })
      all_tweets_df = all_tweets_df.append(_, ignore_index = True)
  except Exception as e: 
    print(word, ':', e)
    continue

Запуск кода параллельно

Из Документация , Multiprocessing – это пакет, который поддерживает процессы нереста с использованием API, аналогичного потоковому модулю. Многопроцессорный пакет предлагает как локальную, так и удаленную параллелизму, эффективно складывая глобальную блокировку интерпретатора, используя подпроцессы вместо потоков. Благодаря этому многопроцестрирующий модуль позволяет программисту полностью использовать несколько процессоров на данной машине.

Во -первых, мы будем реализовать функцию, чтобы очистить данные.

# We'll create a function to fetch the tweets and store it for us
def fetch_tweets(word):
  tweet_df = pd.DataFrame()
  tweets = get_tweets(word, pages=100)
  try:
    for tweet in tweets:    
      _ = pd.DataFrame({'hashtag' : word, 
                        'text' : [tweet['text']],
                        'isRetweet' : tweet['isRetweet'],
                        'replies' : tweet['replies'],
                        'retweets' : tweet['retweets'],
                        'likes' : tweet['likes']
                      })
      tweet_df = tweet_df.append(_, ignore_index = True)
  except Exception as e: 
    print(word, ':', e)
  return tweet_df

Далее мы создадим подпроцессы для запуска нашего кода параллельно.

# We'll run this in parallel with 4 subprocesses to compare the times
%%time
with Pool(4) as p:
    records = p.map(fetch_tweets, keywords)

Вывод

Как вы можете видеть, мы сократили время нашего процесса почти до 1/4 -го последовательного выполнения. Вы можете использовать этот метод для аналогичных задач и сделать свой код Python намного быстрее. Удачи с царапином!

Оригинал: “https://dev.to/anshaj/scraping-twitter-data-using-python-for-nlp-tasks-2je7”