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

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


Wordle - Beautiful Word Clouds



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



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


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


ビューティフルビジュアライゼーション (THEORY/IN/PRACTICE)

ビューティフルビジュアライゼーション (THEORY/IN/PRACTICE)


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)


Alices Adventures In Wonderland (100 words)


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


Pride And Prejudice


The Adventures Of Sherlock Holmes


Frankenstein


Hamlet


Peter Pan


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


Wordle - Gallery: merborne