TwitterのフォロワーのツイートをLDAを用いてトピック分類してみる一連のプログラム。
TwitterAPIを使うのでデベロッパー登録して,環境変数にトークンなどを設定しておく。
- TWITTER_DEV_ENV : Twitter Dev で登録した開発用 Environment 名
- API_KEY : Twitter Dev で取得した API_KEY
- API_SECRET_TOKEN : Twitter Dev で取得した API_SECRET_TOKEN
- ACCESS_TOKEN : Twitter Dev で取得した ACCESS_TOKEN
- ACCESS_TOKEN_SECRET : Twitter Dev で取得した ACCESS_TOKEN_SECRET
- MECAB_DIC : MeCab辞書のディレクトリ
指定されたユーザのユーザ情報を取得し,画面に表示する。 ユーザはユーザIDまたはスクリーン名で指定する。 ユーザIDとスクリーン名の両方が指定された場合はユーザIDが優先される。
python get_followers.py -u 10010
- -u / --user_id : ユーザIDを指定する。
- -s / --screen_name : スクリーン名(ユーザ名)を指定する。
指定されたユーザをフォローしているユーザのIDを収集する。 ユーザはユーザIDまたはスクリーン名で指定する。 ユーザIDとスクリーン名の両方が指定された場合はユーザIDが優先される。
python get_followrs.py -u 10010 -f output.json -c 100
- -u / --user_id : ユーザIDを指定する。
- -s / --screen_name : スクリーン名(ユーザ名)を指定する。
- -c / --count : 取得するフォロワーの最大数。
- -f / --filename : 出力するファイル名。JSON形式で出力される。 指定がない場合は画面上に出力される。
指定されたユーザがフォローしているユーザ(友人)のIDを収集する。 ユーザはユーザIDまたはスクリーン名で指定する。 ユーザIDとスクリーン名の両方が指定された場合はユーザIDが優先される。
python get_friends.py -u 10010 -f output.json -c 100
- -u / --user_id : ユーザIDを指定する。
- -s / --screen_name : スクリーン名(ユーザ名)を指定する。
- -c / --count : 取得する友人の最大数。
- -f / --filename : 出力するファイル名。JSON形式で出力される。 指定がない場合は画面上に出力される。
指定されたユーザのツイートを収集する。 ユーザはユーザIDまたはスクリーン名で指定する。 ユーザIDとスクリーン名の両方が指定された場合はユーザIDが優先される。
python get_timeline.py -s hoge -f tweets20200801 -n 100
- -u / --user_id : ユーザIDを指定する。
- -s / --screen_name : スクリーン名(ユーザ名)を指定する。
- -n / --num_tweets : 取得するツイートの数。
- -f / --base_filename : 出力するファイル名。ツイートはJSON形式で出力される。 指定がない場合は画面上に出力される。
指定されたユーザがフォローしているユーザ(友人)のツイートを収集する。 ユーザはユーザIDまたはスクリーン名で指定する。 ユーザIDとスクリーン名の両方が指定された場合はユーザIDが優先される。
python get_friends_tweets.py -s hoge -f tweets20200801 -c 50 -n 100
- -u / --user_id : ユーザIDを指定する。
- -s / --screen_name : スクリーン名(ユーザ名)を指定する。
- -c / --count : 取得する友人の最大数。
- -n / --num_tweets : 各友人について取得するツイートの数。
- -f / --base_filename : 出力するファイル名の接頭辞。 ツイートはJSON形式で出力され,実際のファイル名は「接頭辞_ユーザID.json」のようになる。 指定がない場合は画面上に出力される。
コーパスと辞書を作成する。
python create_corpus.py -d dic/hoge.dict -c dic/hoge.mm -u 0.8 -l 3 a.json b.json c.json
- -c / --corpus : 出力するコーパスファイル名。
- -d / --dictionary : 出力する辞書ファイル名。
- -u / --upper_limit : 出現頻度が多すぎる単語を辞書に含めないようにするため, 辞書に含める単語の出現頻度の上限を実数値(0.0〜1.0)で指定する。
- -l / --lower_limit : 出現回数が少なすぎる単語を辞書に含めないようにするため, 辞書に含める単語の出現回数の下限を整数で指定する。
- JSONファイル : ツイートファイルを指定する。
トピック数を決定するために,トピック数を変えながら,PerplexityとCoherenceを計算,プロットする。
python calc_topic_num.py \
-d dic/hoge.dict -c dic/hoge.mm \
--start 2 --limit 10 --step 3 \
-s output.pdf \
-m "c_v" \
-r 10
a.json b.json c.json
この例では,トピック数を2から10まで3刻みで変化(2,5,8)させながら, それぞれのトピック数では10回計算を繰り返し,その平均をPDF形式で出力する。
- -c / --corpus : コーパスファイル名(mmで終わるもの)を指定する。
- -d / --dictionary : 辞書ファイル名を指定する。
- --start : トピック数の初期値。
- --limit : トピック数の最大値。
- --step : トピック数の増分。
- -m / --coherence_measure : Coherenceの計算方法。デフォルトは "c_v"。 その他に "u_mass", "c_uci", "c_nmpi" が指定できる。 手法の違いは gensimのCoherenceモデル を参照のこと。
- -r / --repeat : PerprexityやCoherenceは乱数によって,その値が毎回変わるため, その影響を減らすために,平均値を計算する。 その平均値を計算するために複数回の計算が必要となるが,その回数を指定する。
- -s / --save_fig : 保存するプロットのファイル名。 画像形式は拡張子から自動的に決定される。 ファイル名が指定されない場合は画面に表示される。
- -t / --use_tfidf : TF-IDFコーパスを利用する。
- JSONファイル : ツイートファイルを指定する。
LDAモデルを作成する。
python create_model.py -d dic/hoge.dict -c dic/hoge.mm -n 5 -o models/hoge.model -t
- -c / --corpus : コーパスファイル名(mmで終わるもの)を指定する。
- -d / --dictionary : 辞書ファイル名を指定する。
- -n / --num_topics : トピック数。
- -o / --output_file : 保存するモデルのファイル名。必ず指定する。
- -t / --use_tfidf : TF-IDFコーパスを利用する。
LDAモデルのトピックを表示する。
python check_model.py models/hoge.model
テキストを入力するとそれがどのトピックに属するかを推定して表示してくれる。
python infer_topic_from_text.py -m models/hoge.model -d dic/hoge.dict "今日は天気がいい"
- -m / --model :
create_model.py
で作成したLDAモデルのファイル名を指定。 - -d / --dictionary : 辞書ファイル名を指定する。