バリケンのRuby日記 RSSフィード

2009-05-09

[] 英文テキストから単語数を調べる  英文テキストから単語数を調べる - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  英文テキストから単語数を調べる - バリケンのRuby日記  英文テキストから単語数を調べる - バリケンのRuby日記 のブックマークコメント

d:id:umedamochioさんが、ご自身の著書「シリコンバレーから将棋を観る―羽生善治と現代」を「翻訳してウェブにアップするのは自由」と宣言してから、あっという間に英訳プロジェクトが立ち上がって、すでにドラフト版として全訳が公開されているみたい。すごいすごい!

せっかくだから、これを題材に「あるテキストファイルの中に出てくる単語を多い順に出力するプログラム」をプログラミング言語Rubyを使って書いてみたよ。ちなみに、Rubyについては以前d:id:umedamochioさんがコラムを書いているよ。

count = Hash.new(0)

while line = gets
  words = line.downcase.gsub(/[\.<>\(\)\[\]\"\?!;:#\/]/,' ').
    split(/,?\s+/).map {|e| e.gsub(/(\A\'+|\'+\z)/, '')}
  words.each do |word|
    count[word] += 1
  end
end

dict = count.to_a.sort

count.values.uniq.sort.reverse.each do |value|
  dict.select {|e| e[1] == value}.each do |word, number|
    puts "#{word}: #{number}"
  end
end

このプログラムをテキストエディタで「wordcount.rb」というファイル名で保存して、コマンド入力画面で

ruby wordcount.rb < input.txt > output.txt

と入力してね。input.txtが単語数を調べたい英文ファイル、output.txtが結果を保存するファイルだから、適宜読み替えてね。

あ、もちろんこのプログラムを実行するにはRubyをインストールしておく必要があるよ。

はじめに(Preface)」を調べてみたところ、次のような結果になったよ。

shogi: 68
i: 60
the: 57
to: 51
a: 36
and: 34
that: 34
of: 29
on: 25
my: 23
it: 20
(以下省略)

「shogi」が一番たくさん出てくる単語なのは、将棋の本だからかな?

こんな感じで、プログラミング言語Rubyを使えば英文テキストを色々と分析することができるよ。ほかにもテキストの分析のやり方は色々あるから、色々な観点から分析して推敲に参加するのも面白いんじゃないかなあ。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20090509