ATOKダイレクトプラグインで郵便番号検索
自宅には、Windows マシンが無いので、休日に会社マシンで、ATOK ダイレクトプラグインの環境を設定し、すこし遊んでみた。
web 上のいくつかのサンプルコードで、作り方を勉強した後、
昨日作った ruby での郵便番号番号検索を、ATOK プラグイン化してみた。
郵便番号の一部 or 住所の一部で検索できるようにしてある。
作ってみて思ったのは、2点。
1. ATOK の選択候補画面のカスタマイズもユーザー側でできるようにして欲しいということ。
候補画面の GUI も ruby で作りたいものだ。
2. Debug 環境は、もう少し工夫したものが作れそうな気がする。
Netbeans 上でのデバッガをつかえような、実行用メインメソッドをつくれば済む?
なお、sqlite3 の DB は、 firefox のプラグインの SQLite Manager を使うと内容確認などには便利。
$ cat zip-search.rb
#! /usr/bin/ruby -Ku
$KCODE = 'u'
require 'timeout'
require 'rubygems'
require 'active_record'
require 'nkf'
module Atok_plugin
class Zip < ActiveRecord::Base
def to_s
return "#{col1}|#{col2}|#{col3}|#{col4.toutf8}|#{col5.toutf8}|#{col6.toutf8}|#{col7.toutf8}|#{col8.toutf8}|#{col9.toutf8}|#{col10}|#{col11}|#{col12}|#{col13}|#{col14}|#{col15}"
end
end
def run_process( a_request_data )
ActiveRecord::Base.establish_connection(
:adapter => "sqlite3",
:database => "zips.db",
:timeout => 5000
)
# ログをファイルに出す
# ActiveRecord::Base.logger = Logger.new("debug.log")
res = []
timeout(20) do
key = "%" + a_request_data['composition_string'] + "%"
res = Zip.find(:all, :conditions => ["col3 like ? or col7 like ? or col8 like ? or col9 like ?", key, key, key, key])
end
ans = []
res.each do |r|
ans << {'hyoki' => r.col3 + "|" + r.col7 + r.col8 + r.col9, 'comment' => r.to_s}
end
{'candidate' => ans}
rescue Exception => e
{'candidate' => [{'hyoki' => 'エラーが発生しました', 'comment' => e.to_s}]}
end
end
ローカルマシンの DB 管理するよりは、memcached でデータを共有したほうが良い気がする。
memcached で、社員名簿 (名前、内線番号、所属部署) などを保持して、それを ATOK + ruby で検索したり、データ内容の保守ができるようにするぐらいが向いているかな。
ともかくここ2日の作業で、10 万件を超える郵便番号の検索が ATOK + ruby で十分可能なことが分かった。
XBRLデータから科目ID, 科目表記名、期間毎の値 をDBに保持して それを検索するようなことは、問題なく実現できそうだとの感触を得られた。
最近のコメント