Wordleで文学作品の特徴語をビジュアライズする

Wordleとは

Wordleとは単語の出現頻度でテキストサイズに重み付けをし、それをうまく配置することによって視覚効果を狙う手法である。
ここのサービスが有名らしいのだが、日本語がうまく表示されないという問題があった。
さて、OpenProcessingを眺めていたところ、Word Cloudという上記サービスに似かよった作品を見つけた。色付けや配置オプションなどはないシンプルなソースコードだが、これを利用して日本語表示ができないかと思い、いじってみた。結果思いのほか簡単に日本語Wordleを表示することができた。ここに作業記録を文学作品などをWordle化した画像とともに掲載する。

不思議の国のアリス(ルイス・キャロル 著  山形浩生 訳)

いかにして特徴語を抽出するか

ということを素人が考えていると日が暮れてしまうので、Mecabを用いて名詞を抽出し、これを特徴語とした。あとでどうにかする(←やりそうにない)。
青空文庫形式の文書をいくつか扱ったので、カッコや#を含む文字列もざっくり除いた。

# -*- encoding: utf-8 -*-
import MeCab

m = MeCab.Tagger("-Ochasen")
s = ""
reject = ["《", "》", "[", "「", "]", "」", "#", "(", ")","(", ")"]

def g(r, f):
    if r in f:
        return True
    return False

text= "test_name"
for line in open(text+".txt").readlines():
    node = m.parseToNode(line)
    nouns = []
    while(node):
        if node.feature.split(",")[0] == "名詞":
            f = node.surface
            if not any([g(r,f) for r in reject]):
                nouns.append(node.surface)
        node = node.next
    for noun in nouns:
        s += noun + "\n"

open(text + "_noun.txt", "w").write(s)

このように生成したテキストを小さな修正(日本語フォントを用意など)したWord Cloudのコードに流しこむ。
実装の中身は短いがほとんど見ていない。どうやらランダムな位置にテキスト配置を試みて、置けるようになるまでループを繰り返しているみたいだけど。
また特徴語は全ての名詞を走査しているので、テキストサイズが大きくなると(100kB以上)それなりに時間がかかる。

参考:WindowsでMeCab Pythonを使う - 人工知能に関する断創録

品評会

不思議の国のアリス(ルイス・キャロル 著  山形浩生 訳)

あまりうまくいっていない。一般名詞が多いというか名詞ですらないものがでかいツラをしている。

源氏物語 桐壺(紫式部 著  与謝野晶子 訳)

これも人物は抽出されているがノイズも大きく感じる。

政治少年死す(大江健三郎)

これはよく特徴語(天皇、党員、右翼、左翼、恐怖…)が抽出されているのではないか。しかし「傍点」や「太字」は校正者注だろう。前処理ではじいておくべきだった。

Ulysses 1.Telemachus(James Joyce)

KINCH(STEPHENのあだ名)やBUCK(伊達男MULLIGAN)がちゃんと大きく表示されていて僕は満足です。ちなみに英語はここ(Basic English Word List)の基本単語850でフィルタリングしています。かなり綺麗に表示されているようなので、フィルタはWordleの品質上重要なのではないでしょうか。

大いなる冬 第1部(イスマイル・カダレ 著  井浦伊知郎 訳)

カダレはアルバニアの作家。大いなる冬を翻訳している方を最近発見したのだが、まだ読み終わっていないので特徴語抽出できているかは分からぬ。

腐ってゆく魔術師(アポリネール 著  窪田 般弥 訳)

アポリネールはフランスの象徴派詩人。
個人的に大好きで彼の詩の翻訳はテキストに打ち込んでそらで言えるくらいに読み込んでいる。
下記は腐ってゆく魔術師のなかで記述された歴史上最初のシュールレアリスム詩「夢判断」のWordle。
詩だとテキストの分量が絶対的に少ないからスカスカした感じになってしまう。

総評

  • もうちょっとノイズを減らすようにフィルタをチューニングしないとダメ。
  • ソースもちゃんと読んで色付けやアニメーションエフェクトも付けたいな。
  • Beautiful Visualizationという本にWordleのアルゴリズムが載っているという噂を聞きました。欲しいです。

Beautiful Visualization: Looking at Data through the Eyes of Experts