文學ラボ@東京

(文学をなにかと履き違えている)社会人サークルです。第22回文学フリマ東京では、ケ-21で参加します。一緒に本を作りたい方はsoycurd1あっとgmail.comかtwitter:@boonlab999まで(絶賛人員募集中)。

content

PythonとElasticSearch、Kibanaを用いた太宰治小説の可視化 その2

(この文章は秋の文フリ用の原稿です。)

Kibana

前章(http://boonlab.hatenablog.com/entry/2015/10/26/000958)では、ElasticSearchへの小説データのインポートを行った。 それでは、それらのデータをデータ可視化ツールであるKibanaを用いて可視化していきたい。

まずは、https://www.elastic.co/downloads/kibanaからkibanaをダウンロードし(2015/11時点ではKibana 4.1.2)、展開したディレクトリ内の

bin/kibana

を実行してみよう。その後、ブラウザでhttp://localhost:5601にアクセスすると以下のような画面が表示される。

f:id:soy-curd:20151026225545p:plain

ここで、"Index name or pattern"に"dazai-demo"(indexの作成先)と入力して、Createを押下すると、インデックスがKibanaに登録される。

次に、Kibanaの左上に表示されている"Discover"を押下する。ElastickSerachへのデータのインポートに成功していれば、ここでデータを見ることができる。

例えば、"Selected Fields"にtextとpageを設定すると、以下のような画面となる。

f:id:soy-curd:20151026225549p:plain

ビジュアライズ

まずは、今回用いたテキスト『人間失格』の、頻出単語をヒストグラムにしてみよう。

Kibanaの画面から"Visualize"を押下すると、

f:id:soy-curd:20151026225553p:plain

のように、可視化方法を選ぶ画面に遷移する。ここで、"Vertical bar chat" → "From a new search"と進んでいくと、ヒストグラムの要素を設定する画面に遷移する。

ここで、Y軸を単語数、X軸を各単語(頻度順)で表現したいとする。 これを行うのは非常に簡単だ。 まず、Y-AxisをCountに設定する。その後、buckets → X-Axisから

ラベル 設定内容
Aggregation Terms
Field text
Order Top
Size 60
Order By metric: Count

と設定する。

f:id:soy-curd:20151026225559p:plain

その後、左上にある右向きの三角形(再生ボタンに似ている)を押下してほしい。 以下のような画像が表示されるはずだ。

f:id:soy-curd:20151026231202p:plain

画像が表示されたら、右上の"Save Visualization"から、このグラフを保存しておこう。

それでは、グラフを見て欲しい。"た"、"だ"、"て"のような単語に紛れて、一番右に"人間"という単語がリストに(恣意的に!)含まれている。これは本文では、『もはや、自分は、完全に、人間で無くなりました』や、『自分には、淫売婦というものが、人間でも、女性でもない、白痴か狂人のように見え、そのふところの中で、自分はかえって全く安心して、ぐっすり眠る事が出来ました。』といった描写に用いられる、非常に重要な単語である。

それでは、次の章ではこの『人間失格』という小説の中で、"人間"という単語がいつ、どの程度用いられるかを可視化する。

小説内における単語の頻度推移

それでは、ページ毎の"人間"という単語の頻度の推移を追ってみよう。

まずは先ほどの手順同様、新しく"Vertica Bar Chart"を作成してもらいたい。

前回、pythonによってページ毎にテキストを分割していた。今回のx軸はページ、y軸を"人間"の単語数とする。

今回もY-AxisをCountに設定し、buckets → X-Axisは

ラベル 設定内容
Aggregation Histogram
Field page
Interval 5

と設定する。

そして、上部の検索窓に"人間"と入力して、グラフを生成して欲しい。下のようなグラフが生成されるはずだ。

f:id:soy-curd:20151026225612p:plain

検定は行わずに印象で判断すると、小説の後半数十ページ、"人間"という単語が使われる頻度が激減している。これが、作中の主人公の人間性と関連していたら非常に面白いのだが、残念ながらそのような結論を導くにはもっと精緻な分析が必要であろう。しかし、このようなレベルの可視化でも、どのように太宰治の小説を読んでいくかのヒントの一つとすることはできるかもしれない。

おわりに

以上、PythonとElasticSearch、Kibanaを用いて太宰治人間失格』の可視化を行った。このような解析が、オープンソース(プログラムのソースコードが世界に公開されていること)のプログラムでできることは、非常に好ましいことである。小説に対する新しい切り口が欲しい、あるいは文系分野の定量化に興味のある方は、これを機にこれらのツールを利用してみることをお勧めしたい。

(おわり)