2022/01/02
自然言語処理について興味があり、ネット上を物色していると
nlplotという分析・可視化ライブラリを見つけましたので、早速試してみました。作者の
詳細解説もありましたので参考にしました。
可視化できるグラフは以下の通りです。
1. N-gram 棒グラフ
2. N-gram ツリーマップ
3. 単語数のヒストグラム
4. Wordcloud
5. 共起ネットワーク
6. サンバーストチャート
題材として青空文庫からダウンロードした「
桃太郎」を例に進めます。まず、ダウンロードしたテキストファイルから前処理として、ヘッダー、フッター、ルビ等を取り除いて、改行等のコードも削除したテキストデータファイルを準備します。この手の作業を自動化するプログラムはネット上で多くアップロードされていますので、参考にしても良いと思います。
ソースコードはGitHubの
作者のサイトに記載のものを参照しました。
プログラムの流れは、
① テキストデータ全体読み込む。

② 一文ずつ(句点で)分割してDataFrameに保存する。

③ DataFrameの一文ずつjanomeを用いて形態素解析を行い、名詞を選択する。

④ nlplot実行(上記の1〜6のグラフ描画)
以下に結果をお話しします。ちなみに、②で求められた文の数は180、③で求められた名詞の数は658でした。
1. N-gram 棒グラフ 参考資料によると、N-gramとは連続するN個の単語や文字のまとまりのこと。1-gram、2-gram、3-gramのことをUni-gram、Bi-gram、Tri-gramと言い、文脈を捉える手助けとして使われるとのこと。
以下のコードを実行すると、Uni-gramが描画できます。
npt = nlplot.NLPlot(pd.DataFrame(df1), target_col='word')
stopwords = npt.get_stopword(top_n=0, min_freq=0)
stopwords
npt.bar_ngram(
title='uni-gram',
xaxis_label='word_count',
yaxis_label='word',
ngram=1,
top_n=50,
width=800,
height=1100,
color=None,
horizon=True,
stopwords=stopwords,
verbose=True,
save=False,
)
1行目のdf1は名詞のみが登録されているDataFrameでcolumn名は「word」です。3行目のstopwordのtop_n=0は検出された単語(文字のまとまり)を除外(無視)しない設定で、top_n=2にすると上位の2単語が除外されます。10行目のngram=1がUni-gramで、ngram=2でBi-gramで、ngram=3でTri-gramが描画できます。

Uni-gramの結果、上位の単語は、桃太郎、鬼、おばあさん、おじいさんの順ですね。Bi-gramの結果は以下の通りで上位は「おじいさん-おばあさん」、「鬼-島」、「桃太郎-さん」です。
2. N-gram ツリーマップ Uni-gramの結果をTreeマップ(エリアマップ)で描画する際は以下のコードを実行します。
npt.treemap(
stopwords=stopwords,
title='Tree of Most Common Words',
ngram=1,
top_n=30,
width=1300,
height=600,
verbose=True,
save=False
)
結果は以下の通りです。
3. 単語数のヒストグラム 各文(今回は180個の文)に含まれる名詞の単語数のヒストグラムです。一文あたりの名詞の数は2個が頻度最大のようです。

以上、長くなりましたので、続きは次回お話しします。