LoginSignup
2
3

More than 5 years have passed since last update.

Python で StreamingAPI を使って Twitter からリプライのテキストを収集

Posted at

Twitter のリプライたくさん欲しいですよね?

今更ですが.

背景

科学技術の進歩に伴い自然言語処理技術が発達してきました.
データと計算環境があれば会話や要約や感情分類等の様々なモデルを作れることはご存知だと思います.

また,TwitterのようなマイクロブログサービスやSNSでは大量のデータが日々生成されています.
そこでこんなことを思う人が出てきたのではないでしょうか?

  • 「Twitterのリプライでチャットボットを作りたい!」
  • 「ツイートから位置情報を特定したい!」
  • 「あのアカウントを監視したい。」

その中でも今回は「Twitterのリプライでチャットボットを作りたい!」
そんな人のために,TwitterのStreamingAPIを用いたリプライ(テキストのみ)収集方法を紹介します.

動作環境

  • Python 3.6+ (pyenv)
  • Twitter StreamingAPI

流れ (tl;dr)

  1. Twitter API tokens を入手
  2. git clone git@github.com:liseos-x140/twitter_scraper.git
  3. cd twitter_scraper/
  4. cp config.yml.default config.yml
  5. config.ymlに 1.で入手した自分の tokens をそれぞれ記入.
  6. pip install -r requirements.txt
  7. python twitter.py

corpus/corpus/ja_YYYYMMDD_HHMMSS.txtに保存されていきます.
また,半永久的に動くのでscreenコマンド等を用いたバックグラウンドでの実行をお勧めします.

Twitter API tokens

今回はStreamingAPIを使ってリプライ収集をしていきます.
StreamingAPIが近いうちにそのまま使えなくなるらしい?と聞いて記事をまとめたなんてことはないです多分.

まず,Twitter公式のdeveloperページから規約を確認し,tokensを入手してください.
https://apps.twitter.com
https://developer.twitter.com/content/developer-twitter/en.html

入手方法は割愛します.

初期設定

ソースコードの入手

ソースコードは自分のgithubに置いてあるのでまずcloneしてください.
git clone git@github.com:liseos-x140/twitter_scraper.git

このソースコードは,Marsam-Ma-zz/twitter_scraperを日本語リプライ収集用に独自改良したものです.

API tokens を設定

まずcloneしたレポジトリに移動して,configファイルをコピーもしくはリネームします.

cd twitter_scraper/
cp config.yml.default config.yml

config.ymlの中身を自分のtokensに置き換えます.

config.yml
twitter:
  consumer_key: YOUR_CONSUMER_KEY 
  consumer_secret: YOUR_CONSUMER_SECRET 
  access_token: YOUR_ACCESS_TOKEN 
  access_token_secret: YOUR_ACCESS_SECRET 

必要ライブラリのインストール

pip install -r requirements.txt

実行

環境によってはtwitter.pyのshebangを設定し直してください.
(プログラムの解説は時間のあるときに追記するかも)

python twitter.py

注意していただきたいのが,
このスクリプトは問題が発生する限り半永久的に収集しますのでご注意ください
このため,screenコマンドなどを用いてバックグラウンドでの実行がお勧めです.

Filter

stream.filterを用いて監視を行います.trackに指定した文字列により,指定の検索ワードでストリーミングが行えます.

デフォルトでは,

track=['私','あなた','俺','ー','する','です','ます','けど','何','@', '#', '#', '。', ',', '!','?','…', '.', '!','?', ',', ':', ':', '』', ')', ')', '...']

という適当な文字列を指定しているので,自分でフィルターを改良したほうがいいと思割れます.詳しくは公式ガイドを参照ください.

出力

corpus/corpus/ja_YYYYMMDD_HHMMSS.txtに保存されていきます.

Line number Sentences
1 誕生日おめでとう!
2 ありがとう!
3 おはようー
4 おは!

それぞれ Line number(1,2),(3,4) がそれぞれ独立した会話のペアになっており,奇数行が発言,偶数行がそれに対する返信となっています.

最後に

簡単にTwitterのリプライを収集する方法をまとめてみました.
(クソリプしか収集できない愚痴はTwitterユーザーに言ってください.)
コードを改良すれば,リプライのテキストと同時に画像を収集できると思います.

また,改良元のレポジトリでは中国語や英語のリプライを収集できるようになっています.近々,対話システム系のチャレンジがあるのでその練習とかに使ってみるのはいかがでしょうか?

DSTC7 Dialog System Technology Challenges

初投稿ともあり拙い文章となっていて申し訳ありませんでしたが,
閲覧,ありがとうございました.

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3