Geography::AddressExtract::Japanを使って住所抽出

Web::Scraperを使って、物件一覧をGoogle Mapsにマッピング : cotalog の記事ですが、住所を取得するところはかなりあやしいというか、てきとーな正規表現でごまかしていました。

はてブのコメントでjmalaさんに教えてもらった、
住所抽出モジュールをCodeReposにもってきた - Yappo::Hatena::Diaryを早速チェックアウトして利用してみることに。

2006/10/20 Shibuya.pm tech talk #7 Geography::AddressExtract::Japan - Yappoも合わせて読んでみたのですが、凄いですよこのモジュールは。

try.pl

#!/usr/local/bin/perl

use strict;
use Geography::AddressExtract::Japan;
use encoding "utf8", STDOUT => "utf8";

my $addr = <<_EOD_;
+*。+純和風♪駅が近いので通勤・通学、奥様のショッピングにも便利なんデスヨ~(人・∀・*)+。*+
■□加藤邸(桜台)  福岡県筑紫野市桜台1丁目7-11 □■

+*○。+純和風のとても素敵なお家です!広さは4LDKと広々!駐車場も一台付いていまーす +。○*+
_EOD_

my $t = Geography::AddressExtract::Japan->extract($addr);

print map { $_->{"city"} . $_->{"aza"} . $_->{"number"} . "
"; }@{$t};

これを実行すると、

福岡県筑紫野市桜台1丁目7-11

と返ってきます。
スゲースゲースゲー!!

というわけで、Web::Scraperを使って、物件一覧をGoogle Mapsにマッピング : cotalog の記事中のmovimap_scrape.plでGeography::AddressExtract::Japanを使うように修正したのがこちら。

movimap_scrape.pl

#!/usr/local/bin/perl
use strict;
use warnings;
use Web::Scraper;
use Data::Dumper;
use Template;
use URI;
use Geography::AddressExtract::Japan;

use encoding "utf8", STDOUT => "utf8";

my $uri = URI->new("http://www.movimap.net/kodawariblog/family/");
my $scraper = scraper {
  process '//div[@class="box"]/div[@class="box01"]/h3/a', 'link[]' => '@href', 'title[]' => 'TEXT';
    process '//div[@class="box"]/div[@class="box02"]/p', 'address[]' => 'TEXT';
};
my $result = $scraper->scrape($uri);

my @list;
for my $i ( 0 .. scalar @{$result->{"address"}} - 1 ){
  my $addr = Geography::AddressExtract::Japan->extract($result->{"address"}->[$i]);
  push @list, {
    address => $addr->[0]->{"city"} . $addr->[0]->{"aza"} . $addr->[0]->{"number"},
    link => $result->{"link"}->[$i],
    title => $result->{"title"}->[$i],
  };
}
my $tt = Template->new({
  INCLUDE_PATH => ".", EVAL_PERL => 1
});

$tt->process("map.tt", { result => @list });

Geography::AddressExtract::Japan最高っす!

<追記:2007-11-16 06:00>
スクリプト内のバックスラッシュが投稿時にトンじゃってましたので修正しました。
<追記ここまで>

pagetop