japanese_address_parser 2.2.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/Gemfile.lock +1 -1
- data/js/node_modules/.package-lock.json +7 -7
- data/js/node_modules/@geolonia/japanese-numeral/dist/index.js +1 -1
- data/js/node_modules/@geolonia/japanese-numeral/dist/oldJapaneseNumerics.js +1 -0
- data/js/node_modules/@geolonia/japanese-numeral/dist/utils.js +5 -1
- data/js/node_modules/@geolonia/japanese-numeral/package.json +1 -1
- data/js/node_modules/@geolonia/japanese-numeral/src/index.ts +1 -1
- data/js/node_modules/@geolonia/japanese-numeral/src/oldJapaneseNumerics.ts +1 -0
- data/js/node_modules/@geolonia/japanese-numeral/src/utils.ts +6 -1
- data/js/node_modules/@geolonia/japanese-numeral/test/test.ts +5 -0
- data/js/node_modules/@geolonia/normalize-japanese-addresses/README.md +21 -14
- data/js/node_modules/@geolonia/normalize-japanese-addresses/dist/config.d.ts +1 -5
- data/js/node_modules/@geolonia/normalize-japanese-addresses/dist/lib/cacheRegexes.d.ts +1 -0
- data/js/node_modules/@geolonia/normalize-japanese-addresses/dist/main-browser.d.ts +1 -1
- data/js/node_modules/@geolonia/normalize-japanese-addresses/dist/main-browser.js +94 -36
- data/js/node_modules/@geolonia/normalize-japanese-addresses/dist/main-node.d.ts +1 -1
- data/js/node_modules/@geolonia/normalize-japanese-addresses/dist/main-node.js +88 -35
- data/js/node_modules/@geolonia/normalize-japanese-addresses/dist/normalize.d.ts +13 -0
- data/js/node_modules/@geolonia/normalize-japanese-addresses/package.json +4 -4
- data/js/node_modules/@geolonia/normalize-japanese-addresses/src/config.ts +1 -6
- data/js/node_modules/@geolonia/normalize-japanese-addresses/src/lib/cacheRegexes.ts +45 -9
- data/js/node_modules/@geolonia/normalize-japanese-addresses/src/lib/dict.ts +2 -2
- data/js/node_modules/@geolonia/normalize-japanese-addresses/src/main-browser.ts +1 -2
- data/js/node_modules/@geolonia/normalize-japanese-addresses/src/main-node.ts +2 -3
- data/js/node_modules/@geolonia/normalize-japanese-addresses/src/normalize.ts +43 -15
- data/js/package-lock.json +14 -14
- data/lib/japanese_address_parser/data/01-01204.csv +1 -1
- data/lib/japanese_address_parser/data/01-01206.csv +2 -2
- data/lib/japanese_address_parser/data/01-01210.csv +1 -1
- data/lib/japanese_address_parser/data/01-01224.csv +1 -1
- data/lib/japanese_address_parser/data/01-01230.csv +1 -1
- data/lib/japanese_address_parser/data/01-01303.csv +1 -1
- data/lib/japanese_address_parser/data/01-01407.csv +3 -3
- data/lib/japanese_address_parser/data/01-01610.csv +1 -1
- data/lib/japanese_address_parser/data/01-01632.csv +1 -1
- data/lib/japanese_address_parser/data/01-01637.csv +1 -1
- data/lib/japanese_address_parser/data/01-01646.csv +1 -1
- data/lib/japanese_address_parser/data/01-01691.csv +1 -1
- data/lib/japanese_address_parser/data/03-03202.csv +1 -1
- data/lib/japanese_address_parser/data/03-03205.csv +29 -29
- data/lib/japanese_address_parser/data/03-03209.csv +56 -56
- data/lib/japanese_address_parser/data/03-03213.csv +1 -1
- data/lib/japanese_address_parser/data/03-03302.csv +1 -1
- data/lib/japanese_address_parser/data/03-03366.csv +1 -1
- data/lib/japanese_address_parser/data/03-03483.csv +1 -1
- data/lib/japanese_address_parser/data/03-03524.csv +1 -1
- data/lib/japanese_address_parser/data/04-04101.csv +6 -6
- data/lib/japanese_address_parser/data/04-04206.csv +32 -32
- data/lib/japanese_address_parser/data/04-04207.csv +41 -41
- data/lib/japanese_address_parser/data/06-06203.csv +1 -1
- data/lib/japanese_address_parser/data/07-07207.csv +1 -1
- data/lib/japanese_address_parser/data/07-07301.csv +2 -2
- data/lib/japanese_address_parser/data/11-11201.csv +3 -3
- data/lib/japanese_address_parser/data/12-12211.csv +1 -1
- data/lib/japanese_address_parser/data/12-12215.csv +2 -2
- data/lib/japanese_address_parser/data/13-13103.csv +2 -2
- data/lib/japanese_address_parser/data/13-13104.csv +3 -3
- data/lib/japanese_address_parser/data/13-13116.csv +5 -5
- data/lib/japanese_address_parser/data/14-14402.csv +2 -2
- data/lib/japanese_address_parser/data/15-15210.csv +5 -5
- data/lib/japanese_address_parser/data/15-15222.csv +4 -4
- data/lib/japanese_address_parser/data/15-15226.csv +1 -1
- data/lib/japanese_address_parser/data/16-16207.csv +1 -1
- data/lib/japanese_address_parser/data/16-16323.csv +2 -2
- data/lib/japanese_address_parser/data/17-17201.csv +26 -26
- data/lib/japanese_address_parser/data/17-17202.csv +1 -1
- data/lib/japanese_address_parser/data/17-17206.csv +29 -29
- data/lib/japanese_address_parser/data/19-19209.csv +1 -1
- data/lib/japanese_address_parser/data/19-19213.csv +2 -2
- data/lib/japanese_address_parser/data/20-20210.csv +1 -1
- data/lib/japanese_address_parser/data/20-20385.csv +14 -0
- data/lib/japanese_address_parser/data/20.csv +1 -13
- data/lib/japanese_address_parser/data/22-22135.csv +1 -1
- data/lib/japanese_address_parser/data/22-22209.csv +1 -1
- data/lib/japanese_address_parser/data/22-22210.csv +1 -1
- data/lib/japanese_address_parser/data/22-22211.csv +1 -1
- data/lib/japanese_address_parser/data/22-22325.csv +2 -2
- data/lib/japanese_address_parser/data/22-22341.csv +1 -1
- data/lib/japanese_address_parser/data/23-23105.csv +5 -5
- data/lib/japanese_address_parser/data/24-24205.csv +1 -1
- data/lib/japanese_address_parser/data/25-25202.csv +1 -1
- data/lib/japanese_address_parser/data/26-26102.csv +14 -14
- data/lib/japanese_address_parser/data/26-26103.csv +1 -1
- data/lib/japanese_address_parser/data/26-26104.csv +9 -9
- data/lib/japanese_address_parser/data/26-26105.csv +4 -4
- data/lib/japanese_address_parser/data/26-26106.csv +15 -15
- data/lib/japanese_address_parser/data/26-26107.csv +1 -1
- data/lib/japanese_address_parser/data/27-27145.csv +1 -1
- data/lib/japanese_address_parser/data/27-27202.csv +1 -1
- data/lib/japanese_address_parser/data/27-27208.csv +2 -2
- data/lib/japanese_address_parser/data/27-27211.csv +1 -1
- data/lib/japanese_address_parser/data/27-27227.csv +2 -2
- data/lib/japanese_address_parser/data/28-28109.csv +41 -41
- data/lib/japanese_address_parser/data/28-28201.csv +1 -1
- data/lib/japanese_address_parser/data/28-28204.csv +1 -1
- data/lib/japanese_address_parser/data/28-28208.csv +7 -7
- data/lib/japanese_address_parser/data/28-28217.csv +3 -3
- data/lib/japanese_address_parser/data/28-28226.csv +1 -1
- data/lib/japanese_address_parser/data/29-29201.csv +50 -50
- data/lib/japanese_address_parser/data/29-29203.csv +1 -1
- data/lib/japanese_address_parser/data/30-30304.csv +3 -3
- data/lib/japanese_address_parser/data/34-34210.csv +2 -2
- data/lib/japanese_address_parser/data/35-35201.csv +1 -1
- data/lib/japanese_address_parser/data/35-35213.csv +2 -2
- data/lib/japanese_address_parser/data/36-36201.csv +15 -15
- data/lib/japanese_address_parser/data/36-36202.csv +14 -14
- data/lib/japanese_address_parser/data/36-36207.csv +3 -3
- data/lib/japanese_address_parser/data/36-36208.csv +1 -1
- data/lib/japanese_address_parser/data/36-36468.csv +23 -23
- data/lib/japanese_address_parser/data/38-38202.csv +1 -1
- data/lib/japanese_address_parser/data/38-38203.csv +1 -1
- data/lib/japanese_address_parser/data/38-38210.csv +1 -1
- data/lib/japanese_address_parser/data/38-38422.csv +2 -2
- data/lib/japanese_address_parser/data/39-39206.csv +1 -1
- data/lib/japanese_address_parser/data/39-39210.csv +1 -1
- data/lib/japanese_address_parser/data/39-39212.csv +3 -3
- data/lib/japanese_address_parser/data/39-39386.csv +2 -2
- data/lib/japanese_address_parser/data/39-39412.csv +1 -1
- data/lib/japanese_address_parser/data/40-40131.csv +7 -7
- data/lib/japanese_address_parser/data/41-41201.csv +1 -1
- data/lib/japanese_address_parser/data/42-42214.csv +1 -1
- data/lib/japanese_address_parser/data/43-43101.csv +2 -2
- data/lib/japanese_address_parser/data/43-43204.csv +1 -1
- data/lib/japanese_address_parser/data/43-43205.csv +2 -2
- data/lib/japanese_address_parser/data/43-43215.csv +3 -3
- data/lib/japanese_address_parser/data/44-44204.csv +1 -1
- data/lib/japanese_address_parser/data/45-45201.csv +2 -2
- data/lib/japanese_address_parser/data/45-45202.csv +1 -1
- data/lib/japanese_address_parser/data/45-45203.csv +2 -2
- data/lib/japanese_address_parser/data/46-46201.csv +2 -2
- data/lib/japanese_address_parser/data/46-46210.csv +1 -1
- data/lib/japanese_address_parser/data/46-46215.csv +1 -1
- data/lib/japanese_address_parser/data/46-46216.csv +1 -1
- data/lib/japanese_address_parser/data/46-46217.csv +4 -4
- data/lib/japanese_address_parser/data/46-46218.csv +3 -3
- data/lib/japanese_address_parser/data/46-46221.csv +1 -1
- data/lib/japanese_address_parser/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 713a2974b9ccf061e4c834969e879e37918ffc49c8b312a63daf42b91abc98a1
|
|
4
|
+
data.tar.gz: a3e41f696082da17e49b29ddec7a52228c8526fd8f74a9929f88aac9ba9b90a6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e77067fd81c5347bfbe5af1d87f2da12de8814024c08bc79cfbdcd0c0eae2282b5a55a4cb62d789024b5fe028e62b39432c16bf5ab85dd29a9d2b845677640b8
|
|
7
|
+
data.tar.gz: 3d92174c193a17f0eb7566d7bec1ea54cddb22dca403dcd1c8e365a3c34c164404ce09ce00ed4f3cb9ff3bbd9243363ded73eca87c7ea80128dc776c8d5fba29
|
data/CHANGELOG.md
CHANGED
|
@@ -17,6 +17,12 @@ Change Log の形式は [Keep a Changelog](http://keepachangelog.com/) に従い
|
|
|
17
17
|
|
|
18
18
|
### Security
|
|
19
19
|
|
|
20
|
+
## [2.2.1] - 2022-07-16
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- [#45](https://github.com/yamat47/japanese_address_parser/pull/45) geolonia/japanese-addressesのバージョンを上げた。([@yamat47](https://github.com/yamat47))
|
|
24
|
+
- [#46](https://github.com/yamat47/japanese_address_parser/pull/46) CIでRSpecを並列実行させるようにした。([@yamat47](https://github.com/yamat47))
|
|
25
|
+
|
|
20
26
|
## [2.2.0] - 2022-03-12
|
|
21
27
|
### Added
|
|
22
28
|
|
data/Gemfile.lock
CHANGED
|
@@ -4,16 +4,16 @@
|
|
|
4
4
|
"requires": true,
|
|
5
5
|
"packages": {
|
|
6
6
|
"node_modules/@geolonia/japanese-numeral": {
|
|
7
|
-
"version": "0.1.
|
|
8
|
-
"resolved": "https://registry.npmjs.org/@geolonia/japanese-numeral/-/japanese-numeral-0.1.
|
|
9
|
-
"integrity": "sha512-
|
|
7
|
+
"version": "0.1.16",
|
|
8
|
+
"resolved": "https://registry.npmjs.org/@geolonia/japanese-numeral/-/japanese-numeral-0.1.16.tgz",
|
|
9
|
+
"integrity": "sha512-xzSsIHhyyjqNpW8qSh5bFMu3FJvyJGBbNZ/t8clPHkigjUdZ7Ck8wkzCkcwlVd00RkoHwGDLnvXx5W0WiGK0TQ=="
|
|
10
10
|
},
|
|
11
11
|
"node_modules/@geolonia/normalize-japanese-addresses": {
|
|
12
|
-
"version": "2.5.
|
|
13
|
-
"resolved": "https://registry.npmjs.org/@geolonia/normalize-japanese-addresses/-/normalize-japanese-addresses-2.5.
|
|
14
|
-
"integrity": "sha512-
|
|
12
|
+
"version": "2.5.8",
|
|
13
|
+
"resolved": "https://registry.npmjs.org/@geolonia/normalize-japanese-addresses/-/normalize-japanese-addresses-2.5.8.tgz",
|
|
14
|
+
"integrity": "sha512-mv3+vHU2qXPjn2wbZH2p8kOKp7zTdcwCAWz8yryyyM5OGCRjHiqGBg+1t78Ut8b0wopyLJ7GjNanIoflEEKVeg==",
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@geolonia/japanese-numeral": "^0.1.
|
|
16
|
+
"@geolonia/japanese-numeral": "^0.1.16",
|
|
17
17
|
"isomorphic-unfetch": "^3.1.0",
|
|
18
18
|
"lru-cache": "^6.0.0"
|
|
19
19
|
}
|
|
@@ -52,7 +52,7 @@ function number2kanji(num) {
|
|
|
52
52
|
}
|
|
53
53
|
exports.number2kanji = number2kanji;
|
|
54
54
|
function findKanjiNumbers(text) {
|
|
55
|
-
const num = '([0-90-9]*)|([
|
|
55
|
+
const num = '([0-90-9]*)|([〇一二三四五六七八九壱壹弐弍貳貮参參肆伍陸漆捌玖]*)';
|
|
56
56
|
const basePattern = `((${num})(千|阡|仟))?((${num})(百|陌|佰))?((${num})(十|拾))?(${num})?`;
|
|
57
57
|
const pattern = `((${basePattern}兆)?(${basePattern}億)?(${basePattern}(万|萬))?${basePattern})`;
|
|
58
58
|
const regex = new RegExp(pattern, 'g');
|
|
@@ -72,7 +72,11 @@ function kan2n(japanese) {
|
|
|
72
72
|
number = number + Number(kanji);
|
|
73
73
|
}
|
|
74
74
|
else {
|
|
75
|
-
|
|
75
|
+
for (let index = 0; index < kanji.length; index++) {
|
|
76
|
+
const char = kanji[index];
|
|
77
|
+
const digit = kanji.length - index - 1;
|
|
78
|
+
number = number + japaneseNumerics_1.default[char] * (10 ** digit);
|
|
79
|
+
}
|
|
76
80
|
}
|
|
77
81
|
}
|
|
78
82
|
return number;
|
|
@@ -59,7 +59,7 @@ export function number2kanji(num: number) {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
export function findKanjiNumbers(text: string) {
|
|
62
|
-
const num = '([0-90-9]*)|([
|
|
62
|
+
const num = '([0-90-9]*)|([〇一二三四五六七八九壱壹弐弍貳貮参參肆伍陸漆捌玖]*)'
|
|
63
63
|
const basePattern = `((${num})(千|阡|仟))?((${num})(百|陌|佰))?((${num})(十|拾))?(${num})?`
|
|
64
64
|
const pattern = `((${basePattern}兆)?(${basePattern}億)?(${basePattern}(万|萬))?${basePattern})`
|
|
65
65
|
const regex = new RegExp(pattern, 'g')
|
|
@@ -77,7 +77,12 @@ export function kan2n(japanese: string) {
|
|
|
77
77
|
if (kanji.match(/^[0-9]+$/)) {
|
|
78
78
|
number = number + Number(kanji)
|
|
79
79
|
} else {
|
|
80
|
-
|
|
80
|
+
for (let index = 0; index < kanji.length; index++) {
|
|
81
|
+
const char = kanji[index];
|
|
82
|
+
const digit = kanji.length - index - 1
|
|
83
|
+
number = number + japaneseNumerics[char] * (10 ** digit)
|
|
84
|
+
|
|
85
|
+
}
|
|
81
86
|
}
|
|
82
87
|
}
|
|
83
88
|
|
|
@@ -13,7 +13,11 @@ describe('Tests for japaneseNumeral.', () => {
|
|
|
13
13
|
assert.deepEqual(kanji2number('二〇二〇'), 2020)
|
|
14
14
|
assert.deepEqual(kanji2number('二千'), 2000)
|
|
15
15
|
assert.deepEqual(kanji2number('壱万'), 10000)
|
|
16
|
+
assert.deepEqual(kanji2number('弍万'), 20000)
|
|
16
17
|
assert.deepEqual(kanji2number('一二三四'), 1234)
|
|
18
|
+
assert.deepEqual(kanji2number('千二三四'), 1234)
|
|
19
|
+
assert.deepEqual(kanji2number('千二百三四'), 1234)
|
|
20
|
+
assert.deepEqual(kanji2number('千二百三十四'), 1234)
|
|
17
21
|
assert.deepEqual(kanji2number('壱阡陌拾壱兆壱阡陌拾壱億壱阡陌拾壱萬壱阡陌拾壱'), 1111111111111111)
|
|
18
22
|
assert.deepEqual(kanji2number('壱仟佰拾壱兆壱仟佰拾壱億壱仟佰拾壱萬壱仟佰拾壱'), 1111111111111111)
|
|
19
23
|
});
|
|
@@ -62,6 +66,7 @@ describe('Tests for japaneseNumeral.', () => {
|
|
|
62
66
|
|
|
63
67
|
it('should find old Japanese Kanji numbers.', () => {
|
|
64
68
|
assert.deepEqual([ '壱', '弐' ], findKanjiNumbers('私が住んでいるのは壱番館の弐号室です。'))
|
|
69
|
+
assert.deepEqual([ '弍' ], findKanjiNumbers('私は、ハイツ弍号棟に住んでいます。'))
|
|
65
70
|
assert.deepEqual([ '壱阡陌拾壱兆壱億壱萬', ], findKanjiNumbers('私は、壱阡陌拾壱兆壱億壱萬円持っています。'))
|
|
66
71
|
assert.deepEqual([ '壱仟佰拾壱兆壱億壱萬', ], findKanjiNumbers('私は、壱仟佰拾壱兆壱億壱萬円持っています。'))
|
|
67
72
|
})
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @geolonia/normalize-japanese-addresses
|
|
2
2
|
|
|
3
|
-

|
|
3
|
+
[](https://github.com/geolonia/normalize-japanese-addresses/actions/workflows/build.yml)
|
|
4
4
|
|
|
5
5
|
オープンソースの住所正規化ライブラリです。
|
|
6
6
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
https://codepen.io/geolonia/pen/oNBrqzL
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## インストール
|
|
14
14
|
|
|
15
15
|
ライブラリは npm レジストリで `@geolonia/normalize-japanese-addresses` として配布されています。
|
|
16
16
|
npm コマンドなどを使ってインストールして下さい。
|
|
@@ -19,7 +19,9 @@ npm コマンドなどを使ってインストールして下さい。
|
|
|
19
19
|
$ npm install @geolonia/normalize-japanese-addresses -S
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
## 使い方
|
|
23
|
+
|
|
24
|
+
### `normalize(address: string, option: Option)`
|
|
23
25
|
|
|
24
26
|
住所を正規化します。
|
|
25
27
|
|
|
@@ -37,20 +39,22 @@ normalize('北海道札幌市西区24-2-2-3-3').then(result => {
|
|
|
37
39
|
* `2` - 市区町村まで判別できた。
|
|
38
40
|
* `3` - 町丁目まで判別できた。
|
|
39
41
|
|
|
40
|
-
例えば都道府県名のみを正規化したい場合、`level`
|
|
42
|
+
例えば都道府県名のみを正規化したい場合、`level` オプションで指定することで処理を速くすることができます。
|
|
41
43
|
|
|
42
44
|
```javascript
|
|
43
45
|
const { normalize } = require('@geolonia/normalize-japanese-addresses')
|
|
44
|
-
normalize('北海道札幌市西区24-2-2-3-3', {level}).then(result => {
|
|
46
|
+
normalize('北海道札幌市西区24-2-2-3-3', { level: 1 }).then(result => {
|
|
45
47
|
console.log(result); // {"pref": "北海道", "city": "", "town": "", "addr": "札幌市西区二十四軒二条二丁目3-3", "lat": null, "lng": null, "level"; 1}
|
|
46
48
|
})
|
|
47
49
|
```
|
|
48
50
|
|
|
49
|
-
###
|
|
51
|
+
### グローバルオプション
|
|
52
|
+
|
|
53
|
+
以下のパラメーターを変更することでライブラリの動作全体に関わる設定が変更できます。
|
|
50
54
|
|
|
51
55
|
#### `config.townCacheSize: number`
|
|
52
56
|
|
|
53
|
-
@geolonia/normalize-japanese-addresses は市区町村毎の最新の町丁目のデータを web API
|
|
57
|
+
@geolonia/normalize-japanese-addresses は市区町村毎の最新の町丁目のデータを web API から取得し住所の正規化を行います。`townCacheSize` オプションはキャッシュする市区町村の数を変更します。デフォルトは 1,000 件になっています。
|
|
54
58
|
|
|
55
59
|
#### `config.japaneseAddressesApi: string`
|
|
56
60
|
|
|
@@ -58,9 +62,11 @@ normalize('北海道札幌市西区24-2-2-3-3', {level}).then(result => {
|
|
|
58
62
|
|
|
59
63
|
このオプションに対して `file://` 形式の URL を指定することで、ローカルファイルとして保存したファイルを参照することができます。
|
|
60
64
|
|
|
65
|
+
##### 使用例
|
|
66
|
+
|
|
61
67
|
```shell
|
|
62
68
|
# Geolonia 住所データのダウンロード
|
|
63
|
-
$ curl -sL https://github.com/geolonia/japanese-addresses/archive/refs/heads/master.tar.gz | tar
|
|
69
|
+
$ curl -sL https://github.com/geolonia/japanese-addresses/archive/refs/heads/master.tar.gz | tar xvfz -
|
|
64
70
|
```
|
|
65
71
|
|
|
66
72
|
```javascript
|
|
@@ -108,12 +114,13 @@ $ npm install
|
|
|
108
114
|
$ npm run build
|
|
109
115
|
```
|
|
110
116
|
|
|
111
|
-
dist フォルダ以下に main.js など必要なファイルが生成されるので、
|
|
117
|
+
dist フォルダ以下に main-node.js など必要なファイルが生成されるので、
|
|
112
118
|
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
normalize('
|
|
116
|
-
|
|
119
|
+
```javascript
|
|
120
|
+
// sample.js
|
|
121
|
+
const { normalize } = require('./dist/main-node.js');
|
|
122
|
+
normalize('北海道札幌市西区24-2-2-3-3', { level: 3 }).then(result => {
|
|
123
|
+
console.log(result); // { "pref": "北海道", "city": "", "town": "", "addr": "札幌市西区二十四軒二条二丁目3-3", "level": 1 }
|
|
117
124
|
})
|
|
118
125
|
```
|
|
119
126
|
|
|
@@ -134,7 +141,7 @@ $ node sample.js
|
|
|
134
141
|
|
|
135
142
|
### 貢献方法
|
|
136
143
|
|
|
137
|
-
|
|
144
|
+
[プルリクエスト](https://github.com/geolonia/normalize-japanese-addresses/pulls) や [Issue](https://github.com/geolonia/normalize-japanese-addresses/issues) はいつでも歓迎します。
|
|
138
145
|
|
|
139
146
|
## ライセンス、利用規約
|
|
140
147
|
|
|
@@ -19,6 +19,17 @@
|
|
|
19
19
|
PERFORMANCE OF THIS SOFTWARE.
|
|
20
20
|
***************************************************************************** */
|
|
21
21
|
|
|
22
|
+
var __assign = function() {
|
|
23
|
+
__assign = Object.assign || function __assign(t) {
|
|
24
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
25
|
+
s = arguments[i];
|
|
26
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
27
|
+
}
|
|
28
|
+
return t;
|
|
29
|
+
};
|
|
30
|
+
return __assign.apply(this, arguments);
|
|
31
|
+
};
|
|
32
|
+
|
|
22
33
|
function __awaiter(thisArg, _arguments, P, generator) {
|
|
23
34
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
24
35
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -82,6 +93,7 @@
|
|
|
82
93
|
壱: '一',
|
|
83
94
|
壹: '一',
|
|
84
95
|
弐: '二',
|
|
96
|
+
弍: '二',
|
|
85
97
|
貳: '二',
|
|
86
98
|
貮: '二',
|
|
87
99
|
参: '三',
|
|
@@ -208,7 +220,11 @@
|
|
|
208
220
|
number = number + Number(kanji);
|
|
209
221
|
}
|
|
210
222
|
else {
|
|
211
|
-
|
|
223
|
+
for (let index = 0; index < kanji.length; index++) {
|
|
224
|
+
const char = kanji[index];
|
|
225
|
+
const digit = kanji.length - index - 1;
|
|
226
|
+
number = number + japaneseNumerics_1.default[char] * (10 ** digit);
|
|
227
|
+
}
|
|
212
228
|
}
|
|
213
229
|
}
|
|
214
230
|
return number;
|
|
@@ -308,7 +324,7 @@
|
|
|
308
324
|
}
|
|
309
325
|
exports.number2kanji = number2kanji;
|
|
310
326
|
function findKanjiNumbers(text) {
|
|
311
|
-
const num = '([0-90-9]*)|([
|
|
327
|
+
const num = '([0-90-9]*)|([〇一二三四五六七八九壱壹弐弍貳貮参參肆伍陸漆捌玖]*)';
|
|
312
328
|
const basePattern = `((${num})(千|阡|仟))?((${num})(百|陌|佰))?((${num})(十|拾))?(${num})?`;
|
|
313
329
|
const pattern = `((${basePattern}兆)?(${basePattern}億)?(${basePattern}(万|萬))?${basePattern})`;
|
|
314
330
|
const regex = new RegExp(pattern, 'g');
|
|
@@ -330,6 +346,11 @@
|
|
|
330
346
|
exports.findKanjiNumbers = findKanjiNumbers;
|
|
331
347
|
});
|
|
332
348
|
|
|
349
|
+
var currentConfig = {
|
|
350
|
+
japaneseAddressesApi: 'https://geolonia.github.io/japanese-addresses/api/ja',
|
|
351
|
+
townCacheSize: 1000,
|
|
352
|
+
};
|
|
353
|
+
|
|
333
354
|
var kan2num = function (string) {
|
|
334
355
|
var kanjiNumbers = dist.findKanjiNumbers(string);
|
|
335
356
|
for (var i = 0; i < kanjiNumbers.length; i++) {
|
|
@@ -380,8 +401,8 @@
|
|
|
380
401
|
};
|
|
381
402
|
|
|
382
403
|
// JIS 第2水準 => 第1水準 及び 旧字体 => 新字体
|
|
383
|
-
var JIS_OLD_KANJI = '
|
|
384
|
-
var JIS_NEW_KANJI = '
|
|
404
|
+
var JIS_OLD_KANJI = '亞,圍,壹,榮,驛,應,櫻,假,會,懷,覺,樂,陷,歡,氣,戲,據,挾,區,徑,溪,輕,藝,儉,圈,權,嚴,恆,國,齋,雜,蠶,殘,兒,實,釋,從,縱,敍,燒,條,剩,壤,釀,眞,盡,醉,髓,聲,竊,淺,錢,禪,爭,插,騷,屬,對,滯,擇,單,斷,癡,鑄,敕,鐵,傳,黨,鬪,屆,腦,廢,發,蠻,拂,邊,瓣,寶,沒,滿,藥,餘,樣,亂,兩,禮,靈,爐,灣,惡,醫,飮,營,圓,歐,奧,價,繪,擴,學,罐,勸,觀,歸,犧,擧,狹,驅,莖,經,繼,缺,劍,檢,顯,廣,鑛,碎,劑,參,慘,絲,辭,舍,壽,澁,肅,將,證,乘,疊,孃,觸,寢,圖,穗,樞,齊,攝,戰,潛,雙,莊,裝,藏,續,體,臺,澤,膽,彈,蟲,廳,鎭,點,燈,盜,獨,貳,霸,賣,髮,祕,佛,變,辯,豐,飜,默,與,譽,謠,覽,獵,勵,齡,勞,壓,爲,隱,衞,鹽,毆,穩,畫,壞,殼,嶽,卷,關,顏,僞,舊,峽,曉,勳,惠,螢,鷄,縣,險,獻,驗,效,號,濟,册,棧,贊,齒,濕,寫,收,獸,處,稱,奬,淨,繩,讓,囑,愼,粹,隨,數,靜,專,踐,纖,壯,搜,總,臟,墮,帶,瀧,擔,團,遲,晝,聽,遞,轉,當,稻,讀,惱,拜,麥,拔,濱,竝,辨,舖,襃,萬,譯,豫,搖,來,龍,壘,隸,戀,樓,鰺,鶯,蠣,攪,竈,灌,諫,頸,礦,蘂,靱,賤,壺,礪,檮,濤,邇,蠅,檜,儘,藪,籠,彌'.split(/,/);
|
|
405
|
+
var JIS_NEW_KANJI = '亜,囲,壱,栄,駅,応,桜,仮,会,懐,覚,楽,陥,歓,気,戯,拠,挟,区,径,渓,軽,芸,倹,圏,権,厳,恒,国,斎,雑,蚕,残,児,実,釈,従,縦,叙,焼,条,剰,壌,醸,真,尽,酔,髄,声,窃,浅,銭,禅,争,挿,騒,属,対,滞,択,単,断,痴,鋳,勅,鉄,伝,党,闘,届,脳,廃,発,蛮,払,辺,弁,宝,没,満,薬,余,様,乱,両,礼,霊,炉,湾,悪,医,飲,営,円,欧,奥,価,絵,拡,学,缶,勧,観,帰,犠,挙,狭,駆,茎,経,継,欠,剣,検,顕,広,鉱,砕,剤,参,惨,糸,辞,舎,寿,渋,粛,将,証,乗,畳,嬢,触,寝,図,穂,枢,斉,摂,戦,潜,双,荘,装,蔵,続,体,台,沢,胆,弾,虫,庁,鎮,点,灯,盗,独,弐,覇,売,髪,秘,仏,変,弁,豊,翻,黙,与,誉,謡,覧,猟,励,齢,労,圧,為,隠,衛,塩,殴,穏,画,壊,殻,岳,巻,関,顔,偽,旧,峡,暁,勲,恵,蛍,鶏,県,険,献,験,効,号,済,冊,桟,賛,歯,湿,写,収,獣,処,称,奨,浄,縄,譲,嘱,慎,粋,随,数,静,専,践,繊,壮,捜,総,臓,堕,帯,滝,担,団,遅,昼,聴,逓,転,当,稲,読,悩,拝,麦,抜,浜,並,弁,舗,褒,万,訳,予,揺,来,竜,塁,隷,恋,楼,鯵,鴬,蛎,撹,竃,潅,諌,頚,砿,蕊,靭,賎,壷,砺,梼,涛,迩,蝿,桧,侭,薮,篭,弥'.split(/,/);
|
|
385
406
|
var JIS_KANJI_REGEX_PATTERNS = JIS_OLD_KANJI.map(function (old, i) {
|
|
386
407
|
var pattern = old + "|" + JIS_NEW_KANJI[i];
|
|
387
408
|
return [pattern, old, JIS_NEW_KANJI[i]];
|
|
@@ -428,11 +449,6 @@
|
|
|
428
449
|
return _str;
|
|
429
450
|
};
|
|
430
451
|
|
|
431
|
-
var currentConfig = {
|
|
432
|
-
japaneseAddressesApi: 'https://geolonia.github.io/japanese-addresses/api/ja',
|
|
433
|
-
townCacheSize: 1000,
|
|
434
|
-
};
|
|
435
|
-
|
|
436
452
|
var iterator = function (Yallist) {
|
|
437
453
|
Yallist.prototype[Symbol.iterator] = function* () {
|
|
438
454
|
for (let walker = this.head; walker; walker = walker.next) {
|
|
@@ -1281,8 +1297,16 @@
|
|
|
1281
1297
|
}
|
|
1282
1298
|
});
|
|
1283
1299
|
}); };
|
|
1300
|
+
// 十六町 のように漢数字と町が連結しているか
|
|
1301
|
+
var isKanjiNumberFollewedByCho = function (targetTownName) {
|
|
1302
|
+
var xCho = targetTownName.match(/.町/g);
|
|
1303
|
+
if (!xCho)
|
|
1304
|
+
return false;
|
|
1305
|
+
var kanjiNumbers = dist.findKanjiNumbers(xCho[0]);
|
|
1306
|
+
return kanjiNumbers.length > 0;
|
|
1307
|
+
};
|
|
1284
1308
|
var getTownRegexPatterns = function (pref, city) { return __awaiter(void 0, void 0, void 0, function () {
|
|
1285
|
-
var cachedResult, towns, patterns;
|
|
1309
|
+
var cachedResult, pre_towns, townSet, towns, isKyoto, _i, pre_towns_1, town, originalTown, townAbbr, patterns;
|
|
1286
1310
|
return __generator(this, function (_a) {
|
|
1287
1311
|
switch (_a.label) {
|
|
1288
1312
|
case 0:
|
|
@@ -1290,11 +1314,32 @@
|
|
|
1290
1314
|
if (typeof cachedResult !== 'undefined') {
|
|
1291
1315
|
return [2 /*return*/, cachedResult];
|
|
1292
1316
|
}
|
|
1293
|
-
return [4 /*yield*/, getTowns(pref, city)
|
|
1294
|
-
// 少ない文字数の地名に対してミスマッチしないように文字の長さ順にソート
|
|
1295
|
-
];
|
|
1317
|
+
return [4 /*yield*/, getTowns(pref, city)];
|
|
1296
1318
|
case 1:
|
|
1297
|
-
|
|
1319
|
+
pre_towns = _a.sent();
|
|
1320
|
+
townSet = new Set(pre_towns.map(function (town) { return town.town; }));
|
|
1321
|
+
towns = [];
|
|
1322
|
+
isKyoto = city.match(/^京都市/);
|
|
1323
|
+
// 町丁目に「○○町」が含まれるケースへの対応
|
|
1324
|
+
// 通常は「○○町」のうち「町」の省略を許容し同義語として扱うが、まれに自治体内に「○○町」と「○○」が共存しているケースがある。
|
|
1325
|
+
// この場合は町の省略は許容せず、入力された住所は書き分けられているものとして正規化を行う。
|
|
1326
|
+
// 更に、「愛知県名古屋市瑞穂区十六町1丁目」漢数字を含むケースだと丁目や番地・号の正規化が不可能になる。このようなケースも除外。
|
|
1327
|
+
for (_i = 0, pre_towns_1 = pre_towns; _i < pre_towns_1.length; _i++) {
|
|
1328
|
+
town = pre_towns_1[_i];
|
|
1329
|
+
towns.push(town);
|
|
1330
|
+
originalTown = town.town;
|
|
1331
|
+
if (originalTown.indexOf('町') === -1)
|
|
1332
|
+
continue;
|
|
1333
|
+
townAbbr = originalTown.replace(/(?!^町)町/g, '') // NOTE: 冒頭の「町」は明らかに省略するべきではないので、除外
|
|
1334
|
+
;
|
|
1335
|
+
if (!isKyoto && // 京都は通り名削除の処理があるため、意図しないマッチになるケースがある。これを除く
|
|
1336
|
+
!townSet.has(townAbbr) &&
|
|
1337
|
+
!townSet.has("\u5927\u5B57" + townAbbr) && // 大字は省略されるため、大字〇〇と〇〇町がコンフリクトする。このケースを除外
|
|
1338
|
+
!isKanjiNumberFollewedByCho(originalTown)) {
|
|
1339
|
+
// エイリアスとして町なしのパターンを登録
|
|
1340
|
+
towns.push(__assign(__assign({}, town), { originalTown: originalTown, town: townAbbr }));
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1298
1343
|
// 少ない文字数の地名に対してミスマッチしないように文字の長さ順にソート
|
|
1299
1344
|
towns.sort(function (a, b) {
|
|
1300
1345
|
var aLen = a.town.length;
|
|
@@ -1335,12 +1380,7 @@
|
|
|
1335
1380
|
var _pattern = "(" + patterns.join('|') + ")((\u4E01|\u753A)\u76EE?|\u756A(\u753A|\u4E01)|\u6761|\u8ED2|\u7DDA|\u306E\u753A?|\u5730\u5272|\u53F7|[-\uFF0D\uFE63\u2212\u2010\u2043\u2011\u2012\u2013\u2014\uFE58\u2015\u23AF\u23E4\u30FC\uFF70\u2500\u2501])";
|
|
1336
1381
|
return _pattern; // デバッグのときにめんどくさいので変数に入れる。
|
|
1337
1382
|
}));
|
|
1338
|
-
|
|
1339
|
-
return [town, ".*" + pattern];
|
|
1340
|
-
}
|
|
1341
|
-
else {
|
|
1342
|
-
return [town, "^" + pattern];
|
|
1343
|
-
}
|
|
1383
|
+
return [town, pattern];
|
|
1344
1384
|
});
|
|
1345
1385
|
cachedTownRegexes.set(pref + "-" + city, patterns);
|
|
1346
1386
|
return [2 /*return*/, patterns];
|
|
@@ -1383,35 +1423,48 @@
|
|
|
1383
1423
|
|
|
1384
1424
|
var browser = self.fetch || (self.fetch = require$$0.default || require$$0);
|
|
1385
1425
|
|
|
1426
|
+
var config$1 = currentConfig;
|
|
1386
1427
|
var defaultOption = {
|
|
1387
1428
|
level: 3,
|
|
1388
1429
|
};
|
|
1430
|
+
/**
|
|
1431
|
+
* @internal
|
|
1432
|
+
*/
|
|
1389
1433
|
var __internals = {
|
|
1390
1434
|
// default fetch
|
|
1391
1435
|
fetch: function (input) {
|
|
1392
|
-
var fileURL = new URL("" +
|
|
1436
|
+
var fileURL = new URL("" + config$1.japaneseAddressesApi + input);
|
|
1393
1437
|
return browser(fileURL.toString());
|
|
1394
1438
|
},
|
|
1395
1439
|
};
|
|
1396
1440
|
var normalizeTownName = function (addr, pref, city) { return __awaiter(void 0, void 0, void 0, function () {
|
|
1397
|
-
var townPatterns,
|
|
1398
|
-
return __generator(this, function (
|
|
1399
|
-
switch (
|
|
1441
|
+
var townPatterns, regexPrefixes, _i, regexPrefixes_1, regexPrefix, _a, townPatterns_1, _b, town, pattern, regex, match;
|
|
1442
|
+
return __generator(this, function (_c) {
|
|
1443
|
+
switch (_c.label) {
|
|
1400
1444
|
case 0:
|
|
1401
1445
|
addr = addr.trim().replace(/^大字/, '');
|
|
1402
1446
|
return [4 /*yield*/, getTownRegexPatterns(pref, city)];
|
|
1403
1447
|
case 1:
|
|
1404
|
-
townPatterns =
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1448
|
+
townPatterns = _c.sent();
|
|
1449
|
+
regexPrefixes = ['^'];
|
|
1450
|
+
if (city.match(/^京都市/)) {
|
|
1451
|
+
// 京都は通り名削除のために後方一致を使う
|
|
1452
|
+
regexPrefixes.push('.*');
|
|
1453
|
+
}
|
|
1454
|
+
for (_i = 0, regexPrefixes_1 = regexPrefixes; _i < regexPrefixes_1.length; _i++) {
|
|
1455
|
+
regexPrefix = regexPrefixes_1[_i];
|
|
1456
|
+
for (_a = 0, townPatterns_1 = townPatterns; _a < townPatterns_1.length; _a++) {
|
|
1457
|
+
_b = townPatterns_1[_a], town = _b[0], pattern = _b[1];
|
|
1458
|
+
regex = new RegExp("" + regexPrefix + pattern);
|
|
1459
|
+
match = addr.match(regex);
|
|
1460
|
+
if (match) {
|
|
1461
|
+
return [2 /*return*/, {
|
|
1462
|
+
town: town.originalTown || town.town,
|
|
1463
|
+
addr: addr.substr(match[0].length),
|
|
1464
|
+
lat: town.lat,
|
|
1465
|
+
lng: town.lng,
|
|
1466
|
+
}];
|
|
1467
|
+
}
|
|
1415
1468
|
}
|
|
1416
1469
|
}
|
|
1417
1470
|
return [2 /*return*/];
|
|
@@ -1426,6 +1479,7 @@
|
|
|
1426
1479
|
switch (_e.label) {
|
|
1427
1480
|
case 0:
|
|
1428
1481
|
addr = address
|
|
1482
|
+
.normalize('NFC')
|
|
1429
1483
|
.replace(/ /g, ' ')
|
|
1430
1484
|
.replace(/ +/g, ' ')
|
|
1431
1485
|
.replace(/([0-9A-Za-z]+)/g, function (match) {
|
|
@@ -1533,6 +1587,10 @@
|
|
|
1533
1587
|
addr = normalized.addr;
|
|
1534
1588
|
lat = parseFloat(normalized.lat);
|
|
1535
1589
|
lng = parseFloat(normalized.lng);
|
|
1590
|
+
if (Number.isNaN(lat) || Number.isNaN(lng)) {
|
|
1591
|
+
lat = null;
|
|
1592
|
+
lng = null;
|
|
1593
|
+
}
|
|
1536
1594
|
}
|
|
1537
1595
|
addr = addr
|
|
1538
1596
|
.replace(/^-/, '')
|
|
@@ -1591,7 +1649,7 @@
|
|
|
1591
1649
|
});
|
|
1592
1650
|
};
|
|
1593
1651
|
|
|
1594
|
-
var config =
|
|
1652
|
+
var config = config$1;
|
|
1595
1653
|
var normalize = normalize$1;
|
|
1596
1654
|
|
|
1597
1655
|
exports.config = config;
|