TL;DR
WordCloudで日本語が豆腐になる場合には WordCloud(font_path="/path/to/my-font.ttf")
というように font_path
を指定する。
問題
WordCloudを使用して日本語の単語をプロットしようとすると、豆腐(文字化け状態)になることがある。作り込んだ環境では特に意識せずとも正しく表示されるかもしれないが、Google Colab利用する場合など新たに立ち上げた環境においてはよく発生するトラブルである。
たとえばColab上でこのコードを実行すると、日本語の文字は豆腐になる。
from wordcloud import WordCloud
wordcloud = WordCloud().generate(" ".join(["hoge", "fuga", "piyo", "ほげ", "ふが", "ぴよ"])
こういう場合のよくあるプラクティスは japanize_matplotlib
を使うことや plt.rcParams['font.family']
を設定することだが、これではタイトルや軸ラベルは日本語になってもWordCloudでプロットされる単語は豆腐になってしまう。
ならどうするか?
WordCloud
オブジェクトを作成する際 font_path
引数に使用するフォントファイルのパスを与えてやればいい。
具体的にはこうする。
from wordcloud import WordCloud
wordcloud = WordCloud(
font_path="NotoSansJP-Regular.ttf"
).generate(" ".join(["hoge", "fuga", "piyo", "ほげ", "ふが", "ぴよ"])
この例だとカレントディレクトリに直接フォントファイルを置いてしまっているが、環境によって適切なフォントファイルの置き場があるので、適宜パスは書き換えると良い。
ちなみにサンプルで利用したNoto Sans JPはここからダウンロードできる。
ふりかえってみると単純な話だけど、原因がどこにあるのかを特定するまでが結構大変な問題だった。フォント周りの設定なのか、パッケージの問題なのか、色々と試して時間を使ってしまった。またいつか突発的にWordCloudを使って困ることがあると思うので備忘録代わりに残しておく。
本記事は https://tech-blog.yayoi-kk.co.jp/entry/2024/04/09/110000 と同じ内容です。
アクセス解析を目的としてマルチポストしています。