2007年5月8日火曜日

YAPC::Asiaメモ(その8)自文書抽出日本的住所

  • Geography::AddressExtract::Japanができるまで
  • 自然文章から住所を抽出したい
    • 日本の住所パターンを研究
    • 郵便番号DBも使える
    • Regexp::Assembleを使って文字列のリストすべてをカバーする正規表現を作る
  • テクニック
    • 都道府県がなくても補完
    • 港区(東京都と名古屋市にある)の場合は街の名前で判別(港区六本木なら東京都)
  • その他問題
    • 人間の書いた住所はゆらぎが多い
    • 異体字問題(Encodeで対応できるらしい)
    • 変わった住所(京都とか):抽出可能
  • Regexp::Trie使えそう
この講演の前身は昨年10月に行われたShibuya Perl Mongersテクニカルトーク#7。個人的にこれがすごく気になっていたのでとうとう見られて幸せ。

アメリカの住所でおなじことをしようと思ったら取り掛かりとしてGeo::StreetAddress::USというのがあるのだが、これは住所フォーマットの解析だけしかしてくれない。

たとえばニューヨーク市シブヤ123番地があったとして、
use Geo::StreetAddress::US;
use Data::Dumper;

$hashref = Geo::StreetAddress::US
->parse_location("123 Shibuya, New York, NY, 10001");
print Dumper($hashref);
はこういう結果を返す。
$VAR1 = {
'number' => '123',
'street' => 'Shibuya',
'state' => 'NY',
'zip' => '10001',
'city' => 'New York',
'suffix' => undef,
'type' => '',
'prefix' => undef
};

ところがYappoさんのモジュールと違って住所の部分を文章から切り出してくれるわけではなく、たとえば住所ではない文字列が混じった
$hashref = Geo::StreetAddress::US
->parse_location("My address is 123 Shibuya, New York, NY, 10001");
print Dumper($hashref);
にすると
$VAR1 = '';
というさびしい結果に。

さて、どうしよう(続く、かも)。

0 件のコメント:

コメントを投稿