@mailwoman/corpus 10.6.0 → 10.7.0
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.
- package/data/PROVENANCE.md +24 -0
- package/data/address-source-register.json +18948 -8757
- package/data/corpus-source-inputs.json +4756 -0
- package/data/license-decisions.json +7260 -0
- package/data/licenses/whosonfirst-licenses.md +3 -2
- package/data/reviewed-ve-postcode-tuples.json +5 -72
- package/data/source-additions.json +2450 -0
- package/data/source-resolutions.json +87 -0
- package/data/training-manifests/v0.7.10-gb-county.effective.json +2335 -0
- package/data/training-manifests/v0.7.10-gb-county.json +1132 -0
- package/data/training-manifests/v0.7.2-address-systems.effective.json +3 -2
- package/data/training-manifests/v0.7.7-no-ppd.json +550 -0
- package/data/training-manifests/v0.7.8-rights-clean.json +538 -0
- package/data/training-manifests/v0.7.9-country-gap.json +1132 -0
- package/data/us-situs-sources.json +128 -0
- package/lib/adapters/cordis/adapter.ts +1 -1
- package/lib/adapters/libpostal-dictionary.ts +23 -3
- package/lib/adapters/osm/adapter.ts +42 -11
- package/lib/adapters.ts +14 -0
- package/lib/az/adapters/opendata/adapter.ts +389 -0
- package/lib/bs/adapters/gbpa/adapter.ts +248 -0
- package/lib/build/types.ts +16 -0
- package/lib/build.ts +21 -0
- package/lib/ee/adapters/ads/adapter.ts +18 -0
- package/lib/fo/adapters/adressur/adapter.ts +242 -0
- package/lib/gb/adapters/os-open/adapter.ts +12 -0
- package/lib/gb/county.ts +59 -0
- package/lib/gb/os-open/open/names.ts +41 -0
- package/lib/gu/adapters/bsp/adapter.ts +434 -0
- package/lib/im/adapters/land-registry/adapter.ts +340 -0
- package/lib/international/recipes/locale.ts +164 -19
- package/lib/li/adapters/llv/adapter.ts +246 -0
- package/lib/recipes/bare/postcode.ts +10 -34
- package/lib/recipes/country-balanced.ts +95 -78
- package/lib/recipes/intersection.ts +22 -30
- package/lib/recipes/po/box/cedex/recipe.ts +8 -5
- package/lib/recipes/po/box/cedex/sources.ts +2 -23
- package/lib/recipes/scaffold.ts +28 -3
- package/lib/recipes/sources.ts +112 -1
- package/lib/recipes/street/affix.ts +17 -29
- package/lib/recipes/sub/venue/context.ts +33 -9
- package/lib/recipes/sub/venue/sources.ts +54 -13
- package/lib/recipes/sub/venue.ts +68 -23
- package/lib/recipes/unit.ts +20 -7
- package/lib/registers.ts +33 -0
- package/lib/source-register/corpus-inputs.ts +528 -0
- package/lib/source-register/effective-manifest.ts +37 -5
- package/lib/source-register/types.ts +20 -0
- package/lib/south-asia/recipes/register.ts +1 -1
- package/lib/tools/overlay/manifest.ts +109 -1
- package/lib/tools/source-register/build.ts +47 -1
- package/lib/tools/variety-sample.ts +633 -0
- package/lib/us/adapters/usgov/nad/adapter.ts +39 -10
- package/lib/us/recipes/skeleton-sources.ts +156 -0
- package/lib/us/tools/nad-skeletons.ts +395 -0
- package/lib/uy/adapters/ide/adapter.ts +275 -0
- package/lib/ve/recipes/reviewed-postcode-tail.ts +29 -6
- package/out/adapters/cordis/adapter.d.ts +1 -1
- package/out/adapters/cordis/adapter.js +1 -1
- package/out/adapters/libpostal-dictionary.d.ts +9 -0
- package/out/adapters/libpostal-dictionary.d.ts.map +1 -1
- package/out/adapters/libpostal-dictionary.js +19 -3
- package/out/adapters/libpostal-dictionary.js.map +1 -1
- package/out/adapters/osm/adapter.d.ts +12 -1
- package/out/adapters/osm/adapter.d.ts.map +1 -1
- package/out/adapters/osm/adapter.js +30 -13
- package/out/adapters/osm/adapter.js.map +1 -1
- package/out/adapters.d.ts.map +1 -1
- package/out/adapters.js +14 -0
- package/out/adapters.js.map +1 -1
- package/out/az/adapters/opendata/adapter.d.ts +88 -0
- package/out/az/adapters/opendata/adapter.d.ts.map +1 -0
- package/out/az/adapters/opendata/adapter.js +282 -0
- package/out/az/adapters/opendata/adapter.js.map +1 -0
- package/out/bs/adapters/gbpa/adapter.d.ts +64 -0
- package/out/bs/adapters/gbpa/adapter.d.ts.map +1 -0
- package/out/bs/adapters/gbpa/adapter.js +187 -0
- package/out/bs/adapters/gbpa/adapter.js.map +1 -0
- package/out/build/types.d.ts +15 -0
- package/out/build/types.d.ts.map +1 -1
- package/out/build/types.js.map +1 -1
- package/out/build.d.ts.map +1 -1
- package/out/build.js +17 -0
- package/out/build.js.map +1 -1
- package/out/ee/adapters/ads/adapter.d.ts +6 -0
- package/out/ee/adapters/ads/adapter.d.ts.map +1 -1
- package/out/ee/adapters/ads/adapter.js +16 -0
- package/out/ee/adapters/ads/adapter.js.map +1 -1
- package/out/fo/adapters/adressur/adapter.d.ts +63 -0
- package/out/fo/adapters/adressur/adapter.d.ts.map +1 -0
- package/out/fo/adapters/adressur/adapter.js +177 -0
- package/out/fo/adapters/adressur/adapter.js.map +1 -0
- package/out/gb/adapters/os-open/adapter.d.ts +8 -0
- package/out/gb/adapters/os-open/adapter.d.ts.map +1 -1
- package/out/gb/adapters/os-open/adapter.js +11 -0
- package/out/gb/adapters/os-open/adapter.js.map +1 -1
- package/out/gb/county.d.ts +30 -0
- package/out/gb/county.d.ts.map +1 -0
- package/out/gb/county.js +51 -0
- package/out/gb/county.js.map +1 -0
- package/out/gb/os-open/open/names.d.ts +17 -0
- package/out/gb/os-open/open/names.d.ts.map +1 -1
- package/out/gb/os-open/open/names.js +19 -0
- package/out/gb/os-open/open/names.js.map +1 -1
- package/out/gu/adapters/bsp/adapter.d.ts +83 -0
- package/out/gu/adapters/bsp/adapter.d.ts.map +1 -0
- package/out/gu/adapters/bsp/adapter.js +346 -0
- package/out/gu/adapters/bsp/adapter.js.map +1 -0
- package/out/im/adapters/land-registry/adapter.d.ts +68 -0
- package/out/im/adapters/land-registry/adapter.d.ts.map +1 -0
- package/out/im/adapters/land-registry/adapter.js +261 -0
- package/out/im/adapters/land-registry/adapter.js.map +1 -0
- package/out/international/recipes/locale.d.ts +24 -4
- package/out/international/recipes/locale.d.ts.map +1 -1
- package/out/international/recipes/locale.js +107 -15
- package/out/international/recipes/locale.js.map +1 -1
- package/out/li/adapters/llv/adapter.d.ts +69 -0
- package/out/li/adapters/llv/adapter.d.ts.map +1 -0
- package/out/li/adapters/llv/adapter.js +181 -0
- package/out/li/adapters/llv/adapter.js.map +1 -0
- package/out/recipes/bare/postcode.d.ts.map +1 -1
- package/out/recipes/bare/postcode.js +9 -30
- package/out/recipes/bare/postcode.js.map +1 -1
- package/out/recipes/country-balanced.d.ts.map +1 -1
- package/out/recipes/country-balanced.js +82 -73
- package/out/recipes/country-balanced.js.map +1 -1
- package/out/recipes/intersection.d.ts +3 -2
- package/out/recipes/intersection.d.ts.map +1 -1
- package/out/recipes/intersection.js +20 -26
- package/out/recipes/intersection.js.map +1 -1
- package/out/recipes/po/box/cedex/recipe.d.ts.map +1 -1
- package/out/recipes/po/box/cedex/recipe.js +5 -4
- package/out/recipes/po/box/cedex/recipe.js.map +1 -1
- package/out/recipes/po/box/cedex/sources.d.ts +2 -45
- package/out/recipes/po/box/cedex/sources.d.ts.map +1 -1
- package/out/recipes/po/box/cedex/sources.js +0 -20
- package/out/recipes/po/box/cedex/sources.js.map +1 -1
- package/out/recipes/scaffold.d.ts +15 -2
- package/out/recipes/scaffold.d.ts.map +1 -1
- package/out/recipes/scaffold.js +21 -1
- package/out/recipes/scaffold.js.map +1 -1
- package/out/recipes/sources.d.ts.map +1 -1
- package/out/recipes/sources.js +112 -1
- package/out/recipes/sources.js.map +1 -1
- package/out/recipes/street/affix.d.ts.map +1 -1
- package/out/recipes/street/affix.js +8 -20
- package/out/recipes/street/affix.js.map +1 -1
- package/out/recipes/sub/venue/context.d.ts +14 -3
- package/out/recipes/sub/venue/context.d.ts.map +1 -1
- package/out/recipes/sub/venue/context.js +29 -9
- package/out/recipes/sub/venue/context.js.map +1 -1
- package/out/recipes/sub/venue/sources.d.ts +41 -8
- package/out/recipes/sub/venue/sources.d.ts.map +1 -1
- package/out/recipes/sub/venue/sources.js +26 -7
- package/out/recipes/sub/venue/sources.js.map +1 -1
- package/out/recipes/sub/venue.d.ts.map +1 -1
- package/out/recipes/sub/venue.js +35 -14
- package/out/recipes/sub/venue.js.map +1 -1
- package/out/recipes/unit.d.ts +4 -0
- package/out/recipes/unit.d.ts.map +1 -1
- package/out/recipes/unit.js +7 -6
- package/out/recipes/unit.js.map +1 -1
- package/out/registers.d.ts +33 -0
- package/out/registers.d.ts.map +1 -1
- package/out/registers.js +33 -0
- package/out/registers.js.map +1 -1
- package/out/source-register/corpus-inputs.d.ts +240 -0
- package/out/source-register/corpus-inputs.d.ts.map +1 -0
- package/out/source-register/corpus-inputs.js +275 -0
- package/out/source-register/corpus-inputs.js.map +1 -0
- package/out/source-register/effective-manifest.d.ts +2 -0
- package/out/source-register/effective-manifest.d.ts.map +1 -1
- package/out/source-register/effective-manifest.js +33 -4
- package/out/source-register/effective-manifest.js.map +1 -1
- package/out/source-register/types.d.ts +21 -1
- package/out/source-register/types.d.ts.map +1 -1
- package/out/source-register/types.js +20 -0
- package/out/source-register/types.js.map +1 -1
- package/out/south-asia/recipes/register.js +1 -1
- package/out/south-asia/recipes/register.js.map +1 -1
- package/out/tools/overlay/manifest.d.ts +7 -0
- package/out/tools/overlay/manifest.d.ts.map +1 -1
- package/out/tools/overlay/manifest.js +72 -1
- package/out/tools/overlay/manifest.js.map +1 -1
- package/out/tools/source-register/build.d.ts +9 -0
- package/out/tools/source-register/build.d.ts.map +1 -1
- package/out/tools/source-register/build.js +25 -3
- package/out/tools/source-register/build.js.map +1 -1
- package/out/tools/variety-sample.d.ts +196 -0
- package/out/tools/variety-sample.d.ts.map +1 -0
- package/out/tools/variety-sample.js +417 -0
- package/out/tools/variety-sample.js.map +1 -0
- package/out/us/adapters/usgov/nad/adapter.d.ts +80 -0
- package/out/us/adapters/usgov/nad/adapter.d.ts.map +1 -1
- package/out/us/adapters/usgov/nad/adapter.js +27 -8
- package/out/us/adapters/usgov/nad/adapter.js.map +1 -1
- package/out/us/recipes/skeleton-sources.d.ts +92 -0
- package/out/us/recipes/skeleton-sources.d.ts.map +1 -0
- package/out/us/recipes/skeleton-sources.js +121 -0
- package/out/us/recipes/skeleton-sources.js.map +1 -0
- package/out/us/tools/nad-skeletons.d.ts +120 -0
- package/out/us/tools/nad-skeletons.d.ts.map +1 -0
- package/out/us/tools/nad-skeletons.js +262 -0
- package/out/us/tools/nad-skeletons.js.map +1 -0
- package/out/uy/adapters/ide/adapter.d.ts +64 -0
- package/out/uy/adapters/ide/adapter.d.ts.map +1 -0
- package/out/uy/adapters/ide/adapter.js +206 -0
- package/out/uy/adapters/ide/adapter.js.map +1 -0
- package/out/ve/recipes/reviewed-postcode-tail.d.ts +6 -2
- package/out/ve/recipes/reviewed-postcode-tail.d.ts.map +1 -1
- package/out/ve/recipes/reviewed-postcode-tail.js +16 -5
- package/out/ve/recipes/reviewed-postcode-tail.js.map +1 -1
- package/package.json +14 -14
- package/lib/recipes/unit/sources.ts +0 -44
- package/lib/tools/fetch/ppd.ts +0 -121
- package/out/recipes/unit/sources.d.ts +0 -28
- package/out/recipes/unit/sources.d.ts.map +0 -1
- package/out/recipes/unit/sources.js +0 -30
- package/out/recipes/unit/sources.js.map +0 -1
- package/out/tools/fetch/ppd.d.ts +0 -15
- package/out/tools/fetch/ppd.d.ts.map +0 -1
- package/out/tools/fetch/ppd.js +0 -86
- package/out/tools/fetch/ppd.js.map +0 -1
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "Maps each `source` value of the US situs databases (address-points-us-*.db under the data root) to the register rows its data comes from. The house-venue tuple reader in corpus-python/src/mailwoman_train/countries/us/tuples.py keeps a row only when every register row its value maps to holds an elected decision permitting transform and train. `overture:OpenAddresses/<state>/<body>` values map to that body's own row, because OpenAddresses does not relicense what it collects. A value with no entry, such as the bare `openaddresses` of the Hawaii database, which names no body, is not admitted.",
|
|
3
|
+
"sources": {
|
|
4
|
+
"overture:NAD": ["us-property-building-1", "us-geodata-aggregate-1"],
|
|
5
|
+
"overture:OpenAddresses/CA/Alameda County": ["us-property-building-27", "us-geodata-aggregate-1"],
|
|
6
|
+
"overture:OpenAddresses/CA/Alpine County": ["us-property-building-126", "us-geodata-aggregate-1"],
|
|
7
|
+
"overture:OpenAddresses/CA/Amador County": ["us-property-building-112", "us-geodata-aggregate-1"],
|
|
8
|
+
"overture:OpenAddresses/CA/Butte County": ["us-property-building-71", "us-geodata-aggregate-1"],
|
|
9
|
+
"overture:OpenAddresses/CA/Calaveras County": ["us-property-building-101", "us-geodata-aggregate-1"],
|
|
10
|
+
"overture:OpenAddresses/CA/Colusa County": ["us-property-building-122", "us-geodata-aggregate-1"],
|
|
11
|
+
"overture:OpenAddresses/CA/Contra Costa County": ["us-property-building-35", "us-geodata-aggregate-1"],
|
|
12
|
+
"overture:OpenAddresses/CA/County of Los Angeles": ["us-property-building-10", "us-geodata-aggregate-1"],
|
|
13
|
+
"overture:OpenAddresses/CA/Del Norte County": ["us-property-building-118", "us-geodata-aggregate-1"],
|
|
14
|
+
"overture:OpenAddresses/CA/El Dorado County": ["us-property-building-78", "us-geodata-aggregate-1"],
|
|
15
|
+
"overture:OpenAddresses/CA/Fresno County": ["us-property-building-37", "us-geodata-aggregate-1"],
|
|
16
|
+
"overture:OpenAddresses/CA/Glenn County": ["us-property-building-121", "us-geodata-aggregate-1"],
|
|
17
|
+
"overture:OpenAddresses/CA/Humboldt County": ["us-property-building-97", "us-geodata-aggregate-1"],
|
|
18
|
+
"overture:OpenAddresses/CA/Imperial County": ["us-property-building-90", "us-geodata-aggregate-1"],
|
|
19
|
+
"overture:OpenAddresses/CA/Inyo County": ["us-property-building-119", "us-geodata-aggregate-1"],
|
|
20
|
+
"overture:OpenAddresses/CA/Kern County": ["us-property-building-46", "us-geodata-aggregate-1"],
|
|
21
|
+
"overture:OpenAddresses/CA/Kings County": ["us-property-building-98", "us-geodata-aggregate-1"],
|
|
22
|
+
"overture:OpenAddresses/CA/Lake County": ["us-property-building-93", "us-geodata-aggregate-1"],
|
|
23
|
+
"overture:OpenAddresses/CA/Lassen County": ["us-property-building-124", "us-geodata-aggregate-1"],
|
|
24
|
+
"overture:OpenAddresses/CA/Madera County": ["us-property-building-95", "us-geodata-aggregate-1"],
|
|
25
|
+
"overture:OpenAddresses/CA/Marin County": ["us-property-building-3", "us-geodata-aggregate-1"],
|
|
26
|
+
"overture:OpenAddresses/CA/Mariposa County": ["us-property-building-120", "us-geodata-aggregate-1"],
|
|
27
|
+
"overture:OpenAddresses/CA/Mendocino County": ["us-property-building-99", "us-geodata-aggregate-1"],
|
|
28
|
+
"overture:OpenAddresses/CA/Merced County": ["us-property-building-76", "us-geodata-aggregate-1"],
|
|
29
|
+
"overture:OpenAddresses/CA/Modoc County": ["us-property-building-123", "us-geodata-aggregate-1"],
|
|
30
|
+
"overture:OpenAddresses/CA/Mono County": ["us-property-building-113", "us-geodata-aggregate-1"],
|
|
31
|
+
"overture:OpenAddresses/CA/Monterey County": ["us-property-building-67", "us-geodata-aggregate-1"],
|
|
32
|
+
"overture:OpenAddresses/CA/Napa County": ["us-property-building-91", "us-geodata-aggregate-1"],
|
|
33
|
+
"overture:OpenAddresses/CA/Nevada County": ["us-property-building-92", "us-geodata-aggregate-1"],
|
|
34
|
+
"overture:OpenAddresses/CA/Orange County": ["us-property-building-15", "us-geodata-aggregate-1"],
|
|
35
|
+
"overture:OpenAddresses/CA/Placer County": ["us-property-building-54", "us-geodata-aggregate-1"],
|
|
36
|
+
"overture:OpenAddresses/CA/Plumas County": ["us-property-building-109", "us-geodata-aggregate-1"],
|
|
37
|
+
"overture:OpenAddresses/CA/Riverside County": ["us-property-building-20", "us-geodata-aggregate-1"],
|
|
38
|
+
"overture:OpenAddresses/CA/Sacramento County": ["us-property-building-25", "us-geodata-aggregate-1"],
|
|
39
|
+
"overture:OpenAddresses/CA/San Benito County": ["us-property-building-110", "us-geodata-aggregate-1"],
|
|
40
|
+
"overture:OpenAddresses/CA/San Bernardino County": ["us-property-building-19", "us-geodata-aggregate-1"],
|
|
41
|
+
"overture:OpenAddresses/CA/San Diego County": ["us-property-building-17", "us-geodata-aggregate-1"],
|
|
42
|
+
"overture:OpenAddresses/CA/San Francisco County": ["us-property-building-36", "us-geodata-aggregate-1"],
|
|
43
|
+
"overture:OpenAddresses/CA/San Joaquin County": ["us-property-building-48", "us-geodata-aggregate-1"],
|
|
44
|
+
"overture:OpenAddresses/CA/San Luis Obispo County": ["us-property-building-66", "us-geodata-aggregate-1"],
|
|
45
|
+
"overture:OpenAddresses/CA/San Mateo County": ["us-property-building-49", "us-geodata-aggregate-1"],
|
|
46
|
+
"overture:OpenAddresses/CA/Santa Barbara County": ["us-property-building-61", "us-geodata-aggregate-1"],
|
|
47
|
+
"overture:OpenAddresses/CA/Santa Clara County": ["us-property-building-30", "us-geodata-aggregate-1"],
|
|
48
|
+
"overture:OpenAddresses/CA/Santa Cruz County": ["us-property-building-75", "us-geodata-aggregate-1"],
|
|
49
|
+
"overture:OpenAddresses/CA/Shasta County": ["us-property-building-86", "us-geodata-aggregate-1"],
|
|
50
|
+
"overture:OpenAddresses/CA/Sierra County": ["us-property-building-125", "us-geodata-aggregate-1"],
|
|
51
|
+
"overture:OpenAddresses/CA/Siskiyou County": ["us-property-building-111", "us-geodata-aggregate-1"],
|
|
52
|
+
"overture:OpenAddresses/CA/Solano County": ["us-property-building-58", "us-geodata-aggregate-1"],
|
|
53
|
+
"overture:OpenAddresses/CA/Sonoma County": ["us-property-building-50", "us-geodata-aggregate-1"],
|
|
54
|
+
"overture:OpenAddresses/CA/Stanislaus County": ["us-property-building-59", "us-geodata-aggregate-1"],
|
|
55
|
+
"overture:OpenAddresses/CA/Sutter County": ["us-property-building-100", "us-geodata-aggregate-1"],
|
|
56
|
+
"overture:OpenAddresses/CA/Tehama County": ["us-property-building-106", "us-geodata-aggregate-1"],
|
|
57
|
+
"overture:OpenAddresses/CA/Trinity County": ["us-property-building-117", "us-geodata-aggregate-1"],
|
|
58
|
+
"overture:OpenAddresses/CA/Tulare County": ["us-property-building-60", "us-geodata-aggregate-1"],
|
|
59
|
+
"overture:OpenAddresses/CA/Tuolumne County": ["us-property-building-105", "us-geodata-aggregate-1"],
|
|
60
|
+
"overture:OpenAddresses/CA/Yolo County": ["us-property-building-77", "us-geodata-aggregate-1"],
|
|
61
|
+
"overture:OpenAddresses/CA/Yuba County": ["us-property-building-103", "us-geodata-aggregate-1"],
|
|
62
|
+
"overture:OpenAddresses/CO/Governor's Office of Information Technology": [
|
|
63
|
+
"us-property-building-11",
|
|
64
|
+
"us-geodata-aggregate-1"
|
|
65
|
+
],
|
|
66
|
+
"overture:OpenAddresses/FL/Alachua County": ["us-property-building-62", "us-geodata-aggregate-1"],
|
|
67
|
+
"overture:OpenAddresses/FL/Baker County": ["us-property-building-116", "us-geodata-aggregate-1"],
|
|
68
|
+
"overture:OpenAddresses/FL/Bay County": ["us-property-building-65", "us-geodata-aggregate-1"],
|
|
69
|
+
"overture:OpenAddresses/FL/Brevard County": ["us-property-building-40", "us-geodata-aggregate-1"],
|
|
70
|
+
"overture:OpenAddresses/FL/Broward County": ["us-property-building-31", "us-geodata-aggregate-1"],
|
|
71
|
+
"overture:OpenAddresses/FL/Charlotte County": ["us-property-building-41", "us-geodata-aggregate-1"],
|
|
72
|
+
"overture:OpenAddresses/FL/Citrus County": ["us-property-building-56", "us-geodata-aggregate-1"],
|
|
73
|
+
"overture:OpenAddresses/FL/Clay County": ["us-property-building-83", "us-geodata-aggregate-1"],
|
|
74
|
+
"overture:OpenAddresses/FL/Collier County": ["us-property-building-43", "us-geodata-aggregate-1"],
|
|
75
|
+
"overture:OpenAddresses/FL/Columbia County": ["us-property-building-102", "us-geodata-aggregate-1"],
|
|
76
|
+
"overture:OpenAddresses/FL/Desoto County": ["us-property-building-114", "us-geodata-aggregate-1"],
|
|
77
|
+
"overture:OpenAddresses/FL/Duval County": ["us-property-building-26", "us-geodata-aggregate-1"],
|
|
78
|
+
"overture:OpenAddresses/FL/Flagler County": ["us-property-building-82", "us-geodata-aggregate-1"],
|
|
79
|
+
"overture:OpenAddresses/FL/Florida Department of Revenue": ["us-property-building-32", "us-geodata-aggregate-1"],
|
|
80
|
+
"overture:OpenAddresses/FL/Hardee County": ["us-property-building-115", "us-geodata-aggregate-1"],
|
|
81
|
+
"overture:OpenAddresses/FL/Hendry County": ["us-property-building-104", "us-geodata-aggregate-1"],
|
|
82
|
+
"overture:OpenAddresses/FL/Hernando County": ["us-property-building-69", "us-geodata-aggregate-1"],
|
|
83
|
+
"overture:OpenAddresses/FL/Highlands County": ["us-property-building-64", "us-geodata-aggregate-1"],
|
|
84
|
+
"overture:OpenAddresses/FL/Hillsborough County": ["us-property-building-22", "us-geodata-aggregate-1"],
|
|
85
|
+
"overture:OpenAddresses/FL/Indian River County": ["us-property-building-74", "us-geodata-aggregate-1"],
|
|
86
|
+
"overture:OpenAddresses/FL/Lake County": ["us-property-building-47", "us-geodata-aggregate-1"],
|
|
87
|
+
"overture:OpenAddresses/FL/Lee County": ["us-property-building-24", "us-geodata-aggregate-1"],
|
|
88
|
+
"overture:OpenAddresses/FL/Leon County": ["us-property-building-63", "us-geodata-aggregate-1"],
|
|
89
|
+
"overture:OpenAddresses/FL/Manatee County": ["us-property-building-42", "us-geodata-aggregate-1"],
|
|
90
|
+
"overture:OpenAddresses/FL/Marion County": ["us-property-building-68", "us-geodata-aggregate-1"],
|
|
91
|
+
"overture:OpenAddresses/FL/Martin County": ["us-property-building-79", "us-geodata-aggregate-1"],
|
|
92
|
+
"overture:OpenAddresses/FL/Miami-Dade County": ["us-property-building-14", "us-geodata-aggregate-1"],
|
|
93
|
+
"overture:OpenAddresses/FL/Nassau County": ["us-property-building-96", "us-geodata-aggregate-1"],
|
|
94
|
+
"overture:OpenAddresses/FL/Okaloosa County": ["us-property-building-70", "us-geodata-aggregate-1"],
|
|
95
|
+
"overture:OpenAddresses/FL/Orange County": ["us-property-building-23", "us-geodata-aggregate-1"],
|
|
96
|
+
"overture:OpenAddresses/FL/Osceola County": ["us-property-building-55", "us-geodata-aggregate-1"],
|
|
97
|
+
"overture:OpenAddresses/FL/Palm Beach County": ["us-property-building-21", "us-geodata-aggregate-1"],
|
|
98
|
+
"overture:OpenAddresses/FL/Pasco County": ["us-property-building-38", "us-geodata-aggregate-1"],
|
|
99
|
+
"overture:OpenAddresses/FL/Pinellas County": ["us-property-building-28", "us-geodata-aggregate-1"],
|
|
100
|
+
"overture:OpenAddresses/FL/Polk County": ["us-property-building-33", "us-geodata-aggregate-1"],
|
|
101
|
+
"overture:OpenAddresses/FL/Putnam County": ["us-property-building-84", "us-geodata-aggregate-1"],
|
|
102
|
+
"overture:OpenAddresses/FL/Santa Rosa County": ["us-property-building-80", "us-geodata-aggregate-1"],
|
|
103
|
+
"overture:OpenAddresses/FL/Sarasota County": ["us-property-building-39", "us-geodata-aggregate-1"],
|
|
104
|
+
"overture:OpenAddresses/FL/Seminole County": ["us-property-building-51", "us-geodata-aggregate-1"],
|
|
105
|
+
"overture:OpenAddresses/FL/St. Johns County": ["us-property-building-57", "us-geodata-aggregate-1"],
|
|
106
|
+
"overture:OpenAddresses/FL/St. Lucie County": ["us-property-building-53", "us-geodata-aggregate-1"],
|
|
107
|
+
"overture:OpenAddresses/FL/Sumter County": ["us-property-building-73", "us-geodata-aggregate-1"],
|
|
108
|
+
"overture:OpenAddresses/FL/Volusia County": ["us-property-building-44", "us-geodata-aggregate-1"],
|
|
109
|
+
"overture:OpenAddresses/FL/Walton County": ["us-property-building-89", "us-geodata-aggregate-1"],
|
|
110
|
+
"overture:OpenAddresses/GA/Athens-Clarke County GIS": ["us-property-building-87", "us-geodata-aggregate-1"],
|
|
111
|
+
"overture:OpenAddresses/GA/DeKalb County": ["us-property-building-34", "us-geodata-aggregate-1"],
|
|
112
|
+
"overture:OpenAddresses/ID/City of Boise": ["us-property-building-45", "us-geodata-aggregate-1"],
|
|
113
|
+
"overture:OpenAddresses/MA/MassGIS": ["us-property-building-9", "us-geodata-aggregate-1"],
|
|
114
|
+
"overture:OpenAddresses/MI/Allegan County": ["us-property-building-94", "us-geodata-aggregate-1"],
|
|
115
|
+
"overture:OpenAddresses/MI/Kent County": ["us-property-building-52", "us-geodata-aggregate-1"],
|
|
116
|
+
"overture:OpenAddresses/MI/Muskegon County": ["us-property-building-88", "us-geodata-aggregate-1"],
|
|
117
|
+
"overture:OpenAddresses/MI/Oakland County": ["us-property-building-29", "us-geodata-aggregate-1"],
|
|
118
|
+
"overture:OpenAddresses/MN/Department of Public Safety": ["us-property-building-12", "us-geodata-aggregate-1"],
|
|
119
|
+
"overture:OpenAddresses/MS/Desoto County": ["us-property-building-85", "us-geodata-aggregate-1"],
|
|
120
|
+
"overture:OpenAddresses/MS/MARIS": ["us-property-building-16", "us-geodata-aggregate-1"],
|
|
121
|
+
"overture:OpenAddresses/NV/Carson City": ["us-property-building-108", "us-geodata-aggregate-1"],
|
|
122
|
+
"overture:OpenAddresses/NY/NYC Open Data": ["us-property-building-18", "us-geodata-aggregate-1"],
|
|
123
|
+
"overture:OpenAddresses/OR/Jackson County": ["us-property-building-72", "us-geodata-aggregate-1"],
|
|
124
|
+
"overture:OpenAddresses/OR/State of Oregon": ["us-property-building-13", "us-geodata-aggregate-1"],
|
|
125
|
+
"overture:OpenAddresses/PA/City of Scranton GIS": ["us-property-building-81", "us-geodata-aggregate-1"],
|
|
126
|
+
"overture:OpenAddresses/WI/Waupaca County": ["us-property-building-107", "us-geodata-aggregate-1"]
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
*
|
|
68
68
|
* A country whose codex `layoutForCountry` is `null` has no rendering to write the row in.
|
|
69
69
|
* The row is refused with {@linkcode CORDISRefusal.CountryNoLayout} rather than rendered in another
|
|
70
|
-
* country's order
|
|
70
|
+
* country's order.
|
|
71
71
|
*
|
|
72
72
|
* ## The street line
|
|
73
73
|
*
|
|
@@ -22,16 +22,36 @@ import { TextSpliterator } from "spliterator"
|
|
|
22
22
|
* The largest dictionary is 8.4 KB, and each caller loads it once per process at module load.
|
|
23
23
|
*/
|
|
24
24
|
export async function loadLibpostalDictionary(language: string, filename: string): Promise<Set<string>> {
|
|
25
|
+
return new Set((await loadLibpostalCanonicalForms(language, filename)).keys())
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Loads one curated libpostal dictionary as a map from each lower-cased form
|
|
30
|
+
* to its line's canonical spelling.
|
|
31
|
+
*
|
|
32
|
+
* `ул.` and `улица` both map to `улица`, so a count of distinct canonical values
|
|
33
|
+
* counts street types rather than their spellings.
|
|
34
|
+
* A form two lines share keeps the first line's canonical spelling.
|
|
35
|
+
*/
|
|
36
|
+
export async function loadLibpostalCanonicalForms(language: string, filename: string): Promise<Map<string, string>> {
|
|
25
37
|
const text = await readLocalTextFile(resourceDictionaryPath("libpostal", language, filename))
|
|
26
|
-
const
|
|
38
|
+
const forms = new Map<string, string>()
|
|
27
39
|
|
|
28
40
|
for (const line of TextSpliterator.from(text)) {
|
|
29
41
|
if (line.startsWith("#")) continue
|
|
30
42
|
|
|
43
|
+
let canonical: string | null = null
|
|
44
|
+
|
|
31
45
|
for (const form of TextSpliterator.from(line, { delimiter: "|" })) {
|
|
32
|
-
|
|
46
|
+
const lower = form.toLowerCase()
|
|
47
|
+
|
|
48
|
+
canonical ??= lower
|
|
49
|
+
|
|
50
|
+
if (!forms.has(lower)) {
|
|
51
|
+
forms.set(lower, canonical)
|
|
52
|
+
}
|
|
33
53
|
}
|
|
34
54
|
}
|
|
35
55
|
|
|
36
|
-
return
|
|
56
|
+
return forms
|
|
37
57
|
}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import { formatAddressRow } from "@mailwoman/codex/address/format"
|
|
14
|
+
import { countryPostcodeFormat, matchCountryPostcode } from "@mailwoman/codex/postcode/country-formats"
|
|
14
15
|
import { tryParsingJSON } from "@mailwoman/core/json"
|
|
15
16
|
import { extractDelimited } from "@mailwoman/core/scripting/arguments"
|
|
16
17
|
import { stripCombiningMarks } from "@mailwoman/normalize/fold"
|
|
@@ -71,6 +72,15 @@ interface OSMCorpusRow {
|
|
|
71
72
|
district?: string | null
|
|
72
73
|
province?: string | null
|
|
73
74
|
country?: string | null
|
|
75
|
+
/**
|
|
76
|
+
* The containing administrative area's name, which `emit-corpus-jsonl --locality-level`
|
|
77
|
+
* writes for a record without `addr:city`.
|
|
78
|
+
*/
|
|
79
|
+
boundary_locality?: string | null
|
|
80
|
+
/**
|
|
81
|
+
* The same for a record without `addr:suburb`, from `--dependent-locality-level`.
|
|
82
|
+
*/
|
|
83
|
+
boundary_dependent_locality?: string | null
|
|
74
84
|
}
|
|
75
85
|
|
|
76
86
|
const MAX_STREET_WORDS = 8
|
|
@@ -150,10 +160,13 @@ function parseLine(line: string): OSMCorpusRow | null {
|
|
|
150
160
|
* A row whose `addr:street` holds a line rather than a name stays refused:
|
|
151
161
|
* the mapper supplied a street, and the value is a line.
|
|
152
162
|
*
|
|
163
|
+
* A postcode is kept when the whole value has `country`'s postcode format.
|
|
164
|
+
*
|
|
153
165
|
* Each refusal and each discarded component increments its reason in `dropped`.
|
|
154
166
|
*/
|
|
155
167
|
export function componentsForOSMRow(
|
|
156
168
|
row: OSMCorpusRow,
|
|
169
|
+
country: string,
|
|
157
170
|
dropped?: Pick<AdapterOptions, "dropped">
|
|
158
171
|
): CanonicalRow["components"] | null {
|
|
159
172
|
const tally = dropped ?? {}
|
|
@@ -189,10 +202,19 @@ export function componentsForOSMRow(
|
|
|
189
202
|
|
|
190
203
|
const postcode = clean(row.postcode)
|
|
191
204
|
|
|
192
|
-
if (postcode
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
205
|
+
if (postcode) {
|
|
206
|
+
// The country's own format decides, so Argentina's `C1425ABC`, Brunei's `BS8811` and Chile's
|
|
207
|
+
// seven digits stay postcodes, and a value outside the country's form is dropped by name.
|
|
208
|
+
const matched = matchCountryPostcode(postcode, country)
|
|
209
|
+
|
|
210
|
+
if (matched) {
|
|
211
|
+
components.postcode = matched
|
|
212
|
+
} else {
|
|
213
|
+
countDropped(
|
|
214
|
+
tally,
|
|
215
|
+
countryPostcodeFormat(country) ? "component:postcode:not-country-format" : "component:postcode:country-has-none"
|
|
216
|
+
)
|
|
217
|
+
}
|
|
196
218
|
}
|
|
197
219
|
|
|
198
220
|
const city = clean(row.city)
|
|
@@ -200,19 +222,28 @@ export function componentsForOSMRow(
|
|
|
200
222
|
|
|
201
223
|
if (split) {
|
|
202
224
|
components.locality = split.locality
|
|
225
|
+
} else {
|
|
226
|
+
// The containing boundary's name stands in only where the mapper tagged no city,
|
|
227
|
+
// so a tagged value is never replaced by a position.
|
|
228
|
+
const boundary = clean(row.boundary_locality)
|
|
229
|
+
|
|
230
|
+
if (boundary) {
|
|
231
|
+
components.locality = boundary
|
|
232
|
+
countDropped(tally, "kept:locality-from-boundary")
|
|
233
|
+
}
|
|
203
234
|
}
|
|
204
235
|
|
|
205
|
-
// Dependent-locality candidates in priority order (suburb, subdistrict, district, place,
|
|
206
|
-
// `district` never becomes `region`,
|
|
207
|
-
// renders it only when no city is present.
|
|
208
|
-
const dependent = [row.suburb, row.subdistrict, row.district, row.place, split?.head]
|
|
236
|
+
// Dependent-locality candidates in priority order (suburb, subdistrict, district, place,
|
|
237
|
+
// city head, then the containing boundary's name); `district` never becomes `region`,
|
|
238
|
+
// because Vietnam's country template renders it only when no city is present.
|
|
239
|
+
const dependent = [row.suburb, row.subdistrict, row.district, row.place, split?.head, row.boundary_dependent_locality]
|
|
209
240
|
.map((value) => clean(value))
|
|
210
241
|
.find(
|
|
211
242
|
(value) =>
|
|
212
243
|
value !== null &&
|
|
213
244
|
!value.includes(",") &&
|
|
214
245
|
(street === null || !sameName(value, street)) &&
|
|
215
|
-
(
|
|
246
|
+
(!components.locality || !sameName(value, components.locality))
|
|
216
247
|
)
|
|
217
248
|
|
|
218
249
|
if (dependent) {
|
|
@@ -221,7 +252,7 @@ export function componentsForOSMRow(
|
|
|
221
252
|
|
|
222
253
|
const province = clean(row.province)
|
|
223
254
|
|
|
224
|
-
if (province && (!
|
|
255
|
+
if (province && (!components.locality || !sameName(province, components.locality))) {
|
|
225
256
|
components.region = province
|
|
226
257
|
}
|
|
227
258
|
|
|
@@ -317,7 +348,7 @@ export function createOSMAdapter(): CorpusAdapter {
|
|
|
317
348
|
countDropped(opts, "kept:country-untagged")
|
|
318
349
|
}
|
|
319
350
|
|
|
320
|
-
const components = componentsForOSMRow(row, opts)
|
|
351
|
+
const components = componentsForOSMRow(row, country, opts)
|
|
321
352
|
|
|
322
353
|
if (!components) continue
|
|
323
354
|
|
package/lib/adapters.ts
CHANGED
|
@@ -50,9 +50,11 @@ import { defaultAdapterRegistry } from "#adapters/registry"
|
|
|
50
50
|
import { wofAdminAdapter } from "#adapters/wof/admin/json/adapter"
|
|
51
51
|
import { wofPostalcodeAdapter } from "#adapters/wof/postalcode-json/adapter"
|
|
52
52
|
import { gnafAdapter } from "#au/adapters/gnaf/adapter"
|
|
53
|
+
import { azerbaijanPlacesAdapter } from "#az/adapters/opendata/adapter"
|
|
53
54
|
import { brusselsAdapter } from "#be/adapters/brussels/adapter"
|
|
54
55
|
import { vlaanderenAdapter } from "#be/adapters/vlaanderen/adapter"
|
|
55
56
|
import { wallonieAdapter } from "#be/adapters/wallonie/adapter"
|
|
57
|
+
import { gbpaAdapter } from "#bs/adapters/gbpa/adapter"
|
|
56
58
|
import { czCuzkAdapter } from "#cz/adapters/cuzk/adapter"
|
|
57
59
|
import { dkInspireAdapter } from "#dk/adapters/inspire/adapter"
|
|
58
60
|
import { adsAdapter } from "#ee/adapters/ads/adapter"
|
|
@@ -61,11 +63,15 @@ import { esCatastroAdapter } from "#es/adapters/catastro/adapter"
|
|
|
61
63
|
import { esGipuzkoaAdapter } from "#es/adapters/gipuzkoa/adapter"
|
|
62
64
|
import { esNavarraAdapter } from "#es/adapters/navarra/adapter"
|
|
63
65
|
import { ryhtiAdapter } from "#fi/adapters/ryhti/adapter"
|
|
66
|
+
import { adressurFaroeAdapter } from "#fo/adapters/adressur/adapter"
|
|
64
67
|
import { annuaireEducationAdapter } from "#fr/adapters/annuaire-education/adapter"
|
|
65
68
|
import { banAdapter } from "#fr/adapters/ban/adapter"
|
|
66
69
|
import { finessAdapter } from "#fr/adapters/finess/adapter"
|
|
67
70
|
import { gbOSOpenAdapter } from "#gb/adapters/os-open/adapter"
|
|
71
|
+
import { guamAddressPointsAdapter } from "#gu/adapters/bsp/adapter"
|
|
72
|
+
import { isleOfManLandRegistryAdapter } from "#im/adapters/land-registry/adapter"
|
|
68
73
|
import { itANACAdapter } from "#it/adapters/anac/adapter"
|
|
74
|
+
import { llvLiechtensteinAdapter } from "#li/adapters/llv/adapter"
|
|
69
75
|
import { bdAdressesAdapter } from "#lu/adapters/bd-adresses/adapter"
|
|
70
76
|
import { varisAdapter } from "#lv/adapters/varis/adapter"
|
|
71
77
|
import { nlKadasterAdapter } from "#nl/adapters/kadaster/adapter"
|
|
@@ -85,6 +91,7 @@ import { usgovImlsPlsAdapter } from "#us/adapters/usgov/imls-pls/adapter"
|
|
|
85
91
|
import { USGovIRSBMFAdapter } from "#us/adapters/usgov/irs-bmf/adapter"
|
|
86
92
|
import { usgovNADAdapter } from "#us/adapters/usgov/nad/adapter"
|
|
87
93
|
import { usgovNPPESAdapter } from "#us/adapters/usgov/nppes/adapter"
|
|
94
|
+
import { ideUruguayAdapter } from "#uy/adapters/ide/adapter"
|
|
88
95
|
|
|
89
96
|
/**
|
|
90
97
|
* Built-in adapters.
|
|
@@ -107,6 +114,13 @@ export const BUILTIN_ADAPTERS: readonly CorpusAdapter[] = [
|
|
|
107
114
|
banAdapter,
|
|
108
115
|
matrikkelenAdapter,
|
|
109
116
|
ryhtiAdapter,
|
|
117
|
+
ideUruguayAdapter,
|
|
118
|
+
llvLiechtensteinAdapter,
|
|
119
|
+
adressurFaroeAdapter,
|
|
120
|
+
isleOfManLandRegistryAdapter,
|
|
121
|
+
gbpaAdapter,
|
|
122
|
+
azerbaijanPlacesAdapter,
|
|
123
|
+
guamAddressPointsAdapter,
|
|
110
124
|
czCuzkAdapter,
|
|
111
125
|
dkInspireAdapter,
|
|
112
126
|
adsAdapter,
|