こちらの記事で、テキストを分割し、軽く分析しました。最後にバイグラムをつくったので、そこから先をやってみます。
バイグラムをつくるところまでは下記を参照。 esu-ko.hatenablog.com
まず、加工集計しやすくするために、データフレームに変換します。
from collections import Counter cntr = Counter() for w1,w2 in list(nltk.bigrams(text)): cntr[w1 + '_' + w2] += 1 df = pd.DataFrame( [[k,v]for k,v in cntr.items()], columns = ['bigram','cnt'] ) bi_df = df.assign( w1 = df.bigram.apply(lambda x : x.split('_')[0]), w2 = df.bigram.apply(lambda x : x.split('_')[1]) )
ネガ分析
ネガポジの辞書があれば、それをmerge
してネガポジのスコアなどを出しますが、今回はもっていないので、ない
という単語と共起するものを見てみます。
bi_df.query('w2=="ない"')
bigram cnt w1 w2 172 や_ない 10 や ない 242 訳_ない 1 訳 ない 459 てる_ない 1 てる ない 596 は_ない 3 は ない 662 こと_ない 1 こと ない 688 申し訳_ない 1 申し訳 ない
みてみると、ないがつく組み合わせは6種類、合計でみても17しかありません。
「や + ない」、「は + ない」が多く、名詞や代名詞をうけて、それを否定し、動詞を否定することは少なさそうです。
これはおそらく、漫才という特性上、相手の行ったことをうけて否定する(=つっこみ)で相手の発言を代名詞でうけてるから、なので
はないかと思われます。
可視化してみる
バイグラムの組み合わせは、ネットワーク構造で可視化することができます。ここではnetworkxを使っています。
まず、グラフを作成します。
import networkx as nx G = nx.Graph() edges = [] for ix in bi_df.query('cnt>4').index: row = bi_df.loc[ix,:].to_list() edges.append( (row[2],row[3],row[1]) ) G.add_weighted_edges_from(edges)
次に可視化をします。
fig = plt.figure(figsize=(10, 10)) nx.draw(G, with_labels=True, font_family='IPAexGothic', width = bi_df.query('cnt>4').cnt.values * 0.1 )
とりあえず、ここからは、決め台詞に関する部分が繰り返しでること(=それ以外は繰り返しはすくない)と関西弁まわりの分割がうまくいってなさそう、という印象をうけました。 分割辞書周りをいじるのがネクストアクションになりそうです。