yamat47 / japanese_address_parser Goto Github PK
View Code? Open in Web Editor NEWJapanese address parser written in Ruby.
License: MIT License
Japanese address parser written in Ruby.
License: MIT License
自分の手元で Ruby がビルドできなくなってしまったので。
せっかく作るので、リポジトリにも上げておく。
あまり直感的ではない一致の仕方をしてしまうことがあるので。
元々は長野県の県庁所在地の解析をするための対応だった。
こちらを特例として特殊対応する方針にする。
欲を言えば自動反映したい。
難しいとしたら、手順をまとめておきたい。
geolonia/japanese-addresses が提供している最新の CSV ファイルに追随していないようです。
たとえば、
geolonia/japanese-addresses#118
で issue に挙がっていた「福島県東白川郡矢祭町」のローマ字表記がデモサイトでは、「HIGASHISHIRAKAWA GUN YAMATSURI MACH」(MACH -> MACHI でないといけない)になっています。これは最新の latest.csv では修正済みです。
japanese-addresses で提供する CSV ファイルは、issues に挙がってくる問題を修正したり、ほかにも国土地理協会が提供する地名変更情報を取り込んだりと、毎月更新しているので、できれば、更新があったときに japanese_address_parser も更新される仕組みがあると望ましいと思います。
例えば「沖縄県宮古島市平良字西里186」は解析できない。
元データのふりがな欄も不十分だが、とりあえず解析できるようにする。
#30 をマージしたことで不要になったコードがたくさんある。
ドキュメントの更新と合わせて対応する。
rubyのheadでCIが落ちる原因はraccがdefaultのbundledから外れてしまっていることが原因のようです。
そのため、raccを利用しているparser gemをupdateすれば最新のRubyでCIが動かせるようになると思います。
町丁目がない住所データに対して、以下のように誤ったふりがなデータが返ってくる。
[1] pry(main)> JapaneseAddressParser.call('富山県滑川市1-1').furigana
=> "トヤマケンナメリカワシアカハマ"
[3] pry(main)> JapaneseAddressParser.call('東京都調布市1-1').furigana
=> "トウキョウトチョウフシコクリョウチョウ"
[4] pry(main)> JapaneseAddressParser.call('東京都三鷹市1-1').furigana
=> "トウキョウトミタカシキタノ 4"
irb(main):001:0> JapaneseAddressParser.call('東京都北区赤羽1-2-3')
/Users/yamat47/.rbenv/versions/3.1.0/lib/ruby/3.1.0/csv.rb:1433:in `initialize': No such file or directory @ rb_sysopen - lib/japanese_address_parser/data/prefectures.csv (Errno::ENOENT)
Schmoozeを使うようになり、明らかに処理にかかる時間が延びた。
何かしらの方法で、パフォーマンス改善をしたい。
キャッシュ? トランスパイル? 独自実装?
解析するときには表記揺れを防ぐために旧字体を新字体に置き換えている。
これが CSV データの方で行われていないため、町域が見つからなくなってしまっている。
いろいろなところをテストに追加したい。
RuboCop や Steep のチェックは一回だけ実行すればいい。
並行処理する中に入れるとリソースが勿体ない。
そこそこ動くようになったので。
参考: https://github.com/yamat47/japanese_address_parser/actions/runs/5630989328/job/15257504912
3.3 の preview1 では問題なく動く。
さらに最新のバージョンだと動かなくなってしまっている。
一時的に CI で head を実行するのを停止する。
pry(main)> JapaneseAddressParser.call('愛知県名古屋市中村区名駅1-1-10').furigana => "アイチケンナゴヤシナカムラクメイエキ(1-1-8、1-1-12、1-1-13、1-1-14、1-3-4、 1"
「愛知県名古屋市中村区名駅1-1-10」のふりがなデータが正しくない。
「アイチケンナゴヤシナカムラクメイエキ 1」と返してほしい。
CIの設定ファイルの名前が変わったのが原因。
稀に、住所を解析するときに Schmooze を使って呼び出す仕組みがエラーを返すことがあるみたい。
そういうときに、このライブラリで吸収して適切なエラーを返すようにしたい。
ついでに、依存する gem のバージョンを上げる。
Actual実行結果が正しいと思うので、READMEを修正するPRを作成いたします!
address = JapaneseAddressParser.call('東京都港区芝公園4-2-8')
address.full_address #=> "東京都港区芝公園4-2-8"
address = JapaneseAddressParser.call('東京都港区芝公園4-2-8')
address.full_address #=> "東京都港区芝公園四丁目"
いくつか差分があったので。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.