Skip to content

Commit

Permalink
feat: 数字と漢数字が連続しているケースにおいて、数字と漢数字は別のブロックとして解析を行う (geolonia#226)
Browse files Browse the repository at this point in the history
* feat: 数字と漢数字が連続しているケースにおいて、数字と漢数字は別のブロックとして解析を行う

* テストケースの文言を「ならないこと」に変更する

---------

Co-authored-by: kiyonori.matsumoto <kiyonori.matsumoto@sansan.com>
  • Loading branch information
kiyonori-matsumoto and kiyo-matsu authored Oct 23, 2023
1 parent e4b4fe5 commit 29600ac
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 13 deletions.
6 changes: 3 additions & 3 deletions src/lib/patchAddr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,21 @@ const addrPatches = [
pref: '香川県',
city: '仲多度郡まんのう町',
town: '勝浦',
pattern: '^字?家6',
pattern: '^字?家[6六]',
result: '家六',
},
{
pref: '愛知県',
city: 'あま市',
town: '西今宿',
pattern: '^字?梶村1',
pattern: '^字?梶村[1一]',
result: '梶村一',
},
{
pref: '香川県',
city: '丸亀市',
town: '原田町',
pattern: '^字?東三分1',
pattern: '^字?東三分[1一]',
result: '東三分一',
},
]
Expand Down
20 changes: 10 additions & 10 deletions src/normalize.ts
Original file line number Diff line number Diff line change
Expand Up @@ -435,40 +435,40 @@ export const normalize: Normalizer = async (
})
})
.replace(
/(([0-9〇一二三四五六七八九十百千]+)(番地?)([0-9〇一二三四五六七八九十百千]+)号)\s*(.+)/,
/(([0-9]+|[〇一二三四五六七八九十百千]+)(番地?)([0-9]+|[〇一二三四五六七八九十百千]+)号)\s*(.+)/,
'$1 $5',
)
.replace(
/([0-9〇一二三四五六七八九十百千]+)\s*(番地?)\s*([0-9〇一二三四五六七八九十百千]+)\s*号?/,
/([0-9]+|[〇一二三四五六七八九十百千]+)\s*(番地?)\s*([0-9]+|[〇一二三四五六七八九十百千]+)\s*号?/,
'$1-$3',
)
.replace(/([0-9〇一二三四五六七八九十百千]+)番地?/, '$1')
.replace(/([0-9〇一二三四五六七八九十百千]+)の/g, '$1-')
.replace(/([0-9]+|[〇一二三四五六七八九十百千]+)番地?/, '$1')
.replace(/([0-9]+|[〇一二三四五六七八九十百千]+)の/g, '$1-')
.replace(
/([0-9〇一二三四五六七八九十百千]+)[--﹣−‐⁃‑‒–—﹘―⎯⏤ーー─━]/g,
/([0-9]+|[〇一二三四五六七八九十百千]+)[--﹣−‐⁃‑‒–—﹘―⎯⏤ーー─━]/g,
(match) => {
return kan2num(match).replace(/[--﹣−‐⁃‑‒–—﹘―⎯⏤ーー─━]/g, '-')
},
)
.replace(
/[--﹣−‐⁃‑‒–—﹘―⎯⏤ーー─━]([0-9〇一二三四五六七八九十百千]+)/g,
/[--﹣−‐⁃‑‒–—﹘―⎯⏤ーー─━]([0-9]+|[〇一二三四五六七八九十百千]+)/g,
(match) => {
return kan2num(match).replace(/[--﹣−‐⁃‑‒–—﹘―⎯⏤ーー─━]/g, '-')
},
)
.replace(/([0-9〇一二三四五六七八九十百千]+)-/, (s) => {
.replace(/([0-9]+|[〇一二三四五六七八九十百千]+)-/, (s) => {
// `1-` のようなケース
return kan2num(s)
})
.replace(/-([0-9〇一二三四五六七八九十百千]+)/, (s) => {
.replace(/-([0-9]+|[〇一二三四五六七八九十百千]+)/, (s) => {
// `-1` のようなケース
return kan2num(s)
})
.replace(/-[^0-9]([0-9〇一二三四五六七八九十百千]+)/, (s) => {
.replace(/-[^0-9]([0-9]+|[〇一二三四五六七八九十百千]+)/, (s) => {
// `-あ1` のようなケース
return kan2num(zen2han(s))
})
.replace(/([0-9〇一二三四五六七八九十百千]+)$/, (s) => {
.replace(/([0-9]+|[〇一二三四五六七八九十百千]+)$/, (s) => {
// `串本町串本1234` のようなケース
return kan2num(s)
})
Expand Down
18 changes: 18 additions & 0 deletions test/main.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -871,6 +871,24 @@ for (const [runtime, normalize] of cases) {
expect(res).toStrictEqual({"pref": "東京都", "city": "千代田区", "town": "永田町一丁目", "addr": "2-3-レジデンス億万101", "lat": 35.675895, "lng": 139.746306, "level": 3})
})

test('東京都千代田区三番町2番地4三番町KSビル10階(番地と建物名が混ざり、「番」が消えることがないこと)', async () => {
const res = await normalize('東京都千代田区三番町2番地4三番町KSビル10階')
expect(res).toStrictEqual({"pref": "東京都", "city": "千代田区", "town": "三番町", "addr": "2-4三町KSビル10階", "lat": 35.690557, "lng": 139.743591, "level": 3})
})

test('東京都千代田区神田美土代町9番地7千代田21ビル7階(「7千代田」が「7000代田」にならないこと)', async () => {
const res = await normalize('東京都千代田区神田美土代町9番地7千代田21ビル7階')
expect(res).toStrictEqual({
pref: '東京都',
city: '千代田区',
town: '神田美土代町',
addr: '9-7千代田21ビル7階',
lat: 35.693283,
lng: 139.765581,
level: 3
})
})

describe('途中にスペースを含むケース', () => {
// https://github.com/geolonia/normalize-japanese-addresses/issues/180
test('京都府京都市 下京区上之町999', async () => {
Expand Down

0 comments on commit 29600ac

Please sign in to comment.