WordCloudで己のコードを懐古する
はじめに
自分の GitHub のプロフィールや X のバナーを全く更新してないことを思い出し、なにか使える画像を作りたくなりました。
GitHub のリポジトリ数もじりじりと増え、同時に途中で折れた残骸たちも散らかりはじめた今日この頃。プロフィールに載せるのだから、自分がどんなコードを書いてきたのか一目で分かる WordCloud が良いのではないかと考えました。
今回作成したツールは、config.json
の設定と font の指定で誰でも使えます。
もし良ければ使っていただけると幸いです。
下の画像は、筆者のリポジトリを指定して生成した画像です。
拙いながらも、なんだかんだ色々書いたなぁという印象です。
ツールの使い方
事前準備
- docker compose が使える環境
クローン
git clone https://github.com/Oya-Tomo/repos-wordcloud
cd repos-wordcloud
フォントファイルの配置
- お好みのフォントファイルを入手 (
ttf
,otf
) -
font
ディレクトリを作成し、フォントファイルを配置する
mkdir font
ツールの設定
-
config.json
を作成 - フォントのファイル名を設定
- 画像のサイズを設定
- 画像内に描画する単語の最大数を設定
- リポジトリの URL を列挙 (2 つ以上)
touch config.json
{
"font": "font/[font file name].ttf",
"size": {
"width": 1500,
"height": 500
},
"max_words": 400,
"repos": [
"https://github.com/Oya-Tomo/repos-wordcloud",
"https://github.com/..."
]
}
プログラムの実行
必要なライブラリの調達や環境構築、コードの実行まで全てやってくれます。
docker compose up
出力
docker コンテナが終了すると、export
ディレクトリが生成されます。
その中にwordcloud.png
があるはずです。
実装
コードが短いので、気になる方は読んでいただいたほうが速いかと思います。
ここではざっくり解説を行います。
TF-IDF について
WordCloud の文字サイズを決めるスコアとして利用されているのが TF-IDF (Term Frequency-Inverse Document Frequency) です。
計算式は以下のように表されます。
この TF-IDF とは、一般に複数の文章に登場する単語やトピックの出現頻度や傾向から、その単語の重要度を測る指標です。
まず基本的に単語の重要度は出現回数が多いほうが高くなります。これを
しかし、単純に、沢山出てくる単語を重要だとして扱うと、例えばプログラムで必ず登場するimport
などは重要単語になってしまいます。
このような問題を防ぐため、
TF-IDF は、少ない文章に何度も出現する単語の重要度を高く評価する指標なのです。
gensim
上で述べた、TF-IDF の算出を行ってくれる機能があります。
提供されているDictionary
クラスを用いてコーパスを作成し、 TfidfModel
でスコアを算出しました。
wordcloud
wordcloud の作成にも便利なライブラリがあります。
テキストと TF-IDF スコアを渡すだけで簡単に画像が作成できます。
docker compose
ツールとして配布するときに、docker があれば便利かと思ったので作成しました。
docker の使える環境さえあれば、コマンド一つで簡単にコードを実行することが出来ます。
おわりに
リポジトリの数が将来どんどん増えていくことを期待しているので、定期的に画像を生成してみて触れた技術の変遷を感じたいと思います。
Discussion