はじめに
言語処理100本ノック 第5章: 係り受け解析にて、Graphvizを用いてデータの木構造を可視化する問題がある(44問)。
この際、普通にGoogle Colab上で日本語を可視化しようとすると文字化けが起こる。
pltの文字化けなどはググれば一瞬で出てくるが、GraphvizなおかつGoogle Colab上だと解決策がなかなかヒットしなかったのでメモ。
結論としてはPythonのコードをいじるのではなく、ランタイムが乗っているOSに直接フォントを入れることで解決した。
実行環境
Google Colab ランタイム(2023年10月25日時点)
コード
まずは手を加えず生のcolabで実行。
google colab
from graphviz import Digraph
from IPython.display import Image, display
!mkdir images
# 計算グラフの構造を定義
g = Digraph(f'G_test', directory='./images',format='png',)
# ノードの追加
g.node('node1', 'japanize_matplotlibだと')
g.node('node2', '文字化けが')
g.node('node3', '治らない \\\(^o^)/')
# エッジの追加
g.edge('node1', 'node2', label='')
g.edge('node2', 'node3', label='')
# 計算グラフを画像として出力
display(Image(g.render()))
英語や記号は表示できるが、日本語がお豆腐になってしまう…。
matplotlibに慣れていると、コード内でフォントを指定しようとしたり、とりあえずjapanize_matplotlibを入れるなどしがちだが、これだと治らない。
解決方法
解決方法は簡単で、Colabのランタイムが乗っているUbuntuの方に日本語フォントを入れればOK。
!apt install fonts-ipafont