Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
romajip: 日本の住所CSVデータを活用した英語住所変換ライブラリを作った話
Search
sangun kang
November 22, 2024
Programming
3.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
romajip: 日本の住所CSVデータを活用した英語住所変換ライブラリを作った話
https://jsconf.jp/2024/talk/kang-sangun/
sangun kang
November 22, 2024
More Decks by sangun kang
See All by sangun kang
AIは無限にレビューを書く。 俺の脳みそは1個しかない
sangunkang
0
32
ペパボ ホスティング事業部のブラウザレンダリング基本知識 2022 / Browser Rendering Basics of pepabo hosting division
sangunkang
0
10k
Other Decks in Programming
See All in Programming
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
350k
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
800
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
620
さぁV100、メモリをお食べ・・・
nilpe
0
150
Contextとはなにか
chiroruxx
1
370
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
230
dRuby over BLE
makicamel
2
390
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
14
5.8k
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
1
350
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.3k
Lessons from Spec-Driven Development
simas
PRO
0
220
Oxcを導入して開発体験が向上した話
yug1224
4
340
Featured
See All Featured
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
310
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
350
Color Theory Basics | Prateek | Gurzu
gurzu
0
370
The untapped power of vector embeddings
frankvandijk
2
1.8k
Mind Mapping
helmedeiros
PRO
1
260
Navigating Team Friction
lara
192
16k
The Spectacular Lies of Maps
axbom
PRO
1
820
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
230
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Crafting Experiences
bethany
1
190
Embracing the Ebb and Flow
colly
88
5.1k
Transcript
romajip 📮 日本の住所データを活用した英語住所変換ライブラリを作った話 2024-11-23 / JSConfJP / Sangun Kang
姜 相雲(カン サンウン) / 韓国 日本6年目 / GMOペパボ
もくじ • 「romajip」ってなに? • 巨大な住所の世界へ ◦ こだわり ◦ 苦労した部分 •
今後やること
「romajip」ってなに? 普段の英語住所を検索する方法
「romajip」ってなに? https://romajip-demo.vercel.app/ 郵便番号を使わず、 「日本語住所」を「英語住所」に変換するライブラリ
• WHOISで必要な英語住所情報入力 を簡単にしたい • リポジトリだけ作って1年放置 • お盆休みで作った ムームードメイン 「romajip」ってなに?
巨大な住所の世界へ
都道府県: 43 市区町村: 1,714 町名: めっちゃ多い romajiでは小字は除外 巨大な住所の世界へ
巨大な住所の世界へ 日本の住所マスタは郵便局とデジタル庁がCSVで提供 郵便番号ベースの郵便局 もっと具体的な住所を集めたデジタル庁
巨大な住所の世界へ 一般的には郵便局の住所を利用
巨大な住所の世界へ 「romajip」はデジタル庁のデータを利用 目的は「日本語」住所を「英語」に変換
こだわり
巨大な住所の世界へ - こだわり 男は数字に 頼らない 郵便番号を使わないと決心 → 郵便番号使った方が圧倒的に楽 → 「日本語」を使うパタンがない
→ データセットの設計、処理に苦労 設定Zero,すぐ使えるOSSを目指す → デカいCSVを必要な情報だけ最適化して ライブラリのバンドルに含める その結果。。
巨大な住所の世界へ - こだわり ユーティル系ライブラリとして許せないサイズ
苦労した部分
• 標準化されてそうで そうでもない各自の住所 • 日本橋と日本橋 • 志布志市志布志町志布志 • 兵庫県南あわじ市市市 巨大な住所の世界へ
- 苦労した部分
巨大な住所の世界へ - 苦労した部分 • 初期は行政区画の基準にデータ セットを生成 • 日本語住所もそれを基準にSplit • 探せないケース多い
• 地域によって少し違う
巨大な住所の世界へ - 苦労した部分 • 初期のデータセットを捨てる • 各地域の関係性を単純に 上位Treeと下位Treeに変更 • split
-> Longest Match
事前に用意されたデータセットを基準に 日本語住所を「longest match」し、下 位Nodeが無くなるまで繰り返す 住所のデータセットは 日本語 : 英語 形 式のオブジェクトになる
「Longest Match」とは? 入力文字列の先頭から、一番長く一致する部分を探す手法 例えば「福岡県福岡市中央区」の場合: 1. 最上位Nodeでは「福岡県」が一致する -> 「Fukuoka-ken」を返す 2. 下位Nodeでは「福岡市」が一致する -> 「Fukuoka-shi」を返す 3. 下位Nodeでは「中央区」が一致する -> 「chuo-ku」を返す これにより、市市(イチシ)のように行政区画名が入る地名も安全に検索ができる 巨大な住所の世界へ - 苦労した部分
巨大な住所の世界へ - 苦労した部分 デジタル庁の でマスタデータは150MB
• 必要情報だけ抽出 • 小字を消す ◦ 字は住所体系から廃止 • 「町、村」など接尾辞を略語にする ◦ 処理で担保
◦ 塵を集めて大山を作る(5MB程度) 巨大な住所の世界へ - 苦労した部分
今後やること • バンドルサイズを縮小 ◦ データセットが4MB ◦ ビルドのやり方を改善 • 郡、市から検索できるように ◦
都道府県は省略するケースが多い • いろんな読み方に対応
📮ありがとうございました 📮 github.com/Sangun-Kang/romajip x.com/ksu_302