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)
- 作者: Julie Steele,Noah Iliinsky,増井俊之,牧野聡
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/10/26
- メディア: 大型本
- 購入: 5人 クリック: 85回
- この商品を含むブログ (10件) を見る
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)
なんかいい感じだよね!
他の小説でも試してみるよ
The Adventures Of Sherlock Holmes
Wordleは楽しいから是非とも試してみて!
僕が作ったWordleは次のURLで見れるよ