Rubyで英文小説をWordleしようよ

Wordleって知ってる?Wordleはテキスト中の単語をグラフィカルに配置して、表示するツール/サービスだよ。


Wordle - Beautiful Word Clouds



例えばProject Gutenbergから、「Alice's Adventures In Wonderland」を取ってきて、Createページのテキストボックスにこれを貼りつければ、こんなものができるんだよ。


f:id:keyesberry:20111212175942p:image


すばらしいよね!Wordleではテキスト中の単語の出現頻度に応じて、文字の大きさを調整してるよ。加えてRandomizeボタンを押したり、FontやLayoutやColorを変えたりすることで、全く違ったイメージのWordleが作れるよ。


Wordleのアルゴリズムについては、「Beautiful Visualization」というデータビジュアライゼーションの本に解説があるよ。


Wordleはすばらしいんだけど一点だけ不満があるよ。それはその単語の大きさがそのテキストの特徴を、必ずしもうまく表していないことだよ。つまりWordleではストップワードの除去が、あまりうまくいっていないんだよ。ちなみにストップワードはその言語で一般的に使われる語、例えばthe a forとかの非特徴的な単語のことだよ。先の結果を見ると、余り特徴的でない単語が並んでることがわかるよね。


で、以前にこのブログのチュートリアルで作った、WordDictionaryクラスを思い出したんだよ。


Rubyチュートリアル ~英文小説の最頻出ワードを見つけよう!(最終回) - hp12c


WordDictionaryクラスでは、他のテキストからなるベース辞書との比較で、対象テキストの特徴語を抽出できるんだったよ。試しにちょっと固めの小説をベースとして、アリスの特徴語を抽出してみるよ。

require_relative "word_dictionary"

alice = "alices_adventures_in_wonderland.txt"
bases = %w(english_literature.txt analyze_people_on_sight.txt)

alice_wd = WordDictionary.new(alice)
base_wd = bases.map { |base| WordDictionary.new(base, base) }.inject(:+)

p alice_wd.uniq_words(40, base_wd)

# >> [["alice", 403], ["turtle", 59], ["hatter", 56], ["mock", 56], ["gryphon", 55], ["rabbit", 51], ["mouse", 44], ["ve", 44], ["duchess", 42], ["tone", 40], ["dormouse", 40], ["cat", 37], ["march", 35], ["hare", 31], ["white", 30], ["replied", 29], ["caterpillar", 28], ["jury", 22], ["cried", 20], ["sort", 20], ["tea", 19], ["soup", 18], ["spoke", 17], ["sat", 17], ["talking", 17], ["garden", 16], ["hastily", 16], ["arm", 15], ["mad", 15], ["suppose", 14], ["didn", 14], ["anxiously", 14], ["dinah", 14], ["baby", 14], ["footman", 14], ["yes", 13], ["dodo", 13], ["cats", 13], ["wouldn", 13], ["dance", 13]]

なんかそれっぽい単語が抽出されたね


うれしいことにWordleのサイトでは、単語とその重み付けのリストを渡して、Wordleを作ることもできるんだよ(Advancedページ)。早々WordDictinaryで抽出したAliceの特徴語を使って、Wordleを作ってみたよ。


Alices Adventures In Wonderland (40 words)
f:id:keyesberry:20111212175943p:image


Alices Adventures In Wonderland (100 words)
f:id:keyesberry:20111212175949p:image


なんかいい感じだよね!他の小説でも試してみるよ。


Pride And Prejudice
f:id:keyesberry:20111212175944p:image


The Adventures Of Sherlock Holmes
f:id:keyesberry:20111212175945p:image


Frankenstein
f:id:keyesberry:20111212175946p:image


Hamlet
f:id:keyesberry:20111212175947p:image


Peter Pan
f:id:keyesberry:20111212175948p:image


Wordleは楽しいから是非とも試してみて!僕が作ったWordleは次のURLで見れるよ。


http://www.wordle.net/gallery?username=merborne:title=Wordle - Gallery: merborne