@mailwoman/corpus 9.4.0 → 10.0.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/README.md +16 -0
- package/lib/adapters/geonames/adapter.ts +3 -3
- package/lib/adapters/geonames/postal/adapter.ts +122 -0
- package/lib/adapters/index.ts +39 -32
- package/lib/adapters/openaddresses/adapter.ts +4 -7
- package/lib/adapters/osm/adapter.ts +278 -0
- package/lib/adapters/overture/adapter.ts +22 -7
- package/lib/adapters/utils/index.ts +1 -1
- package/lib/adapters/wof/admin/json/adapter.ts +239 -0
- package/lib/adapters/wof/json-rows.ts +181 -0
- package/lib/adapters/wof/postalcode-json/adapter.ts +196 -0
- package/lib/au/adapters/gnaf/adapter.ts +152 -0
- package/lib/au/adapters/gnaf/assemble.ts +225 -0
- package/lib/de/recipes/locale.ts +360 -0
- package/lib/fr/adapters/ban/adapter.ts +159 -0
- package/lib/fr/recipes/admin-split.ts +243 -0
- package/lib/fr/recipes/bare-street.ts +171 -0
- package/lib/fr/recipes/fragment.ts +334 -0
- package/lib/fr/recipes/lieudit.ts +274 -0
- package/lib/fr/recipes/order.ts +246 -0
- package/lib/fr/tools/fetch/ban.ts +289 -0
- package/lib/index.ts +1 -1
- package/lib/international/recipes/locale.ts +598 -0
- package/lib/jp/tools/fetch/houjin.ts +141 -0
- package/lib/kr/adapters/juso/label-rows.ts +259 -0
- package/lib/kr/adapters/localdata/align.ts +299 -0
- package/lib/kr/adapters/localdata/key-index.ts +185 -0
- package/lib/kr/adapters/localdata/permit-rows.ts +186 -0
- package/lib/kr/tools/fetch/juso.ts +172 -0
- package/lib/kr/tools/fetch/localdata.ts +206 -0
- package/lib/recipes/bare/postcode/eval.ts +99 -0
- package/lib/recipes/bare/postcode/index.ts +327 -0
- package/lib/recipes/country-balanced.ts +1 -1
- package/lib/recipes/index.ts +28 -21
- package/lib/recipes/intersection.ts +1 -1
- package/lib/recipes/po/box/cedex/au-nz.ts +82 -0
- package/lib/recipes/po/box/cedex/ca.ts +58 -0
- package/lib/recipes/po/box/cedex/fr.ts +76 -0
- package/lib/recipes/po/box/cedex/phrases.ts +108 -0
- package/lib/recipes/po/box/cedex/recipe.ts +203 -0
- package/lib/recipes/po/box/cedex/sources.ts +189 -0
- package/lib/recipes/po/box/cedex/types.ts +35 -0
- package/lib/recipes/po/box/cedex/us.ts +69 -0
- package/lib/recipes/po/box/cedex/vocabulary.ts +106 -0
- package/lib/recipes/po/box/cedex.ts +9 -0
- package/lib/recipes/po/box/index.ts +128 -0
- package/lib/recipes/scaffold.ts +18 -41
- package/lib/recipes/street/affix.ts +807 -0
- package/lib/recipes/sub/venue/context.ts +149 -0
- package/lib/recipes/sub/venue/index.ts +997 -0
- package/lib/recipes/sub/venue/sources.ts +739 -0
- package/lib/recipes/trailing-region.ts +6 -1
- package/lib/recipes/unit.ts +1 -1
- package/lib/sg/recipes/register.ts +270 -0
- package/lib/sg/tools/fetch/acra.ts +179 -0
- package/lib/south-asia/recipes/register.ts +214 -0
- package/lib/synthesizers/anchor-absorption.ts +1 -1
- package/lib/synthesizers/locale.ts +261 -0
- package/lib/synthesizers/street.ts +1 -1
- package/lib/synthesizers/utils.ts +2 -2
- package/lib/tools/audit.ts +3 -2
- package/lib/tools/corpus-stats.ts +3 -3
- package/lib/tools/fetch/download/index.ts +10 -0
- package/lib/tools/fetch/download/manifest.ts +102 -0
- package/lib/tools/fetch/download/network.ts +226 -0
- package/lib/tools/fetch/download/retry.ts +173 -0
- package/lib/tools/fetch/geonames/dump.ts +257 -0
- package/lib/tools/fetch/geonames/postal.ts +180 -0
- package/lib/tools/fetch/index.ts +30 -30
- package/lib/tools/fetch/openaddresses.ts +2 -2
- package/lib/tools/fetch/ourairports.ts +2 -2
- package/lib/tools/fetch/ppd.ts +1 -3
- package/lib/tools/fetch/wikidata-subvenue.ts +2 -2
- package/lib/tools/golden/promote.ts +340 -0
- package/lib/tools/golden/relabel-street/directory.ts +340 -0
- package/lib/tools/golden/relabel-street/index.ts +9 -0
- package/lib/tools/golden/relabel-street/row.ts +361 -0
- package/lib/tools/index.ts +10 -10
- package/lib/tools/ingest-csv.ts +5 -7
- package/lib/tools/lint/slice/vocab.ts +376 -0
- package/lib/tools/overlay-manifest.ts +92 -25
- package/lib/tools/overture-subvenue.ts +1 -1
- package/lib/tools/postcode-triples.ts +138 -14
- package/lib/tools/sub/venue/harvest.ts +234 -0
- package/lib/tools/sub/venue/head-nouns.ts +245 -0
- package/lib/tools/sub/venue/lexicon.ts +429 -0
- package/lib/tools/sub/venue/surfaces.ts +95 -0
- package/lib/tools/sub/venue/table.ts +281 -0
- package/lib/tools/sub/venue/wikidata.ts +85 -0
- package/lib/tw/tools/fetch/gcis.ts +180 -0
- package/lib/types.ts +1 -1
- package/lib/us/adapters/fcc-bdc/adapter.ts +173 -0
- package/lib/us/adapters/state/hi-schools/adapter.ts +160 -0
- package/lib/us/adapters/state/ia-contractors/adapter.ts +136 -0
- package/lib/us/adapters/state/ny-notaries/adapter.ts +133 -0
- package/lib/us/adapters/state/tx-notaries/adapter.ts +149 -0
- package/lib/us/adapters/tiger/adapter.ts +250 -0
- package/lib/us/adapters/usgov/hrsa-fqhc/adapter.ts +156 -0
- package/lib/us/adapters/usgov/imls-pls/adapter.ts +134 -0
- package/lib/us/adapters/usgov/irs-bmf/adapter.ts +145 -0
- package/lib/us/adapters/usgov/nad/adapter.ts +324 -0
- package/lib/us/adapters/usgov/nppes/adapter.ts +143 -0
- package/lib/us/adapters/usgov/samhsa-treatment-locator/adapter.ts +182 -0
- package/lib/us/tools/fetch/hrsa.ts +59 -0
- package/lib/us/tools/fetch/imls-pls.ts +149 -0
- package/lib/us/tools/fetch/nad.ts +341 -0
- package/lib/us/tools/fetch/nppes.ts +165 -0
- package/lib/us/tools/fetch/state/hi-schools.ts +161 -0
- package/lib/us/tools/fetch/state/sources.ts +146 -0
- package/lib/us/tools/fetch/tiger-full.ts +308 -0
- package/lib/utils/align.ts +1 -1
- package/lib/utils/golden.ts +12 -8
- package/lib/utils/wof-json.ts +7 -13
- package/out/adapters/geonames/adapter.d.ts +1 -1
- package/out/adapters/geonames/adapter.js +3 -3
- package/out/adapters/geonames/adapter.js.map +1 -1
- package/out/adapters/geonames/postal/adapter.d.ts.map +1 -0
- package/out/adapters/geonames/postal/adapter.js +107 -0
- package/out/adapters/geonames/postal/adapter.js.map +1 -0
- package/out/adapters/index.d.ts +16 -16
- package/out/adapters/index.d.ts.map +1 -1
- package/out/adapters/index.js +34 -32
- package/out/adapters/index.js.map +1 -1
- package/out/adapters/openaddresses/adapter.d.ts.map +1 -1
- package/out/adapters/openaddresses/adapter.js +4 -6
- package/out/adapters/openaddresses/adapter.js.map +1 -1
- package/out/adapters/osm/adapter.d.ts +95 -0
- package/out/adapters/osm/adapter.d.ts.map +1 -0
- package/out/adapters/osm/adapter.js +211 -0
- package/out/adapters/osm/adapter.js.map +1 -0
- package/out/adapters/overture/adapter.d.ts +10 -0
- package/out/adapters/overture/adapter.d.ts.map +1 -1
- package/out/adapters/overture/adapter.js +20 -7
- package/out/adapters/overture/adapter.js.map +1 -1
- package/out/adapters/synth-po-box/adapter.js.map +1 -1
- package/out/adapters/utils/index.d.ts +1 -1
- package/out/adapters/utils/index.d.ts.map +1 -1
- package/out/adapters/utils/index.js.map +1 -1
- package/out/adapters/wof/admin/json/adapter.d.ts +79 -0
- package/out/adapters/wof/admin/json/adapter.d.ts.map +1 -0
- package/out/adapters/wof/admin/json/adapter.js +204 -0
- package/out/adapters/wof/admin/json/adapter.js.map +1 -0
- package/out/adapters/wof/json-rows.d.ts +73 -0
- package/out/adapters/wof/json-rows.d.ts.map +1 -0
- package/out/adapters/wof/json-rows.js +115 -0
- package/out/adapters/wof/json-rows.js.map +1 -0
- package/out/adapters/wof/postalcode-json/adapter.d.ts +65 -0
- package/out/adapters/wof/postalcode-json/adapter.d.ts.map +1 -0
- package/out/adapters/wof/postalcode-json/adapter.js +167 -0
- package/out/adapters/wof/postalcode-json/adapter.js.map +1 -0
- package/out/au/adapters/gnaf/adapter.d.ts.map +1 -0
- package/out/au/adapters/gnaf/adapter.js +127 -0
- package/out/au/adapters/gnaf/adapter.js.map +1 -0
- package/out/au/adapters/gnaf/assemble.d.ts +65 -0
- package/out/au/adapters/gnaf/assemble.d.ts.map +1 -0
- package/out/au/adapters/gnaf/assemble.js +154 -0
- package/out/au/adapters/gnaf/assemble.js.map +1 -0
- package/out/cn/recipes/organizational-units.d.ts +36 -0
- package/out/cn/recipes/organizational-units.d.ts.map +1 -0
- package/out/cn/recipes/organizational-units.js +159 -0
- package/out/cn/recipes/organizational-units.js.map +1 -0
- package/out/cz/recipes/pcfirst-preposition.d.ts +22 -0
- package/out/cz/recipes/pcfirst-preposition.d.ts.map +1 -0
- package/out/cz/recipes/pcfirst-preposition.js +101 -0
- package/out/cz/recipes/pcfirst-preposition.js.map +1 -0
- package/out/de/recipes/locale.d.ts +44 -0
- package/out/de/recipes/locale.d.ts.map +1 -0
- package/out/de/recipes/locale.js +289 -0
- package/out/de/recipes/locale.js.map +1 -0
- package/out/env.d.ts +1 -1
- package/out/fr/adapters/ban/adapter.d.ts.map +1 -0
- package/out/fr/adapters/ban/adapter.js +123 -0
- package/out/fr/adapters/ban/adapter.js.map +1 -0
- package/out/fr/adapters/ban/street-decompose.d.ts.map +1 -0
- package/out/fr/adapters/ban/street-decompose.js.map +1 -0
- package/out/fr/recipes/admin-split.d.ts +38 -0
- package/out/fr/recipes/admin-split.d.ts.map +1 -0
- package/out/fr/recipes/admin-split.js +192 -0
- package/out/fr/recipes/admin-split.js.map +1 -0
- package/out/fr/recipes/bare-street.d.ts +28 -0
- package/out/fr/recipes/bare-street.d.ts.map +1 -0
- package/out/fr/recipes/bare-street.js +144 -0
- package/out/fr/recipes/bare-street.js.map +1 -0
- package/out/fr/recipes/fragment.d.ts +77 -0
- package/out/fr/recipes/fragment.d.ts.map +1 -0
- package/out/fr/recipes/fragment.js +277 -0
- package/out/fr/recipes/fragment.js.map +1 -0
- package/out/fr/recipes/lieudit.d.ts +32 -0
- package/out/fr/recipes/lieudit.d.ts.map +1 -0
- package/out/fr/recipes/lieudit.js +211 -0
- package/out/fr/recipes/lieudit.js.map +1 -0
- package/out/fr/recipes/order.d.ts +38 -0
- package/out/fr/recipes/order.d.ts.map +1 -0
- package/out/fr/recipes/order.js +198 -0
- package/out/fr/recipes/order.js.map +1 -0
- package/out/fr/tools/fetch/ban.d.ts +31 -0
- package/out/fr/tools/fetch/ban.d.ts.map +1 -0
- package/out/fr/tools/fetch/ban.js +239 -0
- package/out/fr/tools/fetch/ban.js.map +1 -0
- package/out/index.d.ts +1 -1
- package/out/index.d.ts.map +1 -1
- package/out/index.js +1 -1
- package/out/index.js.map +1 -1
- package/out/international/recipes/locale.d.ts +136 -0
- package/out/international/recipes/locale.d.ts.map +1 -0
- package/out/international/recipes/locale.js +458 -0
- package/out/international/recipes/locale.js.map +1 -0
- package/out/jp/adapters/wof-admin/adapter.d.ts.map +1 -0
- package/out/jp/adapters/wof-admin/adapter.js.map +1 -0
- package/out/jp/tools/fetch/houjin.d.ts +24 -0
- package/out/jp/tools/fetch/houjin.d.ts.map +1 -0
- package/out/jp/tools/fetch/houjin.js +102 -0
- package/out/jp/tools/fetch/houjin.js.map +1 -0
- package/out/kr/adapters/juso/label-rows.d.ts +76 -0
- package/out/kr/adapters/juso/label-rows.d.ts.map +1 -0
- package/out/kr/adapters/juso/label-rows.js +194 -0
- package/out/kr/adapters/juso/label-rows.js.map +1 -0
- package/out/kr/adapters/localdata/align.d.ts +43 -0
- package/out/kr/adapters/localdata/align.d.ts.map +1 -0
- package/out/kr/adapters/localdata/align.js +223 -0
- package/out/kr/adapters/localdata/align.js.map +1 -0
- package/out/kr/adapters/localdata/key-index.d.ts +71 -0
- package/out/kr/adapters/localdata/key-index.d.ts.map +1 -0
- package/out/kr/adapters/localdata/key-index.js +133 -0
- package/out/kr/adapters/localdata/key-index.js.map +1 -0
- package/out/kr/adapters/localdata/permit-rows.d.ts +66 -0
- package/out/kr/adapters/localdata/permit-rows.d.ts.map +1 -0
- package/out/kr/adapters/localdata/permit-rows.js +131 -0
- package/out/kr/adapters/localdata/permit-rows.js.map +1 -0
- package/out/kr/tools/fetch/juso.d.ts +30 -0
- package/out/kr/tools/fetch/juso.d.ts.map +1 -0
- package/out/kr/tools/fetch/juso.js +120 -0
- package/out/kr/tools/fetch/juso.js.map +1 -0
- package/out/kr/tools/fetch/localdata.d.ts +30 -0
- package/out/kr/tools/fetch/localdata.d.ts.map +1 -0
- package/out/kr/tools/fetch/localdata.js +139 -0
- package/out/kr/tools/fetch/localdata.js.map +1 -0
- package/out/nl/recipes/postcode.d.ts +26 -0
- package/out/nl/recipes/postcode.d.ts.map +1 -0
- package/out/nl/recipes/postcode.js +103 -0
- package/out/nl/recipes/postcode.js.map +1 -0
- package/out/no/recipes/fragment.d.ts +43 -0
- package/out/no/recipes/fragment.d.ts.map +1 -0
- package/out/no/recipes/fragment.js +183 -0
- package/out/no/recipes/fragment.js.map +1 -0
- package/out/no/recipes/street/index.d.ts +18 -0
- package/out/no/recipes/street/index.d.ts.map +1 -0
- package/out/no/recipes/street/index.js +72 -0
- package/out/no/recipes/street/index.js.map +1 -0
- package/out/no/recipes/street/led.d.ts +24 -0
- package/out/no/recipes/street/led.d.ts.map +1 -0
- package/out/no/recipes/street/led.js +114 -0
- package/out/no/recipes/street/led.js.map +1 -0
- package/out/recipes/bare/country.d.ts +25 -0
- package/out/recipes/bare/country.d.ts.map +1 -0
- package/out/recipes/bare/country.js +88 -0
- package/out/recipes/bare/country.js.map +1 -0
- package/out/recipes/bare/postcode/eval.d.ts +29 -0
- package/out/recipes/bare/postcode/eval.d.ts.map +1 -0
- package/out/recipes/bare/postcode/eval.js +85 -0
- package/out/recipes/bare/postcode/eval.js.map +1 -0
- package/out/recipes/bare/postcode/index.d.ts +62 -0
- package/out/recipes/bare/postcode/index.d.ts.map +1 -0
- package/out/recipes/bare/postcode/index.js +267 -0
- package/out/recipes/bare/postcode/index.js.map +1 -0
- package/out/recipes/country-balanced.js.map +1 -1
- package/out/recipes/index.d.ts.map +1 -1
- package/out/recipes/index.js +28 -21
- package/out/recipes/index.js.map +1 -1
- package/out/recipes/intersection.js.map +1 -1
- package/out/recipes/po/box/cedex/au-nz.d.ts +7 -0
- package/out/recipes/po/box/cedex/au-nz.d.ts.map +1 -0
- package/out/recipes/po/box/cedex/au-nz.js +56 -0
- package/out/recipes/po/box/cedex/au-nz.js.map +1 -0
- package/out/recipes/po/box/cedex/ca.d.ts +7 -0
- package/out/recipes/po/box/cedex/ca.d.ts.map +1 -0
- package/out/recipes/po/box/cedex/ca.js +38 -0
- package/out/recipes/po/box/cedex/ca.js.map +1 -0
- package/out/recipes/po/box/cedex/fr.d.ts +7 -0
- package/out/recipes/po/box/cedex/fr.d.ts.map +1 -0
- package/out/recipes/po/box/cedex/fr.js +57 -0
- package/out/recipes/po/box/cedex/fr.js.map +1 -0
- package/out/recipes/po/box/cedex/phrases.d.ts +8 -0
- package/out/recipes/po/box/cedex/phrases.d.ts.map +1 -0
- package/out/recipes/po/box/cedex/phrases.js +76 -0
- package/out/recipes/po/box/cedex/phrases.js.map +1 -0
- package/out/recipes/po/box/cedex/recipe.d.ts +9 -0
- package/out/recipes/po/box/cedex/recipe.d.ts.map +1 -0
- package/out/recipes/po/box/cedex/recipe.js +153 -0
- package/out/recipes/po/box/cedex/recipe.js.map +1 -0
- package/out/recipes/po/box/cedex/sources.d.ts +86 -0
- package/out/recipes/po/box/cedex/sources.d.ts.map +1 -0
- package/out/recipes/po/box/cedex/sources.js +143 -0
- package/out/recipes/po/box/cedex/sources.js.map +1 -0
- package/out/recipes/po/box/cedex/types.d.ts +31 -0
- package/out/recipes/po/box/cedex/types.d.ts.map +1 -0
- package/out/recipes/po/box/cedex/types.js +5 -0
- package/out/recipes/po/box/cedex/types.js.map +1 -0
- package/out/recipes/po/box/cedex/us.d.ts +7 -0
- package/out/recipes/po/box/cedex/us.d.ts.map +1 -0
- package/out/recipes/po/box/cedex/us.js +51 -0
- package/out/recipes/po/box/cedex/us.js.map +1 -0
- package/out/recipes/po/box/cedex/vocabulary.d.ts +68 -0
- package/out/recipes/po/box/cedex/vocabulary.d.ts.map +1 -0
- package/out/recipes/po/box/cedex/vocabulary.js +90 -0
- package/out/recipes/po/box/cedex/vocabulary.js.map +1 -0
- package/out/recipes/po/box/cedex.d.ts +9 -0
- package/out/recipes/po/box/cedex.d.ts.map +1 -0
- package/out/recipes/po/box/cedex.js +9 -0
- package/out/recipes/po/box/cedex.js.map +1 -0
- package/out/recipes/po/box/index.d.ts +17 -0
- package/out/recipes/po/box/index.d.ts.map +1 -0
- package/out/recipes/po/box/index.js +105 -0
- package/out/recipes/po/box/index.js.map +1 -0
- package/out/recipes/scaffold.d.ts +20 -0
- package/out/recipes/scaffold.d.ts.map +1 -1
- package/out/recipes/scaffold.js +18 -37
- package/out/recipes/scaffold.js.map +1 -1
- package/out/recipes/street/affix.d.ts +89 -0
- package/out/recipes/street/affix.d.ts.map +1 -0
- package/out/recipes/street/affix.js +565 -0
- package/out/recipes/street/affix.js.map +1 -0
- package/out/recipes/street/bare.d.ts +25 -0
- package/out/recipes/street/bare.d.ts.map +1 -0
- package/out/recipes/street/bare.js +87 -0
- package/out/recipes/street/bare.js.map +1 -0
- package/out/recipes/sub/venue/context.d.ts +29 -0
- package/out/recipes/sub/venue/context.d.ts.map +1 -0
- package/out/recipes/sub/venue/context.js +106 -0
- package/out/recipes/sub/venue/context.js.map +1 -0
- package/out/recipes/sub/venue/index.d.ts +270 -0
- package/out/recipes/sub/venue/index.d.ts.map +1 -0
- package/out/recipes/sub/venue/index.js +728 -0
- package/out/recipes/sub/venue/index.js.map +1 -0
- package/out/recipes/sub/venue/sources.d.ts +209 -0
- package/out/recipes/sub/venue/sources.d.ts.map +1 -0
- package/out/recipes/sub/venue/sources.js +555 -0
- package/out/recipes/sub/venue/sources.js.map +1 -0
- package/out/recipes/trailing-region.d.ts.map +1 -1
- package/out/recipes/trailing-region.js +6 -1
- package/out/recipes/trailing-region.js.map +1 -1
- package/out/recipes/unit.js.map +1 -1
- package/out/sg/recipes/register.d.ts +69 -0
- package/out/sg/recipes/register.d.ts.map +1 -0
- package/out/sg/recipes/register.js +211 -0
- package/out/sg/recipes/register.js.map +1 -0
- package/out/sg/tools/fetch/acra.d.ts +23 -0
- package/out/sg/tools/fetch/acra.d.ts.map +1 -0
- package/out/sg/tools/fetch/acra.js +126 -0
- package/out/sg/tools/fetch/acra.js.map +1 -0
- package/out/si/recipes/bare-village.d.ts +32 -0
- package/out/si/recipes/bare-village.d.ts.map +1 -0
- package/out/si/recipes/bare-village.js +89 -0
- package/out/si/recipes/bare-village.js.map +1 -0
- package/out/south-asia/recipes/register.d.ts +51 -0
- package/out/south-asia/recipes/register.d.ts.map +1 -0
- package/out/south-asia/recipes/register.js +154 -0
- package/out/south-asia/recipes/register.js.map +1 -0
- package/out/synthesizers/anchor-absorption.d.ts +1 -1
- package/out/synthesizers/anchor-absorption.d.ts.map +1 -1
- package/out/synthesizers/anchor-absorption.js.map +1 -1
- package/out/synthesizers/boundary-stress.js.map +1 -1
- package/out/synthesizers/house-venue.js.map +1 -1
- package/out/synthesizers/intersection.js.map +1 -1
- package/out/synthesizers/locale.d.ts +116 -0
- package/out/synthesizers/locale.d.ts.map +1 -0
- package/out/synthesizers/locale.js +150 -0
- package/out/synthesizers/locale.js.map +1 -0
- package/out/synthesizers/no-street.d.ts.map +1 -1
- package/out/synthesizers/no-street.js.map +1 -1
- package/out/synthesizers/po-box.js.map +1 -1
- package/out/synthesizers/street.d.ts.map +1 -1
- package/out/synthesizers/street.js +1 -1
- package/out/synthesizers/street.js.map +1 -1
- package/out/synthesizers/utils.js +1 -1
- package/out/synthesizers/utils.js.map +1 -1
- package/out/test-kit/corpus-recipe.d.ts.map +1 -1
- package/out/test-kit/corpus-recipe.js.map +1 -1
- package/out/tools/audit.d.ts.map +1 -1
- package/out/tools/audit.js +3 -2
- package/out/tools/audit.js.map +1 -1
- package/out/tools/corpus-stats.js +3 -3
- package/out/tools/corpus-stats.js.map +1 -1
- package/out/tools/fetch/download/index.d.ts +10 -0
- package/out/tools/fetch/download/index.d.ts.map +1 -0
- package/out/tools/fetch/download/index.js +10 -0
- package/out/tools/fetch/download/index.js.map +1 -0
- package/out/tools/fetch/download/manifest.d.ts +47 -0
- package/out/tools/fetch/download/manifest.d.ts.map +1 -0
- package/out/tools/fetch/download/manifest.js +74 -0
- package/out/tools/fetch/download/manifest.js.map +1 -0
- package/out/tools/fetch/download/network.d.ts +105 -0
- package/out/tools/fetch/download/network.d.ts.map +1 -0
- package/out/tools/fetch/download/network.js +130 -0
- package/out/tools/fetch/download/network.js.map +1 -0
- package/out/tools/fetch/download/retry.d.ts +45 -0
- package/out/tools/fetch/download/retry.d.ts.map +1 -0
- package/out/tools/fetch/download/retry.js +136 -0
- package/out/tools/fetch/download/retry.js.map +1 -0
- package/out/tools/fetch/geonames/dump.d.ts +91 -0
- package/out/tools/fetch/geonames/dump.d.ts.map +1 -0
- package/out/tools/fetch/geonames/dump.js +171 -0
- package/out/tools/fetch/geonames/dump.js.map +1 -0
- package/out/tools/fetch/geonames/postal.d.ts +76 -0
- package/out/tools/fetch/geonames/postal.d.ts.map +1 -0
- package/out/tools/fetch/geonames/postal.js +126 -0
- package/out/tools/fetch/geonames/postal.js.map +1 -0
- package/out/tools/fetch/index.d.ts +30 -30
- package/out/tools/fetch/index.d.ts.map +1 -1
- package/out/tools/fetch/index.js +30 -30
- package/out/tools/fetch/index.js.map +1 -1
- package/out/tools/fetch/openaddresses.d.ts +1 -1
- package/out/tools/fetch/openaddresses.d.ts.map +1 -1
- package/out/tools/fetch/openaddresses.js +1 -1
- package/out/tools/fetch/openaddresses.js.map +1 -1
- package/out/tools/fetch/ourairports.d.ts +1 -1
- package/out/tools/fetch/ourairports.d.ts.map +1 -1
- package/out/tools/fetch/ourairports.js +1 -1
- package/out/tools/fetch/ourairports.js.map +1 -1
- package/out/tools/fetch/ppd.js +1 -3
- package/out/tools/fetch/ppd.js.map +1 -1
- package/out/tools/fetch/wikidata-subvenue.d.ts +1 -1
- package/out/tools/fetch/wikidata-subvenue.d.ts.map +1 -1
- package/out/tools/fetch/wikidata-subvenue.js +1 -1
- package/out/tools/fetch/wikidata-subvenue.js.map +1 -1
- package/out/tools/golden/expand.d.ts +90 -0
- package/out/tools/golden/expand.d.ts.map +1 -0
- package/out/tools/golden/expand.js +406 -0
- package/out/tools/golden/expand.js.map +1 -0
- package/out/tools/golden/promote.d.ts +72 -0
- package/out/tools/golden/promote.d.ts.map +1 -0
- package/out/tools/golden/promote.js +243 -0
- package/out/tools/golden/promote.js.map +1 -0
- package/out/tools/golden/relabel-street/directory.d.ts +83 -0
- package/out/tools/golden/relabel-street/directory.d.ts.map +1 -0
- package/out/tools/golden/relabel-street/directory.js +216 -0
- package/out/tools/golden/relabel-street/directory.js.map +1 -0
- package/out/tools/golden/relabel-street/index.d.ts +9 -0
- package/out/tools/golden/relabel-street/index.d.ts.map +1 -0
- package/out/tools/golden/relabel-street/index.js +9 -0
- package/out/tools/golden/relabel-street/index.js.map +1 -0
- package/out/tools/golden/relabel-street/row.d.ts +121 -0
- package/out/tools/golden/relabel-street/row.d.ts.map +1 -0
- package/out/tools/golden/relabel-street/row.js +232 -0
- package/out/tools/golden/relabel-street/row.js.map +1 -0
- package/out/tools/index.d.ts +10 -10
- package/out/tools/index.d.ts.map +1 -1
- package/out/tools/index.js +10 -10
- package/out/tools/index.js.map +1 -1
- package/out/tools/ingest-csv.d.ts.map +1 -1
- package/out/tools/ingest-csv.js +5 -7
- package/out/tools/ingest-csv.js.map +1 -1
- package/out/tools/lint/slice/index.d.ts +93 -0
- package/out/tools/lint/slice/index.d.ts.map +1 -0
- package/out/tools/lint/slice/index.js +322 -0
- package/out/tools/lint/slice/index.js.map +1 -0
- package/out/tools/lint/slice/vocab.d.ts +90 -0
- package/out/tools/lint/slice/vocab.d.ts.map +1 -0
- package/out/tools/lint/slice/vocab.js +254 -0
- package/out/tools/lint/slice/vocab.js.map +1 -0
- package/out/tools/overlay-manifest.d.ts +56 -6
- package/out/tools/overlay-manifest.d.ts.map +1 -1
- package/out/tools/overlay-manifest.js +56 -15
- package/out/tools/overlay-manifest.js.map +1 -1
- package/out/tools/overture-subvenue.d.ts +1 -1
- package/out/tools/postcode-triples.d.ts +36 -0
- package/out/tools/postcode-triples.d.ts.map +1 -1
- package/out/tools/postcode-triples.js +91 -12
- package/out/tools/postcode-triples.js.map +1 -1
- package/out/tools/slice/kryptonite.d.ts +32 -0
- package/out/tools/slice/kryptonite.d.ts.map +1 -0
- package/out/tools/slice/kryptonite.js +99 -0
- package/out/tools/slice/kryptonite.js.map +1 -0
- package/out/tools/slice/translit.d.ts +51 -0
- package/out/tools/slice/translit.d.ts.map +1 -0
- package/out/tools/slice/translit.js +166 -0
- package/out/tools/slice/translit.js.map +1 -0
- package/out/tools/sub/venue/harvest.d.ts +100 -0
- package/out/tools/sub/venue/harvest.d.ts.map +1 -0
- package/out/tools/sub/venue/harvest.js +168 -0
- package/out/tools/sub/venue/harvest.js.map +1 -0
- package/out/tools/sub/venue/head-nouns.d.ts +50 -0
- package/out/tools/sub/venue/head-nouns.d.ts.map +1 -0
- package/out/tools/sub/venue/head-nouns.js.map +1 -0
- package/out/tools/sub/venue/lexicon.d.ts +156 -0
- package/out/tools/sub/venue/lexicon.d.ts.map +1 -0
- package/out/tools/sub/venue/lexicon.js +283 -0
- package/out/tools/sub/venue/lexicon.js.map +1 -0
- package/out/tools/sub/venue/promotions.d.ts +94 -0
- package/out/tools/sub/venue/promotions.d.ts.map +1 -0
- package/out/tools/sub/venue/promotions.js +266 -0
- package/out/tools/sub/venue/promotions.js.map +1 -0
- package/out/tools/sub/venue/surfaces.d.ts +45 -0
- package/out/tools/sub/venue/surfaces.d.ts.map +1 -0
- package/out/tools/sub/venue/surfaces.js.map +1 -0
- package/out/tools/sub/venue/table.d.ts +229 -0
- package/out/tools/sub/venue/table.d.ts.map +1 -0
- package/out/tools/sub/venue/table.js.map +1 -0
- package/out/tools/sub/venue/wikidata.d.ts +26 -0
- package/out/tools/sub/venue/wikidata.d.ts.map +1 -0
- package/out/tools/sub/venue/wikidata.js +62 -0
- package/out/tools/sub/venue/wikidata.js.map +1 -0
- package/out/tw/tools/fetch/gcis.d.ts +23 -0
- package/out/tw/tools/fetch/gcis.d.ts.map +1 -0
- package/out/tw/tools/fetch/gcis.js +135 -0
- package/out/tw/tools/fetch/gcis.js.map +1 -0
- package/out/types.d.ts +1 -1
- package/out/types.d.ts.map +1 -1
- package/out/us/adapters/fcc-bdc/adapter.d.ts.map +1 -0
- package/out/us/adapters/fcc-bdc/adapter.js +142 -0
- package/out/us/adapters/fcc-bdc/adapter.js.map +1 -0
- package/out/us/adapters/state/hi-schools/adapter.d.ts.map +1 -0
- package/out/us/adapters/state/hi-schools/adapter.js +136 -0
- package/out/us/adapters/state/hi-schools/adapter.js.map +1 -0
- package/out/us/adapters/state/hi-schools/workbook.d.ts.map +1 -0
- package/out/us/adapters/state/hi-schools/workbook.js.map +1 -0
- package/out/us/adapters/state/ia-contractors/adapter.d.ts.map +1 -0
- package/out/us/adapters/state/ia-contractors/adapter.js +104 -0
- package/out/us/adapters/state/ia-contractors/adapter.js.map +1 -0
- package/out/us/adapters/state/ny-notaries/adapter.d.ts.map +1 -0
- package/out/us/adapters/state/ny-notaries/adapter.js +112 -0
- package/out/us/adapters/state/ny-notaries/adapter.js.map +1 -0
- package/out/us/adapters/state/tx-notaries/adapter.d.ts.map +1 -0
- package/out/us/adapters/state/tx-notaries/adapter.js +118 -0
- package/out/us/adapters/state/tx-notaries/adapter.js.map +1 -0
- package/out/us/adapters/tiger/adapter.d.ts +55 -0
- package/out/us/adapters/tiger/adapter.d.ts.map +1 -0
- package/out/us/adapters/tiger/adapter.js +197 -0
- package/out/us/adapters/tiger/adapter.js.map +1 -0
- package/out/us/adapters/tiger/street-decompose.d.ts.map +1 -0
- package/out/us/adapters/tiger/street-decompose.js.map +1 -0
- package/out/us/adapters/usgov/hrsa-fqhc/adapter.d.ts.map +1 -0
- package/out/us/adapters/usgov/hrsa-fqhc/adapter.js +121 -0
- package/out/us/adapters/usgov/hrsa-fqhc/adapter.js.map +1 -0
- package/out/us/adapters/usgov/imls-pls/adapter.d.ts.map +1 -0
- package/out/us/adapters/usgov/imls-pls/adapter.js +106 -0
- package/out/us/adapters/usgov/imls-pls/adapter.js.map +1 -0
- package/out/us/adapters/usgov/irs-bmf/adapter.d.ts.map +1 -0
- package/out/us/adapters/usgov/irs-bmf/adapter.js +116 -0
- package/out/us/adapters/usgov/irs-bmf/adapter.js.map +1 -0
- package/out/us/adapters/usgov/nad/adapter.d.ts.map +1 -0
- package/out/us/adapters/usgov/nad/adapter.js +239 -0
- package/out/us/adapters/usgov/nad/adapter.js.map +1 -0
- package/out/us/adapters/usgov/nppes/adapter.d.ts.map +1 -0
- package/out/us/adapters/usgov/nppes/adapter.js +110 -0
- package/out/us/adapters/usgov/nppes/adapter.js.map +1 -0
- package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.d.ts.map +1 -0
- package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.js +143 -0
- package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.js.map +1 -0
- package/out/us/fips-state.d.ts +41 -0
- package/out/us/fips-state.d.ts.map +1 -0
- package/out/us/fips-state.js +100 -0
- package/out/us/fips-state.js.map +1 -0
- package/out/us/tools/fetch/hrsa.d.ts +18 -0
- package/out/us/tools/fetch/hrsa.d.ts.map +1 -0
- package/out/us/tools/fetch/hrsa.js +46 -0
- package/out/us/tools/fetch/hrsa.js.map +1 -0
- package/out/us/tools/fetch/imls-pls.d.ts +25 -0
- package/out/us/tools/fetch/imls-pls.d.ts.map +1 -0
- package/out/us/tools/fetch/imls-pls.js +108 -0
- package/out/us/tools/fetch/imls-pls.js.map +1 -0
- package/out/us/tools/fetch/nad.d.ts +70 -0
- package/out/us/tools/fetch/nad.d.ts.map +1 -0
- package/out/us/tools/fetch/nad.js +234 -0
- package/out/us/tools/fetch/nad.js.map +1 -0
- package/out/us/tools/fetch/nppes.d.ts +26 -0
- package/out/us/tools/fetch/nppes.d.ts.map +1 -0
- package/out/us/tools/fetch/nppes.js +126 -0
- package/out/us/tools/fetch/nppes.js.map +1 -0
- package/out/us/tools/fetch/state/hi-schools.d.ts +26 -0
- package/out/us/tools/fetch/state/hi-schools.d.ts.map +1 -0
- package/out/us/tools/fetch/state/hi-schools.js +112 -0
- package/out/us/tools/fetch/state/hi-schools.js.map +1 -0
- package/out/us/tools/fetch/state/sources.d.ts +26 -0
- package/out/us/tools/fetch/state/sources.d.ts.map +1 -0
- package/out/us/tools/fetch/state/sources.js +111 -0
- package/out/us/tools/fetch/state/sources.js.map +1 -0
- package/out/us/tools/fetch/tiger-full.d.ts +22 -0
- package/out/us/tools/fetch/tiger-full.d.ts.map +1 -0
- package/out/us/tools/fetch/tiger-full.js +217 -0
- package/out/us/tools/fetch/tiger-full.js.map +1 -0
- package/out/utils/align.d.ts +1 -1
- package/out/utils/align.d.ts.map +1 -1
- package/out/utils/align.js.map +1 -1
- package/out/utils/golden.d.ts +7 -3
- package/out/utils/golden.d.ts.map +1 -1
- package/out/utils/golden.js +12 -8
- package/out/utils/golden.js.map +1 -1
- package/out/utils/parquet.d.ts.map +1 -1
- package/out/utils/split.js.map +1 -1
- package/out/utils/wof-json.d.ts.map +1 -1
- package/out/utils/wof-json.js +7 -12
- package/out/utils/wof-json.js.map +1 -1
- package/out/ve/recipes/reviewed-postcode-tail.d.ts.map +1 -0
- package/out/ve/recipes/reviewed-postcode-tail.js.map +1 -0
- package/package.json +196 -46
- package/lib/adapters/ban/adapter.ts +0 -190
- package/lib/adapters/fcc-bdc/adapter.ts +0 -174
- package/lib/adapters/geonames-postal/adapter.ts +0 -122
- package/lib/adapters/gnaf/adapter.ts +0 -149
- package/lib/adapters/gnaf/assemble.ts +0 -225
- package/lib/adapters/state-hi-schools/adapter.ts +0 -170
- package/lib/adapters/state-ia-contractors/adapter.ts +0 -144
- package/lib/adapters/state-ny-notaries/adapter.ts +0 -141
- package/lib/adapters/state-tx-notaries/adapter.ts +0 -157
- package/lib/adapters/tiger/adapter.ts +0 -252
- package/lib/adapters/usgov-hrsa-fqhc/adapter.ts +0 -167
- package/lib/adapters/usgov-imls-pls/adapter.ts +0 -143
- package/lib/adapters/usgov-irs-bmf/adapter.ts +0 -151
- package/lib/adapters/usgov-nad/adapter.ts +0 -334
- package/lib/adapters/usgov-nppes/adapter.ts +0 -151
- package/lib/adapters/usgov-samhsa-treatment-locator/adapter.ts +0 -193
- package/lib/adapters/wof-admin-json/adapter.ts +0 -231
- package/lib/adapters/wof-json-rows.ts +0 -129
- package/lib/adapters/wof-postalcode-json/adapter.ts +0 -176
- package/lib/recipes/fr-admin-split.ts +0 -243
- package/lib/recipes/fr-bare-street.ts +0 -171
- package/lib/recipes/fr-fragment.ts +0 -334
- package/lib/recipes/fr-lieudit.ts +0 -301
- package/lib/recipes/fr-order.ts +0 -246
- package/lib/recipes/german.ts +0 -360
- package/lib/recipes/locale.ts +0 -600
- package/lib/recipes/po-box-cedex.ts +0 -976
- package/lib/recipes/po-box.ts +0 -124
- package/lib/recipes/street-affix.ts +0 -805
- package/lib/recipes/sub-venue-sources.ts +0 -878
- package/lib/recipes/sub-venue.ts +0 -998
- package/lib/synthesizers/german.ts +0 -260
- package/lib/tools/fetch/acra-sg.ts +0 -174
- package/lib/tools/fetch/ban.ts +0 -289
- package/lib/tools/fetch/download.ts +0 -477
- package/lib/tools/fetch/gcis-tw.ts +0 -175
- package/lib/tools/fetch/geonames-dump.ts +0 -257
- package/lib/tools/fetch/geonames-postal.ts +0 -180
- package/lib/tools/fetch/houjin-jp.ts +0 -135
- package/lib/tools/fetch/hrsa.ts +0 -59
- package/lib/tools/fetch/imls-pls.ts +0 -149
- package/lib/tools/fetch/juso-kr.ts +0 -165
- package/lib/tools/fetch/localdata-kr.ts +0 -194
- package/lib/tools/fetch/nad.ts +0 -341
- package/lib/tools/fetch/nppes.ts +0 -165
- package/lib/tools/fetch/state-hi-schools.ts +0 -161
- package/lib/tools/fetch/state-sources.ts +0 -146
- package/lib/tools/fetch/tiger-full.ts +0 -308
- package/lib/tools/golden-promote.ts +0 -337
- package/lib/tools/golden-relabel-street.ts +0 -686
- package/lib/tools/lint-slice-vocab.ts +0 -388
- package/lib/tools/sub-venue/harvest.ts +0 -234
- package/lib/tools/sub-venue/head-nouns.ts +0 -245
- package/lib/tools/sub-venue/surfaces.ts +0 -95
- package/lib/tools/sub-venue/table.ts +0 -281
- package/lib/tools/sub-venue/wikidata.ts +0 -85
- package/lib/tools/sub-venue-lexicon.ts +0 -429
- package/out/adapters/ban/adapter.d.ts.map +0 -1
- package/out/adapters/ban/adapter.js +0 -149
- package/out/adapters/ban/adapter.js.map +0 -1
- package/out/adapters/ban/street-decompose.d.ts.map +0 -1
- package/out/adapters/ban/street-decompose.js.map +0 -1
- package/out/adapters/fcc-bdc/adapter.d.ts.map +0 -1
- package/out/adapters/fcc-bdc/adapter.js +0 -144
- package/out/adapters/fcc-bdc/adapter.js.map +0 -1
- package/out/adapters/geonames-postal/adapter.d.ts.map +0 -1
- package/out/adapters/geonames-postal/adapter.js +0 -107
- package/out/adapters/geonames-postal/adapter.js.map +0 -1
- package/out/adapters/gnaf/adapter.d.ts.map +0 -1
- package/out/adapters/gnaf/adapter.js +0 -124
- package/out/adapters/gnaf/adapter.js.map +0 -1
- package/out/adapters/gnaf/assemble.d.ts +0 -65
- package/out/adapters/gnaf/assemble.d.ts.map +0 -1
- package/out/adapters/gnaf/assemble.js +0 -154
- package/out/adapters/gnaf/assemble.js.map +0 -1
- package/out/adapters/state-hi-schools/adapter.d.ts.map +0 -1
- package/out/adapters/state-hi-schools/adapter.js +0 -145
- package/out/adapters/state-hi-schools/adapter.js.map +0 -1
- package/out/adapters/state-hi-schools/workbook.d.ts.map +0 -1
- package/out/adapters/state-hi-schools/workbook.js.map +0 -1
- package/out/adapters/state-ia-contractors/adapter.d.ts.map +0 -1
- package/out/adapters/state-ia-contractors/adapter.js +0 -111
- package/out/adapters/state-ia-contractors/adapter.js.map +0 -1
- package/out/adapters/state-ny-notaries/adapter.d.ts.map +0 -1
- package/out/adapters/state-ny-notaries/adapter.js +0 -119
- package/out/adapters/state-ny-notaries/adapter.js.map +0 -1
- package/out/adapters/state-tx-notaries/adapter.d.ts.map +0 -1
- package/out/adapters/state-tx-notaries/adapter.js +0 -125
- package/out/adapters/state-tx-notaries/adapter.js.map +0 -1
- package/out/adapters/tiger/adapter.d.ts +0 -55
- package/out/adapters/tiger/adapter.d.ts.map +0 -1
- package/out/adapters/tiger/adapter.js +0 -201
- package/out/adapters/tiger/adapter.js.map +0 -1
- package/out/adapters/tiger/street-decompose.d.ts.map +0 -1
- package/out/adapters/tiger/street-decompose.js.map +0 -1
- package/out/adapters/usgov-hrsa-fqhc/adapter.d.ts.map +0 -1
- package/out/adapters/usgov-hrsa-fqhc/adapter.js +0 -132
- package/out/adapters/usgov-hrsa-fqhc/adapter.js.map +0 -1
- package/out/adapters/usgov-imls-pls/adapter.d.ts.map +0 -1
- package/out/adapters/usgov-imls-pls/adapter.js +0 -114
- package/out/adapters/usgov-imls-pls/adapter.js.map +0 -1
- package/out/adapters/usgov-irs-bmf/adapter.d.ts.map +0 -1
- package/out/adapters/usgov-irs-bmf/adapter.js +0 -120
- package/out/adapters/usgov-irs-bmf/adapter.js.map +0 -1
- package/out/adapters/usgov-nad/adapter.d.ts.map +0 -1
- package/out/adapters/usgov-nad/adapter.js +0 -249
- package/out/adapters/usgov-nad/adapter.js.map +0 -1
- package/out/adapters/usgov-nppes/adapter.d.ts.map +0 -1
- package/out/adapters/usgov-nppes/adapter.js +0 -118
- package/out/adapters/usgov-nppes/adapter.js.map +0 -1
- package/out/adapters/usgov-samhsa-treatment-locator/adapter.d.ts.map +0 -1
- package/out/adapters/usgov-samhsa-treatment-locator/adapter.js +0 -154
- package/out/adapters/usgov-samhsa-treatment-locator/adapter.js.map +0 -1
- package/out/adapters/wof-admin-jp/adapter.d.ts.map +0 -1
- package/out/adapters/wof-admin-jp/adapter.js.map +0 -1
- package/out/adapters/wof-admin-json/adapter.d.ts +0 -79
- package/out/adapters/wof-admin-json/adapter.d.ts.map +0 -1
- package/out/adapters/wof-admin-json/adapter.js +0 -197
- package/out/adapters/wof-admin-json/adapter.js.map +0 -1
- package/out/adapters/wof-json-rows.d.ts +0 -62
- package/out/adapters/wof-json-rows.d.ts.map +0 -1
- package/out/adapters/wof-json-rows.js +0 -83
- package/out/adapters/wof-json-rows.js.map +0 -1
- package/out/adapters/wof-postalcode-json/adapter.d.ts +0 -65
- package/out/adapters/wof-postalcode-json/adapter.d.ts.map +0 -1
- package/out/adapters/wof-postalcode-json/adapter.js +0 -151
- package/out/adapters/wof-postalcode-json/adapter.js.map +0 -1
- package/out/codex/us-fips-state.d.ts +0 -41
- package/out/codex/us-fips-state.d.ts.map +0 -1
- package/out/codex/us-fips-state.js +0 -100
- package/out/codex/us-fips-state.js.map +0 -1
- package/out/recipes/bare-country.d.ts +0 -25
- package/out/recipes/bare-country.d.ts.map +0 -1
- package/out/recipes/bare-country.js +0 -88
- package/out/recipes/bare-country.js.map +0 -1
- package/out/recipes/cn-organizational-units.d.ts +0 -36
- package/out/recipes/cn-organizational-units.d.ts.map +0 -1
- package/out/recipes/cn-organizational-units.js +0 -159
- package/out/recipes/cn-organizational-units.js.map +0 -1
- package/out/recipes/cz-pcfirst-preposition.d.ts +0 -22
- package/out/recipes/cz-pcfirst-preposition.d.ts.map +0 -1
- package/out/recipes/cz-pcfirst-preposition.js +0 -101
- package/out/recipes/cz-pcfirst-preposition.js.map +0 -1
- package/out/recipes/fr-admin-split.d.ts +0 -38
- package/out/recipes/fr-admin-split.d.ts.map +0 -1
- package/out/recipes/fr-admin-split.js +0 -192
- package/out/recipes/fr-admin-split.js.map +0 -1
- package/out/recipes/fr-bare-street.d.ts +0 -28
- package/out/recipes/fr-bare-street.d.ts.map +0 -1
- package/out/recipes/fr-bare-street.js +0 -144
- package/out/recipes/fr-bare-street.js.map +0 -1
- package/out/recipes/fr-fragment.d.ts +0 -77
- package/out/recipes/fr-fragment.d.ts.map +0 -1
- package/out/recipes/fr-fragment.js +0 -277
- package/out/recipes/fr-fragment.js.map +0 -1
- package/out/recipes/fr-lieudit.d.ts +0 -32
- package/out/recipes/fr-lieudit.d.ts.map +0 -1
- package/out/recipes/fr-lieudit.js +0 -227
- package/out/recipes/fr-lieudit.js.map +0 -1
- package/out/recipes/fr-order.d.ts +0 -38
- package/out/recipes/fr-order.d.ts.map +0 -1
- package/out/recipes/fr-order.js +0 -198
- package/out/recipes/fr-order.js.map +0 -1
- package/out/recipes/german.d.ts +0 -44
- package/out/recipes/german.d.ts.map +0 -1
- package/out/recipes/german.js +0 -289
- package/out/recipes/german.js.map +0 -1
- package/out/recipes/locale.d.ts +0 -136
- package/out/recipes/locale.d.ts.map +0 -1
- package/out/recipes/locale.js +0 -460
- package/out/recipes/locale.js.map +0 -1
- package/out/recipes/nl-postcode.d.ts +0 -26
- package/out/recipes/nl-postcode.d.ts.map +0 -1
- package/out/recipes/nl-postcode.js +0 -103
- package/out/recipes/nl-postcode.js.map +0 -1
- package/out/recipes/no-fragment.d.ts +0 -43
- package/out/recipes/no-fragment.d.ts.map +0 -1
- package/out/recipes/no-fragment.js +0 -183
- package/out/recipes/no-fragment.js.map +0 -1
- package/out/recipes/no-street-led.d.ts +0 -24
- package/out/recipes/no-street-led.d.ts.map +0 -1
- package/out/recipes/no-street-led.js +0 -114
- package/out/recipes/no-street-led.js.map +0 -1
- package/out/recipes/no-street.d.ts +0 -18
- package/out/recipes/no-street.d.ts.map +0 -1
- package/out/recipes/no-street.js +0 -72
- package/out/recipes/no-street.js.map +0 -1
- package/out/recipes/po-box-cedex.d.ts +0 -38
- package/out/recipes/po-box-cedex.d.ts.map +0 -1
- package/out/recipes/po-box-cedex.js +0 -768
- package/out/recipes/po-box-cedex.js.map +0 -1
- package/out/recipes/po-box.d.ts +0 -17
- package/out/recipes/po-box.d.ts.map +0 -1
- package/out/recipes/po-box.js +0 -101
- package/out/recipes/po-box.js.map +0 -1
- package/out/recipes/reviewed-postcode-tail.d.ts.map +0 -1
- package/out/recipes/reviewed-postcode-tail.js.map +0 -1
- package/out/recipes/si-bare-village.d.ts +0 -32
- package/out/recipes/si-bare-village.d.ts.map +0 -1
- package/out/recipes/si-bare-village.js +0 -89
- package/out/recipes/si-bare-village.js.map +0 -1
- package/out/recipes/street-affix.d.ts +0 -89
- package/out/recipes/street-affix.d.ts.map +0 -1
- package/out/recipes/street-affix.js +0 -563
- package/out/recipes/street-affix.js.map +0 -1
- package/out/recipes/street-bare.d.ts +0 -25
- package/out/recipes/street-bare.d.ts.map +0 -1
- package/out/recipes/street-bare.js +0 -87
- package/out/recipes/street-bare.js.map +0 -1
- package/out/recipes/sub-venue-sources.d.ts +0 -229
- package/out/recipes/sub-venue-sources.d.ts.map +0 -1
- package/out/recipes/sub-venue-sources.js +0 -654
- package/out/recipes/sub-venue-sources.js.map +0 -1
- package/out/recipes/sub-venue.d.ts +0 -269
- package/out/recipes/sub-venue.d.ts.map +0 -1
- package/out/recipes/sub-venue.js +0 -726
- package/out/recipes/sub-venue.js.map +0 -1
- package/out/synthesizers/german.d.ts +0 -115
- package/out/synthesizers/german.d.ts.map +0 -1
- package/out/synthesizers/german.js +0 -149
- package/out/synthesizers/german.js.map +0 -1
- package/out/tools/fetch/acra-sg.d.ts +0 -23
- package/out/tools/fetch/acra-sg.d.ts.map +0 -1
- package/out/tools/fetch/acra-sg.js +0 -126
- package/out/tools/fetch/acra-sg.js.map +0 -1
- package/out/tools/fetch/ban.d.ts +0 -31
- package/out/tools/fetch/ban.d.ts.map +0 -1
- package/out/tools/fetch/ban.js +0 -239
- package/out/tools/fetch/ban.js.map +0 -1
- package/out/tools/fetch/download.d.ts +0 -182
- package/out/tools/fetch/download.d.ts.map +0 -1
- package/out/tools/fetch/download.js +0 -318
- package/out/tools/fetch/download.js.map +0 -1
- package/out/tools/fetch/gcis-tw.d.ts +0 -23
- package/out/tools/fetch/gcis-tw.d.ts.map +0 -1
- package/out/tools/fetch/gcis-tw.js +0 -135
- package/out/tools/fetch/gcis-tw.js.map +0 -1
- package/out/tools/fetch/geonames-dump.d.ts +0 -91
- package/out/tools/fetch/geonames-dump.d.ts.map +0 -1
- package/out/tools/fetch/geonames-dump.js +0 -171
- package/out/tools/fetch/geonames-dump.js.map +0 -1
- package/out/tools/fetch/geonames-postal.d.ts +0 -76
- package/out/tools/fetch/geonames-postal.d.ts.map +0 -1
- package/out/tools/fetch/geonames-postal.js +0 -126
- package/out/tools/fetch/geonames-postal.js.map +0 -1
- package/out/tools/fetch/houjin-jp.d.ts +0 -24
- package/out/tools/fetch/houjin-jp.d.ts.map +0 -1
- package/out/tools/fetch/houjin-jp.js +0 -102
- package/out/tools/fetch/houjin-jp.js.map +0 -1
- package/out/tools/fetch/hrsa.d.ts +0 -18
- package/out/tools/fetch/hrsa.d.ts.map +0 -1
- package/out/tools/fetch/hrsa.js +0 -46
- package/out/tools/fetch/hrsa.js.map +0 -1
- package/out/tools/fetch/imls-pls.d.ts +0 -25
- package/out/tools/fetch/imls-pls.d.ts.map +0 -1
- package/out/tools/fetch/imls-pls.js +0 -108
- package/out/tools/fetch/imls-pls.js.map +0 -1
- package/out/tools/fetch/juso-kr.d.ts +0 -30
- package/out/tools/fetch/juso-kr.d.ts.map +0 -1
- package/out/tools/fetch/juso-kr.js +0 -120
- package/out/tools/fetch/juso-kr.js.map +0 -1
- package/out/tools/fetch/localdata-kr.d.ts +0 -30
- package/out/tools/fetch/localdata-kr.d.ts.map +0 -1
- package/out/tools/fetch/localdata-kr.js +0 -139
- package/out/tools/fetch/localdata-kr.js.map +0 -1
- package/out/tools/fetch/nad.d.ts +0 -70
- package/out/tools/fetch/nad.d.ts.map +0 -1
- package/out/tools/fetch/nad.js +0 -234
- package/out/tools/fetch/nad.js.map +0 -1
- package/out/tools/fetch/nppes.d.ts +0 -26
- package/out/tools/fetch/nppes.d.ts.map +0 -1
- package/out/tools/fetch/nppes.js +0 -126
- package/out/tools/fetch/nppes.js.map +0 -1
- package/out/tools/fetch/state-hi-schools.d.ts +0 -26
- package/out/tools/fetch/state-hi-schools.d.ts.map +0 -1
- package/out/tools/fetch/state-hi-schools.js +0 -112
- package/out/tools/fetch/state-hi-schools.js.map +0 -1
- package/out/tools/fetch/state-sources.d.ts +0 -26
- package/out/tools/fetch/state-sources.d.ts.map +0 -1
- package/out/tools/fetch/state-sources.js +0 -111
- package/out/tools/fetch/state-sources.js.map +0 -1
- package/out/tools/fetch/tiger-full.d.ts +0 -22
- package/out/tools/fetch/tiger-full.d.ts.map +0 -1
- package/out/tools/fetch/tiger-full.js +0 -217
- package/out/tools/fetch/tiger-full.js.map +0 -1
- package/out/tools/golden-expand.d.ts +0 -90
- package/out/tools/golden-expand.d.ts.map +0 -1
- package/out/tools/golden-expand.js +0 -406
- package/out/tools/golden-expand.js.map +0 -1
- package/out/tools/golden-promote.d.ts +0 -72
- package/out/tools/golden-promote.d.ts.map +0 -1
- package/out/tools/golden-promote.js +0 -240
- package/out/tools/golden-promote.js.map +0 -1
- package/out/tools/golden-relabel-street.d.ts +0 -196
- package/out/tools/golden-relabel-street.d.ts.map +0 -1
- package/out/tools/golden-relabel-street.js +0 -439
- package/out/tools/golden-relabel-street.js.map +0 -1
- package/out/tools/lint-slice-vocab.d.ts +0 -90
- package/out/tools/lint-slice-vocab.d.ts.map +0 -1
- package/out/tools/lint-slice-vocab.js +0 -267
- package/out/tools/lint-slice-vocab.js.map +0 -1
- package/out/tools/lint-slice.d.ts +0 -93
- package/out/tools/lint-slice.d.ts.map +0 -1
- package/out/tools/lint-slice.js +0 -322
- package/out/tools/lint-slice.js.map +0 -1
- package/out/tools/slice-kryptonite.d.ts +0 -32
- package/out/tools/slice-kryptonite.d.ts.map +0 -1
- package/out/tools/slice-kryptonite.js +0 -99
- package/out/tools/slice-kryptonite.js.map +0 -1
- package/out/tools/slice-translit.d.ts +0 -51
- package/out/tools/slice-translit.d.ts.map +0 -1
- package/out/tools/slice-translit.js +0 -166
- package/out/tools/slice-translit.js.map +0 -1
- package/out/tools/sub-venue/harvest.d.ts +0 -100
- package/out/tools/sub-venue/harvest.d.ts.map +0 -1
- package/out/tools/sub-venue/harvest.js +0 -168
- package/out/tools/sub-venue/harvest.js.map +0 -1
- package/out/tools/sub-venue/head-nouns.d.ts +0 -50
- package/out/tools/sub-venue/head-nouns.d.ts.map +0 -1
- package/out/tools/sub-venue/head-nouns.js.map +0 -1
- package/out/tools/sub-venue/surfaces.d.ts +0 -45
- package/out/tools/sub-venue/surfaces.d.ts.map +0 -1
- package/out/tools/sub-venue/surfaces.js.map +0 -1
- package/out/tools/sub-venue/table.d.ts +0 -229
- package/out/tools/sub-venue/table.d.ts.map +0 -1
- package/out/tools/sub-venue/table.js.map +0 -1
- package/out/tools/sub-venue/wikidata.d.ts +0 -26
- package/out/tools/sub-venue/wikidata.d.ts.map +0 -1
- package/out/tools/sub-venue/wikidata.js +0 -62
- package/out/tools/sub-venue/wikidata.js.map +0 -1
- package/out/tools/sub-venue-lexicon.d.ts +0 -156
- package/out/tools/sub-venue-lexicon.d.ts.map +0 -1
- package/out/tools/sub-venue-lexicon.js +0 -283
- package/out/tools/sub-venue-lexicon.js.map +0 -1
- package/out/tools/sub-venue-promotions.d.ts +0 -94
- package/out/tools/sub-venue-promotions.d.ts.map +0 -1
- package/out/tools/sub-venue-promotions.js +0 -266
- package/out/tools/sub-venue-promotions.js.map +0 -1
- /package/lib/{recipes/cn-organizational-units.ts → cn/recipes/organizational-units.ts} +0 -0
- /package/lib/{recipes/cz-pcfirst-preposition.ts → cz/recipes/pcfirst-preposition.ts} +0 -0
- /package/lib/{adapters → fr/adapters}/ban/street-decompose.ts +0 -0
- /package/lib/{adapters/wof-admin-jp → jp/adapters/wof-admin}/adapter.ts +0 -0
- /package/lib/{recipes/nl-postcode.ts → nl/recipes/postcode.ts} +0 -0
- /package/lib/{recipes/no-fragment.ts → no/recipes/fragment.ts} +0 -0
- /package/lib/{recipes/no-street.ts → no/recipes/street/index.ts} +0 -0
- /package/lib/{recipes/no-street-led.ts → no/recipes/street/led.ts} +0 -0
- /package/lib/recipes/{bare-country.ts → bare/country.ts} +0 -0
- /package/lib/recipes/{street-bare.ts → street/bare.ts} +0 -0
- /package/lib/{recipes/si-bare-village.ts → si/recipes/bare-village.ts} +0 -0
- /package/lib/tools/{golden-expand.ts → golden/expand.ts} +0 -0
- /package/lib/tools/{lint-slice.ts → lint/slice/index.ts} +0 -0
- /package/lib/tools/{slice-kryptonite.ts → slice/kryptonite.ts} +0 -0
- /package/lib/tools/{slice-translit.ts → slice/translit.ts} +0 -0
- /package/lib/tools/{sub-venue-promotions.ts → sub/venue/promotions.ts} +0 -0
- /package/lib/{adapters/state-hi-schools → us/adapters/state/hi-schools}/workbook.ts +0 -0
- /package/lib/{adapters → us/adapters}/tiger/street-decompose.ts +0 -0
- /package/lib/{codex/us-fips-state.ts → us/fips-state.ts} +0 -0
- /package/lib/{recipes → ve/recipes}/reviewed-postcode-tail.ts +0 -0
- /package/out/adapters/{geonames-postal → geonames/postal}/adapter.d.ts +0 -0
- /package/out/{adapters → au/adapters}/gnaf/adapter.d.ts +0 -0
- /package/out/{adapters → fr/adapters}/ban/adapter.d.ts +0 -0
- /package/out/{adapters → fr/adapters}/ban/street-decompose.d.ts +0 -0
- /package/out/{adapters → fr/adapters}/ban/street-decompose.js +0 -0
- /package/out/{adapters/wof-admin-jp → jp/adapters/wof-admin}/adapter.d.ts +0 -0
- /package/out/{adapters/wof-admin-jp → jp/adapters/wof-admin}/adapter.js +0 -0
- /package/out/tools/{sub-venue → sub/venue}/head-nouns.js +0 -0
- /package/out/tools/{sub-venue → sub/venue}/surfaces.js +0 -0
- /package/out/tools/{sub-venue → sub/venue}/table.js +0 -0
- /package/out/{adapters → us/adapters}/fcc-bdc/adapter.d.ts +0 -0
- /package/out/{adapters/state-hi-schools → us/adapters/state/hi-schools}/adapter.d.ts +0 -0
- /package/out/{adapters/state-hi-schools → us/adapters/state/hi-schools}/workbook.d.ts +0 -0
- /package/out/{adapters/state-hi-schools → us/adapters/state/hi-schools}/workbook.js +0 -0
- /package/out/{adapters/state-ia-contractors → us/adapters/state/ia-contractors}/adapter.d.ts +0 -0
- /package/out/{adapters/state-ny-notaries → us/adapters/state/ny-notaries}/adapter.d.ts +0 -0
- /package/out/{adapters/state-tx-notaries → us/adapters/state/tx-notaries}/adapter.d.ts +0 -0
- /package/out/{adapters → us/adapters}/tiger/street-decompose.d.ts +0 -0
- /package/out/{adapters → us/adapters}/tiger/street-decompose.js +0 -0
- /package/out/{adapters/usgov-hrsa-fqhc → us/adapters/usgov/hrsa-fqhc}/adapter.d.ts +0 -0
- /package/out/{adapters/usgov-imls-pls → us/adapters/usgov/imls-pls}/adapter.d.ts +0 -0
- /package/out/{adapters/usgov-irs-bmf → us/adapters/usgov/irs-bmf}/adapter.d.ts +0 -0
- /package/out/{adapters/usgov-nad → us/adapters/usgov/nad}/adapter.d.ts +0 -0
- /package/out/{adapters/usgov-nppes → us/adapters/usgov/nppes}/adapter.d.ts +0 -0
- /package/out/{adapters/usgov-samhsa-treatment-locator → us/adapters/usgov/samhsa-treatment-locator}/adapter.d.ts +0 -0
- /package/out/{recipes → ve/recipes}/reviewed-postcode-tail.d.ts +0 -0
- /package/out/{recipes → ve/recipes}/reviewed-postcode-tail.js +0 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* `sg-register` slice recipe — the forms a person in Singapore types, rendered over the Overture-SG register rows
|
|
7
|
+
* (#2204 §4). The base `overture` source carries the register's own shape, `990 OLD CHOA CHU KANG ROAD, 699814,
|
|
8
|
+
* Singapore`, and the Latin model has no register for the three forms that dominate typed Singapore addresses:
|
|
9
|
+
*
|
|
10
|
+
* - the HDB block line, `Blk 123 Ang Mo Kio Ave 3 #05-67 Singapore 560123` — `Blk` in front of the block number (the
|
|
11
|
+
* register's `number`), a floor-unit `#NN-NN` after the street, the country name as the locality;
|
|
12
|
+
* - the bracketed postcode, `123 Ang Mo Kio Ave 3 S(560123)` — the form the postal service prints;
|
|
13
|
+
* - the building-led line, `National Shooting Centre, 990 Old Choa Chu Kang Road, Singapore 699814` — the register's
|
|
14
|
+
* `unit` field holds the BUILDING or ESTATE name on 91,818 of 142,210 rows, which the adapter refuses as a unit and
|
|
15
|
+
* this recipe renders as a `venue` when it reads as a building rather than an estate.
|
|
16
|
+
*
|
|
17
|
+
* Every value in `components` is a verbatim substring of `raw`, aligned by {@link alignAndWrite}. The floor-unit is
|
|
18
|
+
* SYNTHESIZED (the register carries one on a single row): floor 01–30, unit 01–399, zero-padded — the shape, not a
|
|
19
|
+
* real occupancy. `Blk` and the `S(` `)` around a postcode are untagged, as the board's `sg-cs-blk-12-kallang-ave`
|
|
20
|
+
* row expects (`house_number: "12"`). Streets arrive upper-case and are rendered title-cased; a third abbreviate the
|
|
21
|
+
* generic (`Avenue` → `Ave`, `Road` → `Rd`, …) the way a typed line does.
|
|
22
|
+
*
|
|
23
|
+
* Run: mailwoman corpus slice sg-register --input <overture-sg.corpus.jsonl> --count N --seed S
|
|
24
|
+
*/
|
|
25
|
+
import { type CorpusRecipe } from "#recipes/scaffold";
|
|
26
|
+
/**
|
|
27
|
+
* `OLD CHOA CHU KANG ROAD` → `Old Choa Chu Kang Road`; an already-mixed value is returned as it is. The register writes
|
|
28
|
+
* every street and building name upper-case, the same convention as G-NAF, so the G-NAF title-caser serves both.
|
|
29
|
+
*/
|
|
30
|
+
export declare function titleCaseSGName(name: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Abbreviate the street's generic, wherever it sits (`Ang Mo Kio Avenue 3` → `Ang Mo Kio Ave 3`).
|
|
33
|
+
*/
|
|
34
|
+
export declare function abbreviateSGStreet(street: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Whether the register's `unit` value names a building rather than an estate — the building-led register's lead. A name
|
|
37
|
+
* carrying a digit, a parenthesized abbreviation (`DIABETES & METABOLISM CENTRE (DMC)`) or one word only is not one.
|
|
38
|
+
*/
|
|
39
|
+
export declare function isBuildingName(unit: string): boolean;
|
|
40
|
+
interface SGRow {
|
|
41
|
+
street: string;
|
|
42
|
+
number: string;
|
|
43
|
+
unit: string;
|
|
44
|
+
postcode: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The four typed forms this recipe renders.
|
|
48
|
+
*/
|
|
49
|
+
export type SGRegister = "official" | "block" | "bracket_postcode" | "building_led";
|
|
50
|
+
/**
|
|
51
|
+
* One rendered register: the raw line plus the components it carries, every value a substring of the line.
|
|
52
|
+
*/
|
|
53
|
+
export interface SGRegisterRendering {
|
|
54
|
+
raw: string;
|
|
55
|
+
components: Record<string, string>;
|
|
56
|
+
register: SGRegister;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Render one register form for one register row. Pure: every random draw comes through `random`. A `register` names the
|
|
60
|
+
* form to render instead of drawing one, for a board that wants a balanced spread; `building_led` still needs a
|
|
61
|
+
* building-shaped `unit` and falls back to `official` without one.
|
|
62
|
+
*/
|
|
63
|
+
export declare function renderSGRegister(row: SGRow, random: () => number, register?: SGRegister): SGRegisterRendering;
|
|
64
|
+
/**
|
|
65
|
+
* Slice recipe registered with the corpus builder — see the file header for the registers and why each is here.
|
|
66
|
+
*/
|
|
67
|
+
export declare const sgRegisterRecipe: CorpusRecipe;
|
|
68
|
+
export {};
|
|
69
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../lib/sg/recipes/register.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,EAAiB,KAAK,YAAY,EAA6B,MAAM,mBAAmB,CAAA;AAmD/F;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMpD;AAED,UAAU,KAAK;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,kBAAkB,GAAG,cAAc,CAAA;AAEnF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,QAAQ,EAAE,UAAU,CAAA;CACpB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,EAAE,QAAQ,CAAC,EAAE,UAAU,GAAG,mBAAmB,CA2C7G;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,YAmF9B,CAAA"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* `sg-register` slice recipe — the forms a person in Singapore types, rendered over the Overture-SG register rows
|
|
7
|
+
* (#2204 §4). The base `overture` source carries the register's own shape, `990 OLD CHOA CHU KANG ROAD, 699814,
|
|
8
|
+
* Singapore`, and the Latin model has no register for the three forms that dominate typed Singapore addresses:
|
|
9
|
+
*
|
|
10
|
+
* - the HDB block line, `Blk 123 Ang Mo Kio Ave 3 #05-67 Singapore 560123` — `Blk` in front of the block number (the
|
|
11
|
+
* register's `number`), a floor-unit `#NN-NN` after the street, the country name as the locality;
|
|
12
|
+
* - the bracketed postcode, `123 Ang Mo Kio Ave 3 S(560123)` — the form the postal service prints;
|
|
13
|
+
* - the building-led line, `National Shooting Centre, 990 Old Choa Chu Kang Road, Singapore 699814` — the register's
|
|
14
|
+
* `unit` field holds the BUILDING or ESTATE name on 91,818 of 142,210 rows, which the adapter refuses as a unit and
|
|
15
|
+
* this recipe renders as a `venue` when it reads as a building rather than an estate.
|
|
16
|
+
*
|
|
17
|
+
* Every value in `components` is a verbatim substring of `raw`, aligned by {@link alignAndWrite}. The floor-unit is
|
|
18
|
+
* SYNTHESIZED (the register carries one on a single row): floor 01–30, unit 01–399, zero-padded — the shape, not a
|
|
19
|
+
* real occupancy. `Blk` and the `S(` `)` around a postcode are untagged, as the board's `sg-cs-blk-12-kallang-ave`
|
|
20
|
+
* row expects (`house_number: "12"`). Streets arrive upper-case and are rendered title-cased; a third abbreviate the
|
|
21
|
+
* generic (`Avenue` → `Ave`, `Road` → `Rd`, …) the way a typed line does.
|
|
22
|
+
*
|
|
23
|
+
* Run: mailwoman corpus slice sg-register --input <overture-sg.corpus.jsonl> --count N --seed S
|
|
24
|
+
*/
|
|
25
|
+
import { mulberry32 as makeMulberry32 } from "@mailwoman/core/utils";
|
|
26
|
+
import { titlecase } from "#au/adapters/gnaf/assemble";
|
|
27
|
+
import { alignAndWrite, readTuples, sliceSourceID } from "#recipes/scaffold";
|
|
28
|
+
const SOURCE = "synth-sg-register";
|
|
29
|
+
/**
|
|
30
|
+
* The register's generics and the abbreviation a typed line uses for each.
|
|
31
|
+
*/
|
|
32
|
+
const GENERIC_ABBREVIATIONS = [
|
|
33
|
+
["Avenue", "Ave"],
|
|
34
|
+
["Road", "Rd"],
|
|
35
|
+
["Street", "St"],
|
|
36
|
+
["Drive", "Dr"],
|
|
37
|
+
["Crescent", "Cres"],
|
|
38
|
+
["Lane", "Ln"],
|
|
39
|
+
["Boulevard", "Blvd"],
|
|
40
|
+
["Terrace", "Ter"],
|
|
41
|
+
["Place", "Pl"],
|
|
42
|
+
["Close", "Cl"],
|
|
43
|
+
["Walk", "Wk"],
|
|
44
|
+
];
|
|
45
|
+
/**
|
|
46
|
+
* Estate and area names the register's `unit` field carries beside building names. A name ending in one of these is an
|
|
47
|
+
* estate, which no one writes in front of an address line; a name without one reads as a building and is rendered as a
|
|
48
|
+
* `venue`.
|
|
49
|
+
*/
|
|
50
|
+
const ESTATE_TAILS = ["ESTATE", "CONSERVATION AREA", "HILLS", "PARK", "GARDENS", "GARDEN", "HEIGHTS", "GROVE", "VILLE"];
|
|
51
|
+
/**
|
|
52
|
+
* Share of rows per register. The block line and the bracketed postcode are the two the Latin model has never seen; the
|
|
53
|
+
* official line keeps the register's own shape in the mix so the block forms train beside it.
|
|
54
|
+
*/
|
|
55
|
+
const P_BLOCK = 0.4;
|
|
56
|
+
const P_BRACKET_POSTCODE = 0.25;
|
|
57
|
+
const P_BUILDING_LED = 0.15;
|
|
58
|
+
const P_ABBREVIATE = 0.35;
|
|
59
|
+
const P_UPPER = 0.1;
|
|
60
|
+
const FLOOR_MAX = 30;
|
|
61
|
+
const UNIT_MAX = 399;
|
|
62
|
+
/**
|
|
63
|
+
* The draw value that lands each register in the branch order below, for a caller that names the form.
|
|
64
|
+
*/
|
|
65
|
+
const REGISTER_DRAW = {
|
|
66
|
+
block: 0,
|
|
67
|
+
bracket_postcode: P_BLOCK,
|
|
68
|
+
building_led: P_BLOCK + P_BRACKET_POSTCODE,
|
|
69
|
+
official: 1,
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* `OLD CHOA CHU KANG ROAD` → `Old Choa Chu Kang Road`; an already-mixed value is returned as it is. The register writes
|
|
73
|
+
* every street and building name upper-case, the same convention as G-NAF, so the G-NAF title-caser serves both.
|
|
74
|
+
*/
|
|
75
|
+
export function titleCaseSGName(name) {
|
|
76
|
+
return name === name.toUpperCase() ? titlecase(name) : name;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Abbreviate the street's generic, wherever it sits (`Ang Mo Kio Avenue 3` → `Ang Mo Kio Ave 3`).
|
|
80
|
+
*/
|
|
81
|
+
export function abbreviateSGStreet(street) {
|
|
82
|
+
for (const [full, short] of GENERIC_ABBREVIATIONS) {
|
|
83
|
+
const pattern = new RegExp(`\\b${full}\\b`, "u");
|
|
84
|
+
if (pattern.test(street))
|
|
85
|
+
return street.replace(pattern, short);
|
|
86
|
+
}
|
|
87
|
+
return street;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Whether the register's `unit` value names a building rather than an estate — the building-led register's lead. A name
|
|
91
|
+
* carrying a digit, a parenthesized abbreviation (`DIABETES & METABOLISM CENTRE (DMC)`) or one word only is not one.
|
|
92
|
+
*/
|
|
93
|
+
export function isBuildingName(unit) {
|
|
94
|
+
const value = unit.trim().toUpperCase();
|
|
95
|
+
if (!value || value === "NIL" || /[\d()]/u.test(value) || !/\s/u.test(value))
|
|
96
|
+
return false;
|
|
97
|
+
return !ESTATE_TAILS.some((tail) => value.endsWith(tail));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Render one register form for one register row. Pure: every random draw comes through `random`. A `register` names the
|
|
101
|
+
* form to render instead of drawing one, for a board that wants a balanced spread; `building_led` still needs a
|
|
102
|
+
* building-shaped `unit` and falls back to `official` without one.
|
|
103
|
+
*/
|
|
104
|
+
export function renderSGRegister(row, random, register) {
|
|
105
|
+
const street0 = titleCaseSGName(row.street);
|
|
106
|
+
const street = random() < P_ABBREVIATE ? abbreviateSGStreet(street0) : street0;
|
|
107
|
+
const drawn = random();
|
|
108
|
+
const building = isBuildingName(row.unit) ? titleCaseSGName(row.unit) : null;
|
|
109
|
+
const draw = register === undefined ? drawn : REGISTER_DRAW[register];
|
|
110
|
+
let raw;
|
|
111
|
+
let rendered;
|
|
112
|
+
const components = { house_number: row.number, street, postcode: row.postcode };
|
|
113
|
+
if (draw < P_BLOCK && /^\d+[A-Z]?$/u.test(row.number)) {
|
|
114
|
+
const floor = String(1 + Math.floor(random() * FLOOR_MAX)).padStart(2, "0");
|
|
115
|
+
const unitNo = String(1 + Math.floor(random() * UNIT_MAX)).padStart(2, "0");
|
|
116
|
+
const unit = `#${floor}-${unitNo}`;
|
|
117
|
+
raw = `Blk ${row.number} ${street} ${unit} Singapore ${row.postcode}`;
|
|
118
|
+
components.unit = unit;
|
|
119
|
+
components.locality = "Singapore";
|
|
120
|
+
rendered = "block";
|
|
121
|
+
}
|
|
122
|
+
else if (draw < P_BLOCK + P_BRACKET_POSTCODE) {
|
|
123
|
+
raw = `${row.number} ${street} S(${row.postcode})`;
|
|
124
|
+
rendered = "bracket_postcode";
|
|
125
|
+
}
|
|
126
|
+
else if (draw < P_BLOCK + P_BRACKET_POSTCODE + P_BUILDING_LED && building) {
|
|
127
|
+
raw = `${building}, ${row.number} ${street}, Singapore ${row.postcode}`;
|
|
128
|
+
components.venue = building;
|
|
129
|
+
components.locality = "Singapore";
|
|
130
|
+
rendered = "building_led";
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
raw = `${row.number} ${street} Singapore ${row.postcode}`;
|
|
134
|
+
components.locality = "Singapore";
|
|
135
|
+
rendered = "official";
|
|
136
|
+
}
|
|
137
|
+
if (random() < P_UPPER) {
|
|
138
|
+
raw = raw.toUpperCase();
|
|
139
|
+
for (const key of Object.keys(components)) {
|
|
140
|
+
components[key] = components[key].toUpperCase();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return { raw, components, register: rendered };
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Slice recipe registered with the corpus builder — see the file header for the registers and why each is here.
|
|
147
|
+
*/
|
|
148
|
+
export const sgRegisterRecipe = {
|
|
149
|
+
name: "sg-register",
|
|
150
|
+
description: "Singapore typed registers over the Overture-SG rows: the HDB block line with a #NN-NN unit, the S(NNNNNN) postcode, the building-led line",
|
|
151
|
+
mode: "tuples",
|
|
152
|
+
options: [
|
|
153
|
+
{ flag: "--count", description: "Rows to emit (default: every input row once)" },
|
|
154
|
+
{ flag: "--input", description: "The Overture-SG corpus JSONL ({ street, number, unit, postcode, locality })" },
|
|
155
|
+
],
|
|
156
|
+
async run(opts, write) {
|
|
157
|
+
if (!opts.input) {
|
|
158
|
+
throw new Error("sg-register: --input <overture-sg.corpus.jsonl> is required");
|
|
159
|
+
}
|
|
160
|
+
const random = makeMulberry32(opts.seed);
|
|
161
|
+
const source = opts.sourceName ?? SOURCE;
|
|
162
|
+
const registers = {};
|
|
163
|
+
let read = 0;
|
|
164
|
+
let emitted = 0;
|
|
165
|
+
let skipped = 0;
|
|
166
|
+
let quarantined = 0;
|
|
167
|
+
for await (const tuple of readTuples(opts.input)) {
|
|
168
|
+
read++;
|
|
169
|
+
if (opts.count !== undefined && emitted >= opts.count)
|
|
170
|
+
break;
|
|
171
|
+
const street = typeof tuple["street"] === "string" ? tuple["street"].trim() : "";
|
|
172
|
+
const number = typeof tuple["number"] === "string" ? tuple["number"].trim() : "";
|
|
173
|
+
const postcode = typeof tuple["postcode"] === "string" ? tuple["postcode"].trim() : "";
|
|
174
|
+
const unit = typeof tuple["unit"] === "string" ? tuple["unit"].trim() : "";
|
|
175
|
+
if (!street || !/^\d+[A-Z]?$/u.test(number) || !/^\d{6}$/u.test(postcode)) {
|
|
176
|
+
skipped++;
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
const rendering = renderSGRegister({ street, number, unit, postcode }, random);
|
|
180
|
+
if (opts.golden) {
|
|
181
|
+
const golden = { raw: rendering.raw, components: rendering.components, country: "SG", locale: "en-SG" };
|
|
182
|
+
write(JSON.stringify(golden) + "\n");
|
|
183
|
+
emitted++;
|
|
184
|
+
registers[rendering.register] = (registers[rendering.register] ?? 0) + 1;
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
const ok = alignAndWrite(write, {
|
|
188
|
+
raw: rendering.raw,
|
|
189
|
+
components: rendering.components,
|
|
190
|
+
country: "SG",
|
|
191
|
+
locale: "en-SG",
|
|
192
|
+
source,
|
|
193
|
+
source_id: sliceSourceID(source, { raw: rendering.raw }),
|
|
194
|
+
corpus_version: "0.1.0",
|
|
195
|
+
license: "CDLA-Permissive-2.0 — Overture Maps addresses over the Singapore Open Data Licence 1.0 (OneMap / Singapore Land Authority)",
|
|
196
|
+
}, `sg-register:${rendering.register}`);
|
|
197
|
+
if (ok) {
|
|
198
|
+
emitted++;
|
|
199
|
+
registers[rendering.register] = (registers[rendering.register] ?? 0) + 1;
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
quarantined++;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
console.error(` sg-register: ${emitted} emitted (${Object.entries(registers)
|
|
206
|
+
.map(([k, v]) => `${k} ${v}`)
|
|
207
|
+
.join(", ")}), ${skipped} skipped, ${quarantined} quarantined of ${read} read`);
|
|
208
|
+
return { read, emitted, skipped };
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../lib/sg/recipes/register.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* Fetch Singapore's ACRA corporate-entity register from data.gov.sg: 27 monthly CSVs (one per first
|
|
7
|
+
* letter of the entity name plus "others"), 53 columns, the registered address FIELDED — `Block`,
|
|
8
|
+
* `Street Name`, `Level No`, `Unit No`, `Building Name`, `Postal Code` — which is the NPPES shape,
|
|
9
|
+
* so the corpus adapter renders the string and the spans fall out by construction. A Singapore
|
|
10
|
+
* postcode names one building, so the postcode column is also the join to the OneMap/Overture rows.
|
|
11
|
+
*
|
|
12
|
+
* License: Singapore Open Data Licence version 1.0 (attribution; commercial use, modification and
|
|
13
|
+
* adaptation permitted; no share-alike). The prescribed attribution sentence goes in the manifest.
|
|
14
|
+
*
|
|
15
|
+
* data.gov.sg serves a dataset in two calls: `initiate-download` prepares a signed URL and
|
|
16
|
+
* `poll-download` answers it once the export is ready.
|
|
17
|
+
*
|
|
18
|
+
* Invoke via `mailwoman corpus fetch acra-sg --out-root <path>`.
|
|
19
|
+
*/
|
|
20
|
+
import type { BaseFetchOptions, FetchSummary } from "#tools/fetch/download/index";
|
|
21
|
+
export type FetchACRASGOptions = BaseFetchOptions;
|
|
22
|
+
export declare function fetchACRASG(options: FetchACRASGOptions, report?: (line: string) => void): Promise<FetchSummary>;
|
|
23
|
+
//# sourceMappingURL=acra.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acra.d.ts","sourceRoot":"","sources":["../../../../lib/sg/tools/fetch/acra.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,OAAO,KAAK,EACX,gBAAgB,EAChB,YAAY,EAGZ,MAAM,6BAA6B,CAAA;AAepC,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,CAAA;AA4CjD,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAuFrH"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* Fetch Singapore's ACRA corporate-entity register from data.gov.sg: 27 monthly CSVs (one per first
|
|
7
|
+
* letter of the entity name plus "others"), 53 columns, the registered address FIELDED — `Block`,
|
|
8
|
+
* `Street Name`, `Level No`, `Unit No`, `Building Name`, `Postal Code` — which is the NPPES shape,
|
|
9
|
+
* so the corpus adapter renders the string and the spans fall out by construction. A Singapore
|
|
10
|
+
* postcode names one building, so the postcode column is also the join to the OneMap/Overture rows.
|
|
11
|
+
*
|
|
12
|
+
* License: Singapore Open Data Licence version 1.0 (attribution; commercial use, modification and
|
|
13
|
+
* adaptation permitted; no share-alike). The prescribed attribution sentence goes in the manifest.
|
|
14
|
+
*
|
|
15
|
+
* data.gov.sg serves a dataset in two calls: `initiate-download` prepares a signed URL and
|
|
16
|
+
* `poll-download` answers it once the export is ready.
|
|
17
|
+
*
|
|
18
|
+
* Invoke via `mailwoman corpus fetch acra-sg --out-root <path>`.
|
|
19
|
+
*/
|
|
20
|
+
import { BYTES_PER_KIB } from "@mailwoman/core/fs/formatters";
|
|
21
|
+
import { pathExists } from "@mailwoman/core/fs/readers";
|
|
22
|
+
import { makeDirectories } from "@mailwoman/core/fs/writers";
|
|
23
|
+
import { sha256File } from "@mailwoman/core/hash";
|
|
24
|
+
import { sleep } from "@mailwoman/core/utils/sleep";
|
|
25
|
+
import { join } from "path-ts";
|
|
26
|
+
import { loadCollectionFiles, streamBodyToFile, withRetries, writeManifest } from "#tools/fetch/download/index";
|
|
27
|
+
const SLUG = "acra-sg";
|
|
28
|
+
const COLLECTION_URL = "https://api-production.data.gov.sg/v2/public/api/collections/2/metadata";
|
|
29
|
+
const DATASET_API = "https://api-production.data.gov.sg/v2/public/api/datasets";
|
|
30
|
+
const DOWNLOAD_API = "https://api-open.data.gov.sg/v1/public/api/datasets";
|
|
31
|
+
const LICENSE = "Singapore Open Data Licence version 1.0 — https://data.gov.sg/open-data-licence";
|
|
32
|
+
const ATTRIBUTION = "Contains information from ACRA Information on Corporate Entities accessed on <date> from data.gov.sg which is made available under the terms of the Singapore Open Data Licence version 1.0 https://data.gov.sg/open-data-licence";
|
|
33
|
+
const POLL_INTERVAL_MS = 3000;
|
|
34
|
+
const POLL_ATTEMPTS = 40;
|
|
35
|
+
async function readJSON(url) {
|
|
36
|
+
const res = await fetch(url, { headers: { accept: "application/json" } });
|
|
37
|
+
if (!res.ok)
|
|
38
|
+
throw new Error(`acra-sg: ${url} answered HTTP ${res.status}`);
|
|
39
|
+
return (await res.json());
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Ask the portal to prepare the CSV export, then poll until it names the signed URL.
|
|
43
|
+
*/
|
|
44
|
+
async function signedURLFor(datasetID) {
|
|
45
|
+
await readJSON(`${DOWNLOAD_API}/${datasetID}/initiate-download`);
|
|
46
|
+
for (let attempt = 0; attempt < POLL_ATTEMPTS; attempt++) {
|
|
47
|
+
await sleep(POLL_INTERVAL_MS);
|
|
48
|
+
const poll = await readJSON(`${DOWNLOAD_API}/${datasetID}/poll-download`);
|
|
49
|
+
if (poll.data?.status === "DOWNLOAD_SUCCESS" && poll.data.url)
|
|
50
|
+
return poll.data.url;
|
|
51
|
+
}
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
function filenameFor(name, datasetID) {
|
|
55
|
+
const letter = /\('([^']+)'\)/.exec(name)?.[1];
|
|
56
|
+
return `acra-entities-${(letter ?? datasetID).toLowerCase().replaceAll(/[^a-z0-9]+/g, "-")}.csv`;
|
|
57
|
+
}
|
|
58
|
+
export async function fetchACRASG(options, report) {
|
|
59
|
+
const destDir = join(options.outRoot, SLUG);
|
|
60
|
+
await makeDirectories(destDir);
|
|
61
|
+
const manifestPath = join(destDir, "MANIFEST.json");
|
|
62
|
+
const collection = await readJSON(COLLECTION_URL);
|
|
63
|
+
const datasetIDs = collection.data?.collectionMetadata?.childDatasets ?? [];
|
|
64
|
+
report?.(`=== ${SLUG}: ${datasetIDs.length} datasets in collection 2`);
|
|
65
|
+
const previous = await loadCollectionFiles(manifestPath);
|
|
66
|
+
const files = new Map();
|
|
67
|
+
let fetched = 0;
|
|
68
|
+
let skipped = 0;
|
|
69
|
+
const failedCodes = [];
|
|
70
|
+
for (const datasetID of datasetIDs) {
|
|
71
|
+
const metadata = await readJSON(`${DATASET_API}/${datasetID}/metadata`);
|
|
72
|
+
const name = metadata.data?.name ?? datasetID;
|
|
73
|
+
const filename = filenameFor(name, datasetID);
|
|
74
|
+
const dest = join(destDir, filename);
|
|
75
|
+
const before = previous.get(filename);
|
|
76
|
+
if (before && (await pathExists(dest))) {
|
|
77
|
+
files.set(filename, before);
|
|
78
|
+
skipped++;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
report?.(`--- ${name} (${datasetID})`);
|
|
82
|
+
let bytes;
|
|
83
|
+
try {
|
|
84
|
+
bytes = await withRetries(async () => {
|
|
85
|
+
const url = await signedURLFor(datasetID);
|
|
86
|
+
if (!url)
|
|
87
|
+
throw new Error(`the export never reached DOWNLOAD_SUCCESS for ${datasetID}`);
|
|
88
|
+
const res = await fetch(url, { signal: AbortSignal.timeout(1_800_000) });
|
|
89
|
+
if (!res.ok)
|
|
90
|
+
throw new Error(`HTTP ${res.status} on the signed URL for ${datasetID}`);
|
|
91
|
+
return streamBodyToFile(res, dest);
|
|
92
|
+
}, { report, label: name });
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
report?.(` ✗ ${error.message}`);
|
|
96
|
+
failedCodes.push(datasetID);
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (bytes < BYTES_PER_KIB) {
|
|
100
|
+
report?.(` ✗ ${bytes} bytes — an error page, not the register`);
|
|
101
|
+
failedCodes.push(datasetID);
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const sha = await sha256File(dest);
|
|
105
|
+
files.set(filename, {
|
|
106
|
+
source_url: `https://data.gov.sg/datasets/${datasetID}/view`,
|
|
107
|
+
downloaded_at: new Date().toISOString(),
|
|
108
|
+
filename,
|
|
109
|
+
sha256: sha,
|
|
110
|
+
bytes,
|
|
111
|
+
});
|
|
112
|
+
fetched++;
|
|
113
|
+
report?.(` ✓ ${(bytes / 1024 / 1024).toFixed(1)} MB sha256=${sha}`);
|
|
114
|
+
const manifest = {
|
|
115
|
+
source: SLUG,
|
|
116
|
+
source_url: "https://data.gov.sg/collections/2/view",
|
|
117
|
+
license: LICENSE,
|
|
118
|
+
attribution: ATTRIBUTION,
|
|
119
|
+
downloaded_at: new Date().toISOString(),
|
|
120
|
+
files: [...files.values()],
|
|
121
|
+
};
|
|
122
|
+
await writeManifest(manifestPath, manifest);
|
|
123
|
+
}
|
|
124
|
+
return { fetched, skipped, failed: failedCodes.length, failedCodes };
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=acra.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acra.js","sourceRoot":"","sources":["../../../../lib/sg/tools/fetch/acra.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* `si-bare-village` — the Slovenian no-street counter-slice (#901 run-2). Slovenia's rural
|
|
7
|
+
* addressing has NO street line: the village name is the street-level token and repeats as the
|
|
8
|
+
* locality ("Zabiče 8, 6250 Zabiče"). The v1.9.8 check FALSIFIED the fr-bare-street slice alone on
|
|
9
|
+
* exactly this class (SI resolve −3.4pp; "Apače 108" split into street "Apače 10" + house "8") —
|
|
10
|
+
* the bare-street boundary lesson generalizes onto a form where the leading name must keep its
|
|
11
|
+
* number whole and the trailing mention must stay locality-bound. This slice is the paired
|
|
12
|
+
* counter-distribution: same lesson ("name before number, comma, then admin"), opposite polarity
|
|
13
|
+
* on the trailing mention.
|
|
14
|
+
*
|
|
15
|
+
* Three real-order templates cycle per tuple (mirrors the coord-golden orders so the eval and the
|
|
16
|
+
* training distribution agree):
|
|
17
|
+
*
|
|
18
|
+
* 1. canonical "«V» «n», «pc» «V»"
|
|
19
|
+
* 2. bare "«V» «n», «V»" (no postcode — the anchor-free form, the fr-bare lesson)
|
|
20
|
+
* 3. pc-first "«pc» «V», «V» «n»"
|
|
21
|
+
*
|
|
22
|
+
* Gold spans: leading «V» = street (matches OA ground truth — the village IS the address line),
|
|
23
|
+
* «n» = house_number (NEVER split mid-digits), «pc» = postcode (never swallowing the neighbor),
|
|
24
|
+
* trailing «V» = locality (the binding the resolver needs).
|
|
25
|
+
*/
|
|
26
|
+
import { type CorpusRecipe } from "#recipes/scaffold";
|
|
27
|
+
/**
|
|
28
|
+
* Slice recipe registered with the corpus builder — see the file header for the parse behaviour it exists to exercise,
|
|
29
|
+
* and `description` below for the surface form it generates.
|
|
30
|
+
*/
|
|
31
|
+
export declare const siBareVillageRecipe: CorpusRecipe;
|
|
32
|
+
//# sourceMappingURL=bare-village.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bare-village.d.ts","sourceRoot":"","sources":["../../../lib/si/recipes/bare-village.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,EAA6B,KAAK,YAAY,EAAiB,MAAM,mBAAmB,CAAA;AAE/F;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,YAgEjC,CAAA"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* `si-bare-village` — the Slovenian no-street counter-slice (#901 run-2). Slovenia's rural
|
|
7
|
+
* addressing has NO street line: the village name is the street-level token and repeats as the
|
|
8
|
+
* locality ("Zabiče 8, 6250 Zabiče"). The v1.9.8 check FALSIFIED the fr-bare-street slice alone on
|
|
9
|
+
* exactly this class (SI resolve −3.4pp; "Apače 108" split into street "Apače 10" + house "8") —
|
|
10
|
+
* the bare-street boundary lesson generalizes onto a form where the leading name must keep its
|
|
11
|
+
* number whole and the trailing mention must stay locality-bound. This slice is the paired
|
|
12
|
+
* counter-distribution: same lesson ("name before number, comma, then admin"), opposite polarity
|
|
13
|
+
* on the trailing mention.
|
|
14
|
+
*
|
|
15
|
+
* Three real-order templates cycle per tuple (mirrors the coord-golden orders so the eval and the
|
|
16
|
+
* training distribution agree):
|
|
17
|
+
*
|
|
18
|
+
* 1. canonical "«V» «n», «pc» «V»"
|
|
19
|
+
* 2. bare "«V» «n», «V»" (no postcode — the anchor-free form, the fr-bare lesson)
|
|
20
|
+
* 3. pc-first "«pc» «V», «V» «n»"
|
|
21
|
+
*
|
|
22
|
+
* Gold spans: leading «V» = street (matches OA ground truth — the village IS the address line),
|
|
23
|
+
* «n» = house_number (NEVER split mid-digits), «pc» = postcode (never swallowing the neighbor),
|
|
24
|
+
* trailing «V» = locality (the binding the resolver needs).
|
|
25
|
+
*/
|
|
26
|
+
import { mulberry32 as makeMulberry32 } from "@mailwoman/core/utils";
|
|
27
|
+
import { alignAndWrite, readTuples, sliceSourceID } from "#recipes/scaffold";
|
|
28
|
+
/**
|
|
29
|
+
* Slice recipe registered with the corpus builder — see the file header for the parse behaviour it exists to exercise,
|
|
30
|
+
* and `description` below for the surface form it generates.
|
|
31
|
+
*/
|
|
32
|
+
export const siBareVillageRecipe = {
|
|
33
|
+
name: "si-bare-village",
|
|
34
|
+
description: "SI no-street village form (#901 run-2): '«V» «n», «pc» «V»' — the fr-bare-street counter-distribution",
|
|
35
|
+
mode: "tuples",
|
|
36
|
+
async run(opts, write) {
|
|
37
|
+
makeMulberry32(opts.seed);
|
|
38
|
+
let read = 0;
|
|
39
|
+
let emitted = 0;
|
|
40
|
+
let skipped = 0;
|
|
41
|
+
for await (const t of readTuples(opts.input)) {
|
|
42
|
+
read++;
|
|
43
|
+
const village = String(t.locality ?? "").trim();
|
|
44
|
+
const number = String(t.number ?? "").trim();
|
|
45
|
+
const postcode = String(t.postcode ?? "").trim();
|
|
46
|
+
if (!village || !number || !postcode) {
|
|
47
|
+
skipped++;
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
const order = read % 3;
|
|
51
|
+
let raw;
|
|
52
|
+
const components = {
|
|
53
|
+
street: village,
|
|
54
|
+
house_number: number,
|
|
55
|
+
locality: village,
|
|
56
|
+
};
|
|
57
|
+
if (order === 0) {
|
|
58
|
+
components.postcode = postcode;
|
|
59
|
+
raw = `${village} ${number}, ${postcode} ${village}`;
|
|
60
|
+
}
|
|
61
|
+
else if (order === 1) {
|
|
62
|
+
raw = `${village} ${number}, ${village}`;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
components.postcode = postcode;
|
|
66
|
+
raw = `${postcode} ${village}, ${village} ${number}`;
|
|
67
|
+
}
|
|
68
|
+
const source_id = sliceSourceID("synth-si-bare-village", { ...components, o: String(order), v: String(read) });
|
|
69
|
+
const canonical = {
|
|
70
|
+
raw,
|
|
71
|
+
components,
|
|
72
|
+
country: "SI",
|
|
73
|
+
locale: "sl-SI",
|
|
74
|
+
source: "synth-si-bare-village",
|
|
75
|
+
source_id,
|
|
76
|
+
corpus_version: "0.9.9",
|
|
77
|
+
license: "Synthetic — si-bare-village; (village, number, postcode) from OpenAddresses SI (per-source attribution in the model card)",
|
|
78
|
+
};
|
|
79
|
+
if (alignAndWrite(write, canonical, "si-bare-village")) {
|
|
80
|
+
emitted++;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
skipped++;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return { read, emitted, skipped };
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=bare-village.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bare-village.js","sourceRoot":"","sources":["../../../lib/si/recipes/bare-village.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEpE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAqB,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAE/F;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAiB;IAChD,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,uGAAuG;IACpH,IAAI,EAAE,QAAQ;IACd,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK;QACpB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,IAAI,OAAO,GAAG,CAAC,CAAA;QAEf,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAM,CAAC,EAAE,CAAC;YAC/C,IAAI,EAAE,CAAA;YACN,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;YAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;YAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;YAEhD,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACtC,OAAO,EAAE,CAAA;gBAET,SAAQ;YACT,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAA;YACtB,IAAI,GAAW,CAAA;YAEf,MAAM,UAAU,GAA2B;gBAC1C,MAAM,EAAE,OAAO;gBACf,YAAY,EAAE,MAAM;gBACpB,QAAQ,EAAE,OAAO;aACjB,CAAA;YAED,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBACjB,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAA;gBAC9B,GAAG,GAAG,GAAG,OAAO,IAAI,MAAM,KAAK,QAAQ,IAAI,OAAO,EAAE,CAAA;YACrD,CAAC;iBAAM,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBACxB,GAAG,GAAG,GAAG,OAAO,IAAI,MAAM,KAAK,OAAO,EAAE,CAAA;YACzC,CAAC;iBAAM,CAAC;gBACP,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAA;gBAC9B,GAAG,GAAG,GAAG,QAAQ,IAAI,OAAO,KAAK,OAAO,IAAI,MAAM,EAAE,CAAA;YACrD,CAAC;YAED,MAAM,SAAS,GAAG,aAAa,CAAC,uBAAuB,EAAE,EAAE,GAAG,UAAU,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAE9G,MAAM,SAAS,GAAG;gBACjB,GAAG;gBACH,UAAU;gBACV,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,uBAAuB;gBAC/B,SAAS;gBACT,cAAc,EAAE,OAAO;gBACvB,OAAO,EACN,2HAA2H;aAC5H,CAAA;YAED,IAAI,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,iBAAiB,CAAC,EAAE,CAAC;gBACxD,OAAO,EAAE,CAAA;YACV,CAAC;iBAAM,CAAC;gBACP,OAAO,EAAE,CAAA;YACV,CAAC;QACF,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;IAClC,CAAC;CACD,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* `pk-register` and `bd-register` slice recipes — the typed forms of Pakistan and Bangladesh the country templates do
|
|
7
|
+
* not render, over the OpenStreetMap corpus JSONL the `osm` adapter reads (#1744, the F8 family). The adapter's own
|
|
8
|
+
* rows carry the template shape (`4 38th Street, DHA Phase 6, Karachi`; `24 Road 104, Dhaka - 1207`); these two carry
|
|
9
|
+
* the register:
|
|
10
|
+
*
|
|
11
|
+
* - the HOUSE line, `House 4, Street 25, F-7/2, Islamabad` and `House 34, Road 4, Sector 9, Uttara, Dhaka 1230` —
|
|
12
|
+
* `House` in front of the number (untagged, the same rule as Singapore's `Blk`), the numbered street, the scheme or
|
|
13
|
+
* sector as the dependent locality, the city;
|
|
14
|
+
* - the PLAIN line with the trailing postcode and no dash, `58 Kalabagan 1st Ln, Dhaka 1205` — what a person types,
|
|
15
|
+
* where the template writes `Dhaka - 1205`.
|
|
16
|
+
*
|
|
17
|
+
* Islamabad's sector codes (`F-7/2`, `G-10/3`) are the one synthesized value: the register carries them on a handful
|
|
18
|
+
* of rows, mostly inside `addr:city` (`F7/2 Islamabad`), so a row whose city is Islamabad and whose scheme is unknown
|
|
19
|
+
* draws one from the capital's grid. Every other value is the row's own. The components are the `osm` adapter's
|
|
20
|
+
* mapping (`componentsForOSMRow`), so the two surfaces cannot disagree about what a field means.
|
|
21
|
+
*
|
|
22
|
+
* ⚠ ODbL: the rows inherit OpenStreetMap's share-alike license, and `--exclude-share-alike` drops them.
|
|
23
|
+
*
|
|
24
|
+
* Run: mailwoman corpus slice pk-register --input <osm-pk.corpus.jsonl> --count N --seed S
|
|
25
|
+
*/
|
|
26
|
+
import { type CorpusRecipe } from "#recipes/scaffold";
|
|
27
|
+
import type { CanonicalRow } from "#types";
|
|
28
|
+
export type SouthAsiaRegister = "house" | "plain";
|
|
29
|
+
export interface SouthAsiaRendering {
|
|
30
|
+
raw: string;
|
|
31
|
+
components: Record<string, string>;
|
|
32
|
+
register: SouthAsiaRegister;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Draw one Islamabad sector code, `F-7/2`.
|
|
36
|
+
*/
|
|
37
|
+
export declare function drawIslamabadSector(random: () => number): string;
|
|
38
|
+
/**
|
|
39
|
+
* Render one register line from the adapter's components. Returns null when the row has no house number or no locality:
|
|
40
|
+
* both registers need the two.
|
|
41
|
+
*/
|
|
42
|
+
export declare function renderSouthAsiaRegister(components: CanonicalRow["components"], random: () => number, register?: SouthAsiaRegister): SouthAsiaRendering | null;
|
|
43
|
+
/**
|
|
44
|
+
* Pakistan: `House 4, Street 25, F-7/2, Islamabad` and `B230 Street 5, Block 3, Karachi`.
|
|
45
|
+
*/
|
|
46
|
+
export declare const pkRegisterRecipe: CorpusRecipe;
|
|
47
|
+
/**
|
|
48
|
+
* Bangladesh: `House 34, Road 4, Sector 9, Uttara, Dhaka 1230` and `58 Kalabagan 1st Ln, Dhaka 1205`.
|
|
49
|
+
*/
|
|
50
|
+
export declare const bdRegisterRecipe: CorpusRecipe;
|
|
51
|
+
//# sourceMappingURL=register.d.ts.map
|