現在のビジネス環境だと、あまり使われることはないかもしれませんが、ある一つのテキストをひとまず把握したい!といったときにNLTKは便利機能がそろっています。
ミルクボーイさんのコーンフレーク漫才を文字起こししたものを、題材に使い方を把握してみます。
下準備
milkboy = #文字起こししたテキスト from janome.tokenizer import Tokenizer t = Tokenizer() j_tokens = t.tokenize(milkboy) import nltk import_text = " ".join([token.base_form for token in j_tokens]) tokens = nltk.word_tokenize(import_text) text = nltk.Text(tokens)
可視化してデータを見てみる
まずはよく出てくる単語が何かを把握して、次のアクションを決めるため、出現頻度順でその数の累積を見てみます。
import matplotlib.pyplot as plt import japanize_matplotlib fdist = nltk.FreqDist(text) fdist.plot(25,cumulative=True)
よくあることですが、助詞が多いですね。
上位に出てきた動詞「分かる」と、この漫才の重要なキーワードである「コーン(フレーク)」、ミルクボーイの漫才の基本パターンである「オカン」の出現タイミングをみてみることにします。
text.dispersion_plot(['コーン','オカン','分かる'])
自分の印象だとオカンは最初と最後のイメージでしたが、かなり定期的に出てくるようですね。
コーンフレークは最初にはでてこず、繰り返しパターンに入ると密度高く出てくるようです。
「分かる」は前半集中してでてきたあと、終盤に定期的にでてクライマックスにしていくようです。
バイグラムをみてみる
上記までは分かち書きした単語レベルでしたが、固有や同時に使われる言葉を把握するためにバイグラムの出現トップをみておきます。
from collections import Counter cntr = Counter() for w1,w2 in list(nltk.bigrams(text)): cntr[w1 + '_' + w2] += 1 pd.DataFrame( [[k,v]for k,v in cntr.items()], columns = ['bigram','cnt'] ).set_index('bigram').sort_values('cnt',ascending=False).head(10).plot.barh() #単体での出現と、似た単語もみてみる for w in ['コーン','フレーク']: print(w,text.count(w),text.similar(w))
コーンフレークというたんが分かれたものがトップで、あとは助詞やリズムを作る感じのものが多そうです。