バリケンの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

2009-05-03

[] Lingrが5月いっぱいで終了!  Lingrが5月いっぱいで終了! - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  Lingrが5月いっぱいで終了! - バリケンのRuby日記  Lingrが5月いっぱいで終了! - バリケンのRuby日記 のブックマークコメント

うーん、とっても残念。

http://japan.cnet.com/blog/kenn/2009/05/01/entry_27022150/

せっかくだから、次のルームにしばらく入っているよ。気軽に話しかけてね。

http://www.lingr.com/room/0N4N2Ct6WdT

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

2009-04-18

[][] WindowsJRubyの最新ソースコードを入手してビルドするまでの長い道のり  WindowsでJRubyの最新ソースコードを入手してビルドするまでの長い道のり - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  WindowsでJRubyの最新ソースコードを入手してビルドするまでの長い道のり - バリケンのRuby日記  WindowsでJRubyの最新ソースコードを入手してビルドするまでの長い道のり - バリケンのRuby日記 のブックマークコメント

WindowsJRubyの最新ソースコードを入手してビルドするまでにやったことを、とりあえずメモとして書いておくよ。あとでちゃんとまとめるかも。

$ cd /c
$ git clone git://kenai.com/jruby~main jruby
  • JRubyのビルド
    • コマンドプロンプトを起動して、PATHを通してから、JRubyのビルドを実行するよ
    • 次のようにコマンドを入力するよ
> set JAVA_HOME=C:\PROGRA~1\Java\jdk1.6.0_13
> set M2_HOME=C:\PROGRA~1\APACHE~1\apache-maven-2.1.0
> set PATH=%JAVA_HOME%\bin;%M2_HOME%\bin;C:\PROGRA~1\APACHE~1\apache-ant-1.7.1\bin;%PATH%
> cd c:\jruby
> mvn

これで、JRubyの最新版がビルドできているはずだよ。

> set JRUBY_HOME=C:\jruby
> set PATH=%JRUBY_HOME%\bin;%PATH%
> jruby -v
jruby 1.3.0 (ruby 1.8.6p287) (2009-04-19 r6586) (Java HotSpot(TM) Client VM 1.6.0_13) [x86-java]

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

2009-04-08

[][] Google App EngineJavaが使えるように!  Google App EngineでJavaが使えるように! - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  Google App EngineでJavaが使えるように! - バリケンのRuby日記  Google App EngineでJavaが使えるように! - バリケンのRuby日記 のブックマークコメント

米グーグルの「Google App Engine」、Javaアプリケーションが利用可能に

Javaが使えるようになった、ということはJRubyも使えるのかな?

追記:動くみたい!

追記2:もう和訳が!仕事早い!

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

2009-03-06

[] RubyistLispを学ぶ理由  RubyistがLispを学ぶ理由 - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  RubyistがLispを学ぶ理由 - バリケンのRuby日記  RubyistがLispを学ぶ理由 - バリケンのRuby日記 のブックマークコメント

Rubyの作者、まつもとさんも次のように言っているよ。

エリック・レイモンド(Eric Raymond)のエッセイ「ハッカーになろう*」では、Lispのことが以下のように紹介されています。

LISPは、それをモノにしたときの素晴らしい悟り体験のために勉強しましょう。この体験は、その後の人生でよりよいプログラマーとなる手助けとなるはずです。例え、実際にはLISPそのものをあまり使わなくても。

それに対してLispハッカーであるポール・グレアム(Paul Graham)は以下のように反応*しています。

彼がLispについて言っていることはよくある意見だ。つまり、Lispを学べばよいプログラマーになれる、でもそれを実際に使うことはない、と。何故だい? プログラミング言語なんてただの道具じゃないか。Lispでよいプログラムが書けるなら、使うべきなんだ。

そのとおり。あまり使われていませんが、Lispには優れたところがたくさんあります。

まつもとゆきひろのハッカーズライフ:第11回 Let’s Talk Lisp (1/2) - ITmedia エンタープライズ

Rubyist Magazineの第16回のインタビューで、essaさんは次のように言っているよ。

ささだ 若手へ一言、あります?

essa 関数型プログラミング言語を勉強した方がいい。

一同 (笑)

essa 自分の実体験から、「関数型プログラミング言語の勉強はわかんなくても役に立つ」ということを言いたいです。私の場合は On LispSICP を読んで、どちらも半分から分んなくなってんですけど、それでもかなり、結構効果あったような気がしてるんで。

Rubyist Magazine - Rubyist Hotlinks 【第 16 回】 essa さん

Googleの高林哲さんも次のように言っているよ。

今年の4月に『計算機プログラムの構造と解釈』(SICP)を知った。これはすごい本である。MITの入門コース用の教科書らしいのだが、僕にとっては難しい(一応は情報科学が専門の大学院生なんだが)。が、難しい以上に楽しい。本物の計算機科学を感じる。perlだとかCGIだとか、くだらんことをやっていないで、もっと早く読むべきだった。

この本では、プログラミング言語としてLispの1つの方言であるSchemeを採用している。僕はLispを長い間、敬遠してきた。あんな括弧の多い言語、IQの高い人間じゃないと理解できないに違いない、そもそも実用性がないんじゃないか、と思っていた。が、やり始めてみると、すぐに病みつきになった。リスト構造の単純さ、lambda式の考え方、そして、リストとlambda式の組み合わせによる表現力。限りなく高い自由度。なんでこんなにすごいんだ? 何より楽しい。

括弧については bit 2000 年 5月号 に竹内郁雄氏の 言葉がある。

弟子が尋ねた。「先生、私は先生がカッコをまるで魔術師の ように扱っているのを常々敬服しています。どうすれば先生のようになれ るのでしょうか?」

師「えっ? カッコ? あ、そうか。そんなものもあったな。いやあ、 すっかり忘れておったわ」

でも実用性がないじゃないか? ビジネスの世界で使えないじゃないか? との疑問が残るかもしれない。僕は実用性がないとは思わないし、ビジネスで使えなくても気にしない。実用性やビジネスより楽しさの方が大きな動機づけとなるのだ。

『計算機プログラムの構造と解釈』について

Googleでは実際に関数型言語の知見が生かされているみたいだよ。

関数型プログラミングを会得しない限り, Google に強大なスケーラビリティをもたらしたアルゴリズム ― MapReduce を発明することはできないだろう。 -- Joel Spolsky [Joel]

たしかに MapReduce は面白い。これほどまでに単純なプログラミングモデルによって,あの巨大なクラスターが駆動しているというのだから,面白くないはずは無い。

Radium Software Development - MapReduce

今すぐ役に立つ知識じゃないかもしれないけど、Lispを学ぶことで得られた知見はきっといつか役に立つよ。

繰り返しますが、先を読んで点と点をつなぐことはできません。後からふり返って初めてできるわけです。したがってあなた方は、点と点が将来どこかでつながると信じなければなりません。自分の勇気、運命、人生、カルマ、何でもいいから、信じなくてはなりません。点がやがてつながると信じることで、たとえそれが皆の通る道からはずれても、自分の心に従う自信が生まれます。これが大きなちがいをもたらしてくれるのです。

H-Yamaguchi.net: Steve Jobsのスピーチ、山口訳

まったく別のものを学ぶことで、違った視点で物事を考えることができるようになるよ。

関数型言語の難しさは、既に手続き型言語を使いこなしている人と、関数型言語で初めてプログラミングに触れる人とで違うのではないかと思われます。既に手続き型言語を知っている場合、その知識が関数型言語を使うにあたって邪魔になる可能性があります。そこで、どんな材料で勉強するにしても、まず一度、手続き型言語でマスターした概念をわきに置いてみることをお薦めします。具体的には…

1. 「こう書くと余分なメモリを食うのでは」とか「ここでコピーするともったいないな」とか「同じ計算を何度もしてるんじゃ?」みたいな、貧民的発想をいったん捨てましょう。無限の速度と無限のメモリを手にしているのだと思い込み (あるいは、処理系がものすごく賢くてうまいことやってくれるんだと信じて) **最初は** ナイーブなコードでいいと開きなおります

2. 手続き型言語でループを書くとき、アセンブラででもなければ条件分岐とgotoは使いませんよね。forやwhileなどを使うと思います。定型的な処理にはイディオムがあるわけです。関数型言語にもイディオムがあり、それは手続き型言語のものとかなり異なります。手続き型言語の知識をあてはめようとするのではなく、例を読んだり課題を解いたりする過程で関数型言語のイディオムを意識的に覚えるようにします。

3. 変数は値を入れる箱ではありません。値、あるいは式そのものに便宜的に名前をつけているだけです。

4. 計算は、つねに関数に値を渡し、その戻り値を使うことで進行します。戻り値は複数あるかもしれません。

5. 構造を持つデータの各要素に対して処理をしたい場合には、(a)その構造全体を一気に処理できる関数(例:map, fold等)を使うか、(b)その構造を「頭」と「残り」に分解し、「頭」を処理して、「残り」は自分自身を再帰で呼んで処理させ、最後に結果を合成します。

関数型言語(プログラミング言語Scheme, Haskellなど)を勉強しようと思っています。 初心者にも関数型言語のメリットや考えかたがスラスラ分かる勉強の材料を教えてくださ.. - 人力検索はてな
トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20090306