最新 RSS

horiday blog

2007/1/3

[perl] 検索エンジン Web サービス

最近検索エンジンへの検索式(検索キーワード)を拡張するプログラムを書いています.

似たような話で Google や Yahoo! の関連検索があります.検索キーワードに「11n」と入れると下記のように「無線 11n」という検索キーワードに関連したキーワードを付けてくれるものです.

Google や Yahoo! の関連検索については下記に少し分析が書かれていますが,ユーザの検索キーワードベースか Web コンテンツベースかという違いがあるような気がします.

私もあるキーワードに対して関連語を用意して,その有効性を調べてみようと思って検索エンジンに色々な問い合わせを行なっていたところ,ある時急に検索エンジンから接続を拒否されました.

どうやらプログラムでやたら検索エンジンを利用するのはイケなかったようです...すいません.

そこで開発者用の検索エンジンの Web サービスというのを使ってみました.それぞれ下記のようなものになっています.

Yahoo!JAPAN

  • アクセス方法: REST
  • 検索制限回数: 50000 /24h
  • 1 検索における最大検索結果数: 50
  • 1 クエリにおける最大検索語数: ?

Google

  • アクセス方法: SOAP
  • 検索制限回数: 1000 /1day
  • 1 検索における最大検索結果数: 10
  • 1 クエリにおける最大検索語数: 32

Google の方は利用可能な検索回数が少ない上に,現在は新規利用者を打ち切りしているので Yahoo! の方を使ってみました.

まずこのページからアプリケーション ID を登録して,下記のコードを実行したら Web 検索結果が得られました.

#!/usr/bin/env perl
# yapi_test.pl: 
# usage:
#   yapi_test.pl <kw>
use strict;
use LWP::Simple;
use XML::Simple;
use Data::Dumper;

my $kw = shift;
$kw =~ s/([^0-9A-Za-z_])/'%'.unpack('H2',$1)/ge;
$kw =~ s/ /+/g;

my $appid = "your appid";
my $top = "http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch?";
my $url = $top . "appid=$appid&query=$kw&results=50";

my @ranking = map {$_->{Url}} @{get_results($url)}; 
print Dumper @ranking;

sub get_results {
   my ($url) = @_;
   my $yahoo_response = get($url);
   my $xmlsimple = XML::Simple->new();
   my $yahoo_xml = $xmlsimple->XMLin($yahoo_response);
   if (ref($yahoo_xml->{Result}) eq "ARRAY") { # found: many
       return $yahoo_xml->{Result};
   } elsif (ref($yahoo_xml->{Result}) eq "HASH") { # found: 1
       return [$yahoo_xml->{Result}];
   }
   return []; # not found
}

実行すると下記のような感じになります.これで一日 5 万回まで実験ができそうです.

% perl yapi_test.pl 'som_pak vsom'
$VAR1 = 'http://mikilab.doshisha.ac.jp/dia/research/report/2005/0822/007/report20050822007.html';
$VAR2 = 'http://www.okada.jp.org/RWiki/index.php?R%A4%C7SOM(%BC%AB%B8%CA%C1%C8%BF%A5%B2%BD%A5%DE%A5%C3%A5%D7)';
$VAR3 = 'http://www.cis.hut.fi/research/som_pak/som_doc.txt';
$VAR4 = 'http://hpux.connect.org.uk/hppd/cgi-bin/wwwtar?/hpux/NeuralNets/som_pak-1.2/som_pak-1.2-src-9.01.tar.gz+som_pak-1.2/makefile.bsd+text';
$VAR5 = 'http://www.cis.hut.fi/somtoolbox/package/docs2/som_sompaktrain.html';
....

[useful] より効果的なグラフを書こうというときに見るページ

正月でグアム旅行をしていたのですが,知り合いとメッセで

原稿に載せるグラフはどんなものが良いでしょうかね

という話をしていました.私はいまだに gnuplot を使ったりしているのですが,グラフを書く前にインスプレーションを受けるには下記のサイトのデータ一覧を見てグラフの形式を決めました.見た目だけの問題なのですが...