@mailwoman/corpus 8.6.0 → 9.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 +1 -1
- package/out/src/adapter.d.ts +41 -0
- package/out/src/adapter.d.ts.map +1 -1
- package/out/src/adapter.js +46 -1
- package/out/src/adapter.js.map +1 -1
- package/out/src/adapters/ban/adapter.d.ts +4 -3
- package/out/src/adapters/ban/adapter.d.ts.map +1 -1
- package/out/src/adapters/ban/adapter.js +60 -67
- package/out/src/adapters/ban/adapter.js.map +1 -1
- package/out/src/adapters/ban/street-decompose.d.ts.map +1 -1
- package/out/src/adapters/ban/street-decompose.js +18 -25
- package/out/src/adapters/ban/street-decompose.js.map +1 -1
- package/out/src/adapters/fcc-bdc/adapter.d.ts +0 -6
- package/out/src/adapters/fcc-bdc/adapter.d.ts.map +1 -1
- package/out/src/adapters/fcc-bdc/adapter.js +2 -24
- package/out/src/adapters/fcc-bdc/adapter.js.map +1 -1
- package/out/src/adapters/geonames/adapter.d.ts.map +1 -1
- package/out/src/adapters/geonames/adapter.js +70 -76
- package/out/src/adapters/geonames/adapter.js.map +1 -1
- package/out/src/adapters/geonames-postal/adapter.d.ts.map +1 -1
- package/out/src/adapters/geonames-postal/adapter.js +44 -49
- package/out/src/adapters/geonames-postal/adapter.js.map +1 -1
- package/out/src/adapters/gnaf/adapter.d.ts.map +1 -1
- package/out/src/adapters/gnaf/adapter.js +4 -7
- package/out/src/adapters/gnaf/adapter.js.map +1 -1
- package/out/src/adapters/gnaf/assemble.d.ts.map +1 -1
- package/out/src/adapters/gnaf/assemble.js +6 -11
- package/out/src/adapters/gnaf/assemble.js.map +1 -1
- package/out/src/adapters/openaddresses/adapter.d.ts.map +1 -1
- package/out/src/adapters/openaddresses/adapter.js +2 -7
- package/out/src/adapters/openaddresses/adapter.js.map +1 -1
- package/out/src/adapters/overture/adapter.d.ts.map +1 -1
- package/out/src/adapters/overture/adapter.js +3 -7
- package/out/src/adapters/overture/adapter.js.map +1 -1
- package/out/src/adapters/state-hi-schools/adapter.d.ts.map +1 -1
- package/out/src/adapters/state-hi-schools/adapter.js +55 -73
- package/out/src/adapters/state-hi-schools/adapter.js.map +1 -1
- package/out/src/adapters/state-ia-contractors/adapter.d.ts.map +1 -1
- package/out/src/adapters/state-ia-contractors/adapter.js +58 -76
- package/out/src/adapters/state-ia-contractors/adapter.js.map +1 -1
- package/out/src/adapters/state-ny-notaries/adapter.d.ts.map +1 -1
- package/out/src/adapters/state-ny-notaries/adapter.js +67 -85
- package/out/src/adapters/state-ny-notaries/adapter.js.map +1 -1
- package/out/src/adapters/state-tx-notaries/adapter.d.ts.map +1 -1
- package/out/src/adapters/state-tx-notaries/adapter.js +69 -87
- package/out/src/adapters/state-tx-notaries/adapter.js.map +1 -1
- package/out/src/adapters/synth-po-box/adapter.d.ts.map +1 -1
- package/out/src/adapters/synth-po-box/adapter.js +7 -15
- package/out/src/adapters/synth-po-box/adapter.js.map +1 -1
- package/out/src/adapters/tiger/street-decompose.d.ts.map +1 -1
- package/out/src/adapters/tiger/street-decompose.js +18 -27
- package/out/src/adapters/tiger/street-decompose.js.map +1 -1
- package/out/src/adapters/usgov-hrsa-fqhc/adapter.d.ts +3 -3
- package/out/src/adapters/usgov-hrsa-fqhc/adapter.d.ts.map +1 -1
- package/out/src/adapters/usgov-hrsa-fqhc/adapter.js +62 -80
- package/out/src/adapters/usgov-hrsa-fqhc/adapter.js.map +1 -1
- package/out/src/adapters/usgov-imls-pls/adapter.d.ts.map +1 -1
- package/out/src/adapters/usgov-imls-pls/adapter.js +60 -82
- package/out/src/adapters/usgov-imls-pls/adapter.js.map +1 -1
- package/out/src/adapters/usgov-irs-bmf/adapter.d.ts.map +1 -1
- package/out/src/adapters/usgov-irs-bmf/adapter.js +58 -65
- package/out/src/adapters/usgov-irs-bmf/adapter.js.map +1 -1
- package/out/src/adapters/usgov-nad/adapter.d.ts.map +1 -1
- package/out/src/adapters/usgov-nad/adapter.js +5 -8
- package/out/src/adapters/usgov-nad/adapter.js.map +1 -1
- package/out/src/adapters/usgov-nppes/adapter.d.ts.map +1 -1
- package/out/src/adapters/usgov-nppes/adapter.js +58 -76
- package/out/src/adapters/usgov-nppes/adapter.js.map +1 -1
- package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.d.ts.map +1 -1
- package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.js +51 -71
- package/out/src/adapters/usgov-samhsa-treatment-locator/adapter.js.map +1 -1
- package/out/src/adapters/wof-admin-jp/adapter.d.ts.map +1 -1
- package/out/src/adapters/wof-admin-jp/adapter.js +24 -6
- package/out/src/adapters/wof-admin-jp/adapter.js.map +1 -1
- package/out/src/build.d.ts.map +1 -1
- package/out/src/build.js +2 -1
- package/out/src/build.js.map +1 -1
- package/out/src/golden.d.ts +5 -0
- package/out/src/golden.d.ts.map +1 -1
- package/out/src/golden.js +23 -9
- package/out/src/golden.js.map +1 -1
- package/out/src/parquet-wrapper/reader.d.ts +8 -0
- package/out/src/parquet-wrapper/reader.d.ts.map +1 -1
- package/out/src/parquet-wrapper/reader.js +16 -0
- package/out/src/parquet-wrapper/reader.js.map +1 -1
- package/out/src/parquet-wrapper/schema.d.ts +4 -0
- package/out/src/parquet-wrapper/schema.d.ts.map +1 -1
- package/out/src/parquet-wrapper/schema.js.map +1 -1
- package/out/src/parquet.d.ts.map +1 -1
- package/out/src/parquet.js +2 -13
- package/out/src/parquet.js.map +1 -1
- package/out/src/shard-recipes/anchor-absorption.d.ts.map +1 -1
- package/out/src/shard-recipes/anchor-absorption.js +2 -1
- package/out/src/shard-recipes/anchor-absorption.js.map +1 -1
- package/out/src/shard-recipes/country-balanced.d.ts.map +1 -1
- package/out/src/shard-recipes/country-balanced.js +68 -60
- package/out/src/shard-recipes/country-balanced.js.map +1 -1
- package/out/src/shard-recipes/fr-fragment.d.ts.map +1 -1
- package/out/src/shard-recipes/fr-fragment.js +8 -5
- package/out/src/shard-recipes/fr-fragment.js.map +1 -1
- package/out/src/shard-recipes/fr-order.d.ts.map +1 -1
- package/out/src/shard-recipes/fr-order.js +14 -58
- package/out/src/shard-recipes/fr-order.js.map +1 -1
- package/out/src/shard-recipes/german.d.ts.map +1 -1
- package/out/src/shard-recipes/german.js +11 -58
- package/out/src/shard-recipes/german.js.map +1 -1
- package/out/src/shard-recipes/index.d.ts.map +1 -1
- package/out/src/shard-recipes/index.js +2 -0
- package/out/src/shard-recipes/index.js.map +1 -1
- package/out/src/shard-recipes/intersection.d.ts +2 -2
- package/out/src/shard-recipes/intersection.d.ts.map +1 -1
- package/out/src/shard-recipes/intersection.js +24 -62
- package/out/src/shard-recipes/intersection.js.map +1 -1
- package/out/src/shard-recipes/locale.d.ts.map +1 -1
- package/out/src/shard-recipes/locale.js +14 -16
- package/out/src/shard-recipes/locale.js.map +1 -1
- package/out/src/shard-recipes/no-fragment.d.ts.map +1 -1
- package/out/src/shard-recipes/no-fragment.js +8 -5
- package/out/src/shard-recipes/no-fragment.js.map +1 -1
- package/out/src/shard-recipes/no-street-led.d.ts.map +1 -1
- package/out/src/shard-recipes/no-street-led.js +8 -5
- package/out/src/shard-recipes/no-street-led.js.map +1 -1
- package/out/src/shard-recipes/po-box-cedex.d.ts +3 -3
- package/out/src/shard-recipes/po-box-cedex.d.ts.map +1 -1
- package/out/src/shard-recipes/po-box-cedex.js +51 -94
- package/out/src/shard-recipes/po-box-cedex.js.map +1 -1
- package/out/src/shard-recipes/scaffold.d.ts +59 -9
- package/out/src/shard-recipes/scaffold.d.ts.map +1 -1
- package/out/src/shard-recipes/scaffold.js +51 -30
- package/out/src/shard-recipes/scaffold.js.map +1 -1
- package/out/src/shard-recipes/street-affix.d.ts.map +1 -1
- package/out/src/shard-recipes/street-affix.js +56 -82
- package/out/src/shard-recipes/street-affix.js.map +1 -1
- package/out/src/shard-recipes/sub-venue-sources.d.ts +231 -0
- package/out/src/shard-recipes/sub-venue-sources.d.ts.map +1 -0
- package/out/src/shard-recipes/sub-venue-sources.js +669 -0
- package/out/src/shard-recipes/sub-venue-sources.js.map +1 -0
- package/out/src/shard-recipes/sub-venue.d.ts +269 -0
- package/out/src/shard-recipes/sub-venue.d.ts.map +1 -0
- package/out/src/shard-recipes/sub-venue.js +709 -0
- package/out/src/shard-recipes/sub-venue.js.map +1 -0
- package/out/src/shard-recipes/unit.d.ts +1 -1
- package/out/src/shard-recipes/unit.d.ts.map +1 -1
- package/out/src/shard-recipes/unit.js +22 -64
- package/out/src/shard-recipes/unit.js.map +1 -1
- package/out/src/split.d.ts +7 -0
- package/out/src/split.d.ts.map +1 -1
- package/out/src/split.js +7 -0
- package/out/src/split.js.map +1 -1
- package/out/src/synthesize.d.ts.map +1 -1
- package/out/src/synthesize.js +1 -12
- package/out/src/synthesize.js.map +1 -1
- package/out/src/tools/align-shard.d.ts.map +1 -1
- package/out/src/tools/align-shard.js +3 -7
- package/out/src/tools/align-shard.js.map +1 -1
- package/out/src/tools/audit.d.ts.map +1 -1
- package/out/src/tools/audit.js +4 -4
- package/out/src/tools/audit.js.map +1 -1
- package/out/src/tools/corpus-stats.d.ts +2 -2
- package/out/src/tools/corpus-stats.d.ts.map +1 -1
- package/out/src/tools/corpus-stats.js +18 -31
- package/out/src/tools/corpus-stats.js.map +1 -1
- package/out/src/tools/fetch/download.d.ts.map +1 -1
- package/out/src/tools/fetch/download.js +5 -6
- package/out/src/tools/fetch/download.js.map +1 -1
- package/out/src/tools/fetch/imls-pls.d.ts.map +1 -1
- package/out/src/tools/fetch/imls-pls.js +2 -2
- package/out/src/tools/fetch/imls-pls.js.map +1 -1
- package/out/src/tools/fetch/index.d.ts +14 -1
- package/out/src/tools/fetch/index.d.ts.map +1 -1
- package/out/src/tools/fetch/index.js +14 -1
- package/out/src/tools/fetch/index.js.map +1 -1
- package/out/src/tools/fetch/nad.d.ts +1 -1
- package/out/src/tools/fetch/nad.js +1 -1
- package/out/src/tools/fetch/nppes.d.ts.map +1 -1
- package/out/src/tools/fetch/nppes.js +2 -1
- package/out/src/tools/fetch/nppes.js.map +1 -1
- package/out/src/tools/fetch/openaddresses.d.ts +1 -1
- package/out/src/tools/fetch/openaddresses.js +1 -1
- package/out/src/tools/fetch/ourairports.d.ts +45 -0
- package/out/src/tools/fetch/ourairports.d.ts.map +1 -0
- package/out/src/tools/fetch/ourairports.js +123 -0
- package/out/src/tools/fetch/ourairports.js.map +1 -0
- package/out/src/tools/fetch/wikidata-subvenue.d.ts +171 -0
- package/out/src/tools/fetch/wikidata-subvenue.d.ts.map +1 -0
- package/out/src/tools/fetch/wikidata-subvenue.js +275 -0
- package/out/src/tools/fetch/wikidata-subvenue.js.map +1 -0
- package/out/src/tools/golden-expand.d.ts.map +1 -1
- package/out/src/tools/golden-expand.js +18 -16
- package/out/src/tools/golden-expand.js.map +1 -1
- package/out/src/tools/golden-promote.d.ts.map +1 -1
- package/out/src/tools/golden-promote.js +12 -6
- package/out/src/tools/golden-promote.js.map +1 -1
- package/out/src/tools/golden-relabel-street.d.ts +196 -0
- package/out/src/tools/golden-relabel-street.d.ts.map +1 -0
- package/out/src/tools/golden-relabel-street.js +513 -0
- package/out/src/tools/golden-relabel-street.js.map +1 -0
- package/out/src/tools/index.d.ts +4 -0
- package/out/src/tools/index.d.ts.map +1 -1
- package/out/src/tools/index.js +4 -0
- package/out/src/tools/index.js.map +1 -1
- package/out/src/tools/jsonl-to-parquet.d.ts.map +1 -1
- package/out/src/tools/jsonl-to-parquet.js +3 -2
- package/out/src/tools/jsonl-to-parquet.js.map +1 -1
- package/out/src/tools/lint-shard-vocab.d.ts.map +1 -1
- package/out/src/tools/lint-shard-vocab.js +3 -2
- package/out/src/tools/lint-shard-vocab.js.map +1 -1
- package/out/src/tools/lint-shard.d.ts +3 -3
- package/out/src/tools/lint-shard.d.ts.map +1 -1
- package/out/src/tools/lint-shard.js +23 -32
- package/out/src/tools/lint-shard.js.map +1 -1
- package/out/src/tools/overlay-manifest.d.ts.map +1 -1
- package/out/src/tools/overlay-manifest.js +2 -1
- package/out/src/tools/overlay-manifest.js.map +1 -1
- package/out/src/tools/overture-subvenue.d.ts +112 -0
- package/out/src/tools/overture-subvenue.d.ts.map +1 -0
- package/out/src/tools/overture-subvenue.js +144 -0
- package/out/src/tools/overture-subvenue.js.map +1 -0
- package/out/src/tools/shard-kryptonite.d.ts +1 -1
- package/out/src/tools/shard-kryptonite.d.ts.map +1 -1
- package/out/src/tools/shard-kryptonite.js +5 -4
- package/out/src/tools/shard-kryptonite.js.map +1 -1
- package/out/src/tools/shard-translit.d.ts +6 -3
- package/out/src/tools/shard-translit.d.ts.map +1 -1
- package/out/src/tools/shard-translit.js +8 -6
- package/out/src/tools/shard-translit.js.map +1 -1
- package/out/src/tools/sub-venue-lexicon.d.ts +507 -0
- package/out/src/tools/sub-venue-lexicon.d.ts.map +1 -0
- package/out/src/tools/sub-venue-lexicon.js +817 -0
- package/out/src/tools/sub-venue-lexicon.js.map +1 -0
- package/out/src/tools/sub-venue-promotions.d.ts +94 -0
- package/out/src/tools/sub-venue-promotions.d.ts.map +1 -0
- package/out/src/tools/sub-venue-promotions.js +266 -0
- package/out/src/tools/sub-venue-promotions.js.map +1 -0
- package/out/src/wof-json.d.ts +2 -2
- package/out/src/wof-json.d.ts.map +1 -1
- package/out/src/wof-json.js +5 -8
- package/out/src/wof-json.js.map +1 -1
- package/package.json +8 -8
- package/src/adapter.ts +58 -1
- package/src/adapters/ban/adapter.ts +55 -65
- package/src/adapters/ban/street-decompose.ts +17 -25
- package/src/adapters/fcc-bdc/adapter.ts +2 -33
- package/src/adapters/geonames/adapter.ts +64 -72
- package/src/adapters/geonames-postal/adapter.ts +42 -50
- package/src/adapters/gnaf/adapter.ts +4 -7
- package/src/adapters/gnaf/assemble.ts +6 -10
- package/src/adapters/openaddresses/adapter.ts +2 -7
- package/src/adapters/overture/adapter.ts +3 -6
- package/src/adapters/state-hi-schools/adapter.ts +50 -73
- package/src/adapters/state-ia-contractors/adapter.ts +52 -76
- package/src/adapters/state-ny-notaries/adapter.ts +61 -85
- package/src/adapters/state-tx-notaries/adapter.ts +60 -84
- package/src/adapters/synth-po-box/adapter.ts +7 -17
- package/src/adapters/tiger/street-decompose.ts +21 -31
- package/src/adapters/usgov-hrsa-fqhc/adapter.ts +61 -84
- package/src/adapters/usgov-imls-pls/adapter.ts +54 -82
- package/src/adapters/usgov-irs-bmf/adapter.ts +53 -63
- package/src/adapters/usgov-nad/adapter.ts +5 -8
- package/src/adapters/usgov-nppes/adapter.ts +51 -75
- package/src/adapters/usgov-samhsa-treatment-locator/adapter.ts +45 -71
- package/src/adapters/wof-admin-jp/adapter.ts +34 -8
- package/src/build.ts +2 -1
- package/src/golden.ts +24 -9
- package/src/parquet-wrapper/reader.ts +19 -0
- package/src/parquet-wrapper/schema.ts +4 -0
- package/src/parquet.ts +3 -16
- package/src/shard-recipes/anchor-absorption.ts +2 -1
- package/src/shard-recipes/country-balanced.ts +69 -70
- package/src/shard-recipes/fr-fragment.ts +10 -7
- package/src/shard-recipes/fr-order.ts +13 -63
- package/src/shard-recipes/german.ts +12 -65
- package/src/shard-recipes/index.ts +2 -0
- package/src/shard-recipes/intersection.ts +32 -60
- package/src/shard-recipes/locale.ts +14 -16
- package/src/shard-recipes/no-fragment.ts +10 -7
- package/src/shard-recipes/no-street-led.ts +10 -7
- package/src/shard-recipes/po-box-cedex.ts +68 -119
- package/src/shard-recipes/scaffold.ts +82 -28
- package/src/shard-recipes/street-affix.ts +58 -95
- package/src/shard-recipes/sub-venue-sources.ts +895 -0
- package/src/shard-recipes/sub-venue.ts +982 -0
- package/src/shard-recipes/unit.ts +22 -70
- package/src/split.ts +7 -0
- package/src/synthesize.ts +1 -15
- package/src/tools/align-shard.ts +3 -6
- package/src/tools/audit.ts +6 -5
- package/src/tools/corpus-stats.ts +25 -33
- package/src/tools/fetch/download.ts +7 -5
- package/src/tools/fetch/imls-pls.ts +2 -2
- package/src/tools/fetch/index.ts +14 -1
- package/src/tools/fetch/nad.ts +1 -1
- package/src/tools/fetch/nppes.ts +2 -1
- package/src/tools/fetch/openaddresses.ts +1 -1
- package/src/tools/fetch/ourairports.ts +166 -0
- package/src/tools/fetch/wikidata-subvenue.ts +386 -0
- package/src/tools/golden-expand.ts +18 -13
- package/src/tools/golden-promote.ts +15 -6
- package/src/tools/golden-relabel-street.ts +748 -0
- package/src/tools/index.ts +4 -0
- package/src/tools/jsonl-to-parquet.ts +3 -2
- package/src/tools/lint-shard-vocab.ts +3 -2
- package/src/tools/lint-shard.ts +33 -36
- package/src/tools/overlay-manifest.ts +2 -1
- package/src/tools/overture-subvenue.ts +215 -0
- package/src/tools/shard-kryptonite.ts +5 -4
- package/src/tools/shard-translit.ts +12 -7
- package/src/tools/sub-venue-lexicon.ts +1250 -0
- package/src/tools/sub-venue-promotions.ts +330 -0
- package/src/wof-json.ts +5 -8
|
@@ -39,11 +39,12 @@ import {
|
|
|
39
39
|
US_STREET_SUFFIX_PREFERRED_ABBR,
|
|
40
40
|
} from "@mailwoman/codex/us"
|
|
41
41
|
import type { ComponentTag } from "@mailwoman/core/types"
|
|
42
|
+
import { dataRootPath } from "@mailwoman/core/utils"
|
|
42
43
|
|
|
43
44
|
import { stableSourceID } from "../adapter.ts"
|
|
44
45
|
import { alignRow } from "../align.ts"
|
|
45
46
|
import type { CanonicalRow } from "../types.ts"
|
|
46
|
-
import { makeMulberry32, type ShardRecipe } from "./scaffold.ts"
|
|
47
|
+
import { makeMulberry32, readCSVRecords, type ShardRecipe } from "./scaffold.ts"
|
|
47
48
|
|
|
48
49
|
// Same OA cache as the unit shard. Train = every NON-Vermont state; eval = Vermont (the holdout).
|
|
49
50
|
/* oxlint-disable sister-software/no-unnamed-threshold -- the bare decimals below are weighted-sampler
|
|
@@ -59,16 +60,20 @@ interface USSource {
|
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
const TRAIN_SOURCES: readonly USSource[] = [
|
|
62
|
-
{ zip: "
|
|
63
|
-
{ zip: "
|
|
64
|
-
{ zip: "
|
|
65
|
-
{ zip: "
|
|
66
|
-
{ zip: "
|
|
67
|
-
{ zip: "
|
|
68
|
-
{ zip: "
|
|
63
|
+
{ zip: dataRootPath("oa-cache", "us__ca__berkeley.zip"), csv: "us/ca/berkeley.csv", region: "CA" },
|
|
64
|
+
{ zip: dataRootPath("oa-cache", "us__ca__marin.zip"), csv: "us/ca/marin.csv", region: "CA" },
|
|
65
|
+
{ zip: dataRootPath("oa-cache", "us__dc__statewide.zip"), csv: "us/dc/statewide.csv", region: "DC" },
|
|
66
|
+
{ zip: dataRootPath("oa-cache", "us__ia__statewide.zip"), csv: "us/ia/statewide.csv", region: "IA" },
|
|
67
|
+
{ zip: dataRootPath("oa-cache", "us__il__cook.zip"), csv: "us/il/cook.csv", region: "IL" },
|
|
68
|
+
{ zip: dataRootPath("oa-cache", "us__mt__statewide.zip"), csv: "us/mt/statewide.csv", region: "MT" },
|
|
69
|
+
{ zip: dataRootPath("oa-cache", "us__sd__statewide.zip"), csv: "us/sd/statewide.csv", region: "SD" },
|
|
69
70
|
]
|
|
70
71
|
|
|
71
|
-
const EVAL_SOURCE: USSource = {
|
|
72
|
+
const EVAL_SOURCE: USSource = {
|
|
73
|
+
zip: dataRootPath("oa-cache", "us__vt__statewide.zip"),
|
|
74
|
+
csv: "us/vt/statewide.csv",
|
|
75
|
+
region: "VT",
|
|
76
|
+
}
|
|
72
77
|
|
|
73
78
|
// Multi-locale BALANCE sources (--multilocale-count > 0). These rows carry NO affix split — they exist
|
|
74
79
|
// only to keep the postcode-ORDER distribution multi-locale. Native-order rendering mirrors
|
|
@@ -83,14 +88,38 @@ interface BalanceSource {
|
|
|
83
88
|
}
|
|
84
89
|
|
|
85
90
|
const MULTILOCALE_SOURCES: readonly BalanceSource[] = [
|
|
86
|
-
{
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
91
|
+
{
|
|
92
|
+
zip: dataRootPath("oa-cache", "de__sn__statewide.zip"),
|
|
93
|
+
csv: "de/sn/statewide.csv",
|
|
94
|
+
iso2: "DE",
|
|
95
|
+
region: "",
|
|
96
|
+
order: "eu",
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
zip: dataRootPath("oa-cache", "fr__countrywide.zip"),
|
|
100
|
+
csv: "fr/countrywide.csv",
|
|
101
|
+
iso2: "FR",
|
|
102
|
+
region: "",
|
|
103
|
+
order: "fr",
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
zip: dataRootPath("oa-cache", "it__countrywide.zip"),
|
|
107
|
+
csv: "it/countrywide.csv",
|
|
108
|
+
iso2: "IT",
|
|
109
|
+
region: "",
|
|
110
|
+
order: "eu",
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
zip: dataRootPath("oa-cache", "nl__countrywide.zip"),
|
|
114
|
+
csv: "nl/countrywide.csv",
|
|
115
|
+
iso2: "NL",
|
|
116
|
+
region: "",
|
|
117
|
+
order: "eu",
|
|
118
|
+
},
|
|
90
119
|
]
|
|
91
120
|
|
|
92
121
|
const MULTILOCALE_EVAL_SOURCES: readonly BalanceSource[] = [
|
|
93
|
-
{ zip: "
|
|
122
|
+
{ zip: dataRootPath("oa-cache", "de__berlin.zip"), csv: "de/berlin.csv", iso2: "DE", region: "", order: "eu" },
|
|
94
123
|
]
|
|
95
124
|
|
|
96
125
|
/**
|
|
@@ -131,44 +160,6 @@ interface BalanceTuple {
|
|
|
131
160
|
*/
|
|
132
161
|
type Prefix = Pick<NonNullable<ReturnType<typeof matchLeadingDirectional>>, "canonical" | "abbreviation">
|
|
133
162
|
|
|
134
|
-
/**
|
|
135
|
-
* Minimal RFC-4180-ish splitter (handles quoted fields).
|
|
136
|
-
*/
|
|
137
|
-
function splitCSV(line: string): string[] {
|
|
138
|
-
const out: string[] = []
|
|
139
|
-
let cur = ""
|
|
140
|
-
let inQ = false
|
|
141
|
-
|
|
142
|
-
for (let i = 0; i < line.length; i++) {
|
|
143
|
-
const c = line[i]
|
|
144
|
-
|
|
145
|
-
if (inQ) {
|
|
146
|
-
if (c === '"') {
|
|
147
|
-
if (line[i + 1] === '"') {
|
|
148
|
-
cur += '"'
|
|
149
|
-
|
|
150
|
-
i++
|
|
151
|
-
} else {
|
|
152
|
-
inQ = false
|
|
153
|
-
}
|
|
154
|
-
} else {
|
|
155
|
-
cur += c
|
|
156
|
-
}
|
|
157
|
-
} else if (c === '"') {
|
|
158
|
-
inQ = true
|
|
159
|
-
} else if (c === ",") {
|
|
160
|
-
out.push(cur)
|
|
161
|
-
cur = ""
|
|
162
|
-
} else {
|
|
163
|
-
cur += c
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
out.push(cur)
|
|
168
|
-
|
|
169
|
-
return out
|
|
170
|
-
}
|
|
171
|
-
|
|
172
163
|
/**
|
|
173
164
|
* Stream real US tuples (number/street/city/postcode) out of a cached OA zip.
|
|
174
165
|
*/
|
|
@@ -181,34 +172,20 @@ function readTuples(source: USSource): USTuple[] {
|
|
|
181
172
|
return []
|
|
182
173
|
}
|
|
183
174
|
|
|
184
|
-
const lines = r.stdout.toString("utf8").split(/\r?\n/)
|
|
185
|
-
|
|
186
|
-
if (lines.length < 2) return []
|
|
187
|
-
const header = splitCSV(lines[0]!).map((h) => h.trim().toLowerCase())
|
|
188
|
-
const idx = (name: string): number => header.indexOf(name)
|
|
189
|
-
|
|
190
|
-
const iNum = idx("number"),
|
|
191
|
-
iStreet = idx("street"),
|
|
192
|
-
iCity = idx("city"),
|
|
193
|
-
iPost = idx("postcode")
|
|
194
|
-
|
|
195
|
-
const get = (cells: string[], i: number): string => (i >= 0 && i < cells.length ? (cells[i] ?? "").trim() : "")
|
|
196
175
|
const tuples: USTuple[] = []
|
|
197
176
|
const seen = new Set<string>()
|
|
198
177
|
|
|
199
|
-
for (
|
|
200
|
-
|
|
201
|
-
const
|
|
202
|
-
const
|
|
203
|
-
const locality = get(cells, iCity)
|
|
204
|
-
const house_number = get(cells, iNum)
|
|
178
|
+
for (const row of readCSVRecords(r.stdout)) {
|
|
179
|
+
const street = row.street ?? ""
|
|
180
|
+
const locality = row.city ?? ""
|
|
181
|
+
const house_number = row.number ?? ""
|
|
205
182
|
|
|
206
183
|
if (!street || !locality || !house_number) continue
|
|
207
184
|
const key = `${house_number}|${street}|${locality}`.toLowerCase()
|
|
208
185
|
|
|
209
186
|
if (seen.has(key)) continue
|
|
210
187
|
seen.add(key)
|
|
211
|
-
tuples.push({ house_number, street, locality, region: source.region, postcode:
|
|
188
|
+
tuples.push({ house_number, street, locality, region: source.region, postcode: row.postcode ?? "" })
|
|
212
189
|
}
|
|
213
190
|
|
|
214
191
|
return tuples
|
|
@@ -343,8 +320,8 @@ function renderRow(
|
|
|
343
320
|
}
|
|
344
321
|
|
|
345
322
|
/**
|
|
346
|
-
* Capped reader for the multi-locale BALANCE sources. The FR/IT/NL countrywide extracts are GB-scale
|
|
347
|
-
*
|
|
323
|
+
* Capped reader for the multi-locale BALANCE sources. The FR/IT/NL countrywide extracts are GB-scale, so cap the bytes
|
|
324
|
+
* with `head` (mirrors build-country-shard-balanced.mjs) rather than holding a whole extract in memory. Only keeps
|
|
348
325
|
* tuples that carry a POSTCODE.
|
|
349
326
|
*/
|
|
350
327
|
function readBalanceTuples(source: BalanceSource, limit: number): BalanceTuple[] {
|
|
@@ -361,30 +338,16 @@ function readBalanceTuples(source: BalanceSource, limit: number): BalanceTuple[]
|
|
|
361
338
|
return []
|
|
362
339
|
}
|
|
363
340
|
|
|
364
|
-
const lines = r.stdout.toString("utf8").split(/\r?\n/)
|
|
365
|
-
|
|
366
|
-
if (lines.length < 2) return []
|
|
367
|
-
const header = splitCSV(lines[0]!).map((h) => h.trim().toLowerCase())
|
|
368
|
-
const idx = (n: string): number => header.indexOf(n)
|
|
369
|
-
|
|
370
|
-
const iNum = idx("number"),
|
|
371
|
-
iStreet = idx("street"),
|
|
372
|
-
iCity = idx("city"),
|
|
373
|
-
iRegion = idx("region"),
|
|
374
|
-
iPost = idx("postcode")
|
|
375
|
-
|
|
376
|
-
const get = (cells: string[], i: number): string => (i >= 0 && i < cells.length ? (cells[i] ?? "").trim() : "")
|
|
377
341
|
const tuples: BalanceTuple[] = []
|
|
378
342
|
const seen = new Set<string>()
|
|
379
343
|
|
|
380
|
-
for (
|
|
381
|
-
if (
|
|
382
|
-
const cells = splitCSV(lines[li]!)
|
|
344
|
+
for (const row of readCSVRecords(r.stdout)) {
|
|
345
|
+
if (tuples.length >= limit) break
|
|
383
346
|
|
|
384
|
-
const street =
|
|
385
|
-
locality =
|
|
386
|
-
house_number =
|
|
387
|
-
postcode =
|
|
347
|
+
const street = row.street ?? "",
|
|
348
|
+
locality = row.city ?? "",
|
|
349
|
+
house_number = row.number ?? "",
|
|
350
|
+
postcode = row.postcode ?? ""
|
|
388
351
|
|
|
389
352
|
if (!street || !locality || !house_number || !postcode) continue // postcode is required for balance
|
|
390
353
|
const key = `${house_number}|${street}|${locality}`.toLowerCase()
|
|
@@ -396,7 +359,7 @@ function readBalanceTuples(source: BalanceSource, limit: number): BalanceTuple[]
|
|
|
396
359
|
house_number,
|
|
397
360
|
street,
|
|
398
361
|
locality,
|
|
399
|
-
region:
|
|
362
|
+
region: row.region || source.region,
|
|
400
363
|
postcode,
|
|
401
364
|
iso2: source.iso2,
|
|
402
365
|
order: source.order,
|
|
@@ -459,7 +422,7 @@ export const streetAffixRecipe: ShardRecipe = {
|
|
|
459
422
|
}
|
|
460
423
|
|
|
461
424
|
if (!pool.length) {
|
|
462
|
-
throw new Error(
|
|
425
|
+
throw new Error(`No US tuples found — are the cached OA zips present in ${dataRootPath("oa-cache")}?`)
|
|
463
426
|
}
|
|
464
427
|
|
|
465
428
|
let emitted = 0
|