hirax.net::inside out::2011年02月04日

最新記事(inside out)へ  |   年と月を指定して記事を読む(クリック!)

2011年1月 を読む << 2011年2月 を読む >> 2011年3月 を読む

2011-02-04[n年前へ]

Wolfram|Alphaの機能をRubyから使う 

 Wolfram ResearchのWolfram|Alphaは、「科学・工学系の問いに答える」ことが得意な検索エンジンです。Wolframが長年開発して来た(データベース内の規則に沿ってパターンマッチングを繰り返すことでで)数式処理を実現するMathematicaと重なるところも多い、そんな検索エンジンです。

 Wolfram|Alphaの機能は、開発者登録すれば、(2000クエリー/月という、少なく限られた処理数ですが)WEB APIとして試し・使ってみることができます。先日、WEB APIのVer.2.0版が公開されたので、試しに使ってみることにしました。

 WEB APIへの入出力を楽にするために、

  • Java
  • Python
  • Ruby
  • Perl
  • PHP
  • .NET
  • Mathematica
といった、各言語用のライブラリが用意されていています(C++は近日登場ということです)。そこで、まずは、RubyからWolfram|Alphaの機能を使ってみることにしました。

 手順は、およそ、こんな具合です。まずは、 開発用APIコードを登録します。そして、各言語用ライブラリのダウンロードページから直接ライブラリをダウンロードするか、あるいは、gitから、

git clone git://github.com/ianwhite/wac.git
という具合に、Ruby用ライブラリをダウンロードします。このライブラリ"wac"は、処理の過程で"nokogiri"と"active support"を使うので、
sudo gem update --system
sudo gems install nokogiri
sudo gem install activesupport
といった感じで、先にインストールをしておきます。(新しい)"active_support"ではなく、(古い)"activesupport"をインストールするのは、(後述する)delegateのエラー回避を簡易に行うためです。

 そして、wac.rbの冒頭を

#require 'active_support'
require 'activesupport'
と書き換えます。つまり、古いActive Supportを読み込むように指定してやるのです。そのようにしてやらないと、"NoMethodError: undefined method `delegate' for…といったエラーメッセージに出くわすことになります。

 後は、たとえばirbで、

irb
>> require 'wac'
>> Wac.appid = "ここにAPIコード"
>> r = Wac.fetch 'solve[x^2+3==0,x]'
とすると、
Result: x = ±(i sqrt(3))
±(1.73205 i)
という風に答えてくれますし、あるいは、
>> r = Wac.fetch 'obama birthday'
と聞けば、
Result: Friday, August 4, 1961
と、教えてくれるのです。

 Mathematicaのパワーを使うことができるのは、とても魅力的です。「あなたのアイデア」+「Mathematicaのパワー」=「無限の可能性」という方程式を解いてみるのは、とても楽しいことに違いありません。コンピュータのデータベース・記憶力と、ヒトが持つ柔らかな発想を組み合わせれば、最強の何かを生み出すことができるはずです。