郵便番号検索 ybks 公開、というか再公開
2006-04-23-2
[Programming]
SUFARY を使った簡単で高速な郵便番号検索 CGI です。
昔作ったのですが、また作ってみたのでソースともども公開します。
郵便番号検索 ybks
http://ta2o.net/tools/ybks/ybks.cgi
■歴史
1998年、NAIST(大学院)にいたときに作って、
「速い! 7桁郵便番号検索」という名前で公開していました。
- 1998.6.30 : https://nikki.chalow.net/19980630.html
- Yahoo!検索 : 郵便番号検索 たつをの日記
- Google検索 : 郵便番号検索 たつをの日記
web.archive.org にあった一番古いもの(1998.12.3):
■設置方法
必要なもの。
- SUFARY http://ta2o.net/tools/sufary/ および、
その Perl モジュール。
- nkf, lha, wget
ソースを入手(後述)。
データの準備。
ybks.cgi 中の $ybdata を設定。
■参考
- 簡単なテキスト検索 CGI の雛型(古めです)
http://ta2o.net/tools/stct/
- 郵便番号等のダウンロード(使った郵便番号データ)
http://www.post.japanpost.jp/zipcode/download.html
http://www.post.japanpost.jp/zipcode/dl/kogaki.html
- [を] Suffix Array の解説文書のリンク集[2006-04-10-3]
SUFARYで用いているアルゴリズム。
■ソース
mkybdata.pl (文字コードは EUC-JP)
ybks.cgi (文字コードは EUC-JP)
れることがあります。とはいえ、実用上は問題ないと思います。
SUFARY.pm とともに DID.pm を使うと大丈夫なのですが、それはまた今度。
昔作ったのですが、また作ってみたのでソースともども公開します。
郵便番号検索 ybks
http://ta2o.net/tools/ybks/ybks.cgi
■歴史
1998年、NAIST(大学院)にいたときに作って、
「速い! 7桁郵便番号検索」という名前で公開していました。
- 1998.6.30 : https://nikki.chalow.net/19980630.html
- Yahoo!検索 : 郵便番号検索 たつをの日記
- Google検索 : 郵便番号検索 たつをの日記
web.archive.org にあった一番古いもの(1998.12.3):
■設置方法
必要なもの。
- SUFARY http://ta2o.net/tools/sufary/ および、
その Perl モジュール。
- nkf, lha, wget
ソースを入手(後述)。
データ作成 | mkybdata.pl |
検索CGI | ybks.cgi |
データの準備。
wget http://www.post.japanpost.jp/zipcode/dl/kogaki/lzh/ken_all.lzh lha x ken_all.lzh nkf -e ken_all.csv | mkybdata.pl > ybdata mkary ybdata
ybks.cgi 中の $ybdata を設定。
■参考
- 簡単なテキスト検索 CGI の雛型(古めです)
http://ta2o.net/tools/stct/
- 郵便番号等のダウンロード(使った郵便番号データ)
http://www.post.japanpost.jp/zipcode/download.html
http://www.post.japanpost.jp/zipcode/dl/kogaki.html
- [を] Suffix Array の解説文書のリンク集[2006-04-10-3]
SUFARYで用いているアルゴリズム。
■ソース
mkybdata.pl (文字コードは EUC-JP)
※ワンライナーでいいじゃん、というレベル。汎用性なし。#!/usr/bin/perl use strict; use warnings; while (<>) { my @c = split(/"?,"?/, $_); die if (@c != 15); $c[8] =~ s/以下に.+$/*/; print $c[2]." ".join("", @c[6,7,8])."\n"; }
ybks.cgi (文字コードは EUC-JP)
※現在のバージョンでは検索キーワードを複数含む住所は、複数回表示さ#!/usr/bin/perl use strict; use warnings; use CGI; use SUFARY; my $ybdata = "/home/yto/ybks/ybdata"; my $suf = SUFARY->new($ybdata); my $q = new CGI; my $key = $q->param('key') || ""; print $q->header(-charset => 'EUC-JP'); print $q->start_html(-title=>'郵便番号検索 ybks'); print $q->h1('郵便番号検索 ybks'); print $q->startform(-method => 'GET', -name => 'myform'), $q->textfield('key'), $q->submit('search'), $q->endform; search_and_print($suf, $key) unless ($key =~ /^\s*$/); print $q->end_html(), "\n"; sub search_and_print { my ($suf, $key) = @_; my @res = $suf->search($key); print "<pre>", scalar(@res), "件見つかりました。\n\n"; for my $i (0..$#res) { if ($i == 999) { print "\nヒット数が多いのでここまで!\n"; last; } my $str = $suf->get_line($res[$i]); $str =~ s!($key)!<span style="background-color:pink">$1</span>!g; printf "<b>%3d</b>. %s", $i + 1, $str; } print "</pre>"; }
れることがあります。とはいえ、実用上は問題ないと思います。
SUFARY.pm とともに DID.pm を使うと大丈夫なのですが、それはまた今度。