mailwoman 7.0.0 → 7.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placetype-stats.d.ts","sourceRoot":"","sources":["../../../../commands/gazetteer/inspect/placetype-stats.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,OAAO,EAAgB,KAAK,gBAAgB,EAAkB,MAAM,2BAA2B,CAAA;AAE/F,QAAA,MAAM,aAAa;;;;qBAQjB,CAAA;AAEF,OAAO,EAAE,aAAa,IAAI,OAAO,EAAE,CAAA;AA6BnC,QAAA,MAAM,uBAAuB,EAAE,gBAAgB,CAAC,OAAO,aAAa,CA6GnE,CAAA;AAED,eAAe,uBAAuB,CAAA"}
@@ -0,0 +1,122 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * @copyright Sister Software
4
+ * @license AGPL-3.0
5
+ * @author Teffen Ellis, et al.
6
+ *
7
+ * `mailwoman gazetteer inspect placetype-stats [--country XX] [--db <path>] [--json]` — tally WOF
8
+ * placetype statistics + hierarchy relationships from the unified admin DB (`spr` + `ancestors`).
9
+ *
10
+ * Motivation (the `dependent_locality` dead-tag investigation): the trained model struggles with rare
11
+ * sub-locality tags because they have almost no WOF grounding, and we underuse WOF's statistical counts
12
+ * + parent/ancestor relationship chains. This surfaces, per placetype: the global row count, the
13
+ * distribution of its PARENT placetype (how the type relates upward), and its modal ANCESTOR-placetype
14
+ * chain. Read-only. The `--json` payload is shaped to feed an "effective placetype" soft-prior later.
15
+ */
16
+ import { DatabaseSync } from "node:sqlite";
17
+ import { COMPONENT_TAGS } from "@mailwoman/core";
18
+ import { dataRootPath } from "@mailwoman/core/utils";
19
+ import { Box, Text } from "ink";
20
+ import zod from "zod";
21
+ import { commandError, useCommandTask } from "../../../cli-kit/index.js";
22
+ const OptionsSchema = zod.object({
23
+ db: zod.string().optional().describe("WOF admin DB. Default: $MAILWOMAN_DATA_ROOT/wof/admin-global-priority.db"),
24
+ country: zod
25
+ .string()
26
+ .regex(/^[A-Z]{2}$/u, "ISO 3166-1 alpha-2 (e.g. NZ, US)")
27
+ .optional()
28
+ .describe("Filter to one country's places"),
29
+ json: zod.boolean().optional().describe("Emit the raw stats as JSON (feeds a soft-prior / Fable analysis)"),
30
+ });
31
+ export { OptionsSchema as options };
32
+ // WOF placetype -> mailwoman ComponentTag (mirrors core/types/mapping.ts; only the admin-hierarchy ones).
33
+ const PLACETYPE_TO_TAG = {
34
+ country: "country",
35
+ region: "region",
36
+ locality: "locality",
37
+ dependency: "dependent_locality",
38
+ borough: "dependent_locality",
39
+ macrohood: "dependent_locality",
40
+ neighbourhood: "dependent_locality",
41
+ county: "subregion",
42
+ localadmin: "subregion",
43
+ };
44
+ const GazetteerPlacetypeStats = ({ options }) => {
45
+ const state = useCommandTask(async () => {
46
+ const dbPath = options.db ?? dataRootPath("wof", "admin-global-priority.db").toString();
47
+ const country = options.country;
48
+ let db;
49
+ try {
50
+ db = new DatabaseSync(dbPath, { readOnly: true });
51
+ }
52
+ catch (error) {
53
+ throw commandError(`Cannot open WOF DB ${dbPath}: ${error.message}`);
54
+ }
55
+ const where = country ? "AND s.country = ?" : "";
56
+ const cWhere = country ? "AND c.country = ?" : "";
57
+ const params = country ? [country] : [];
58
+ // 1) counts
59
+ const counts = db
60
+ .prepare(`SELECT placetype, count(*) AS n FROM spr s WHERE is_current = 1 ${where} GROUP BY placetype`)
61
+ .all(...params);
62
+ // 2) parent-placetype distribution (child.parent_id -> parent.placetype)
63
+ const parentRows = db
64
+ .prepare(`SELECT c.placetype AS child, p.placetype AS parent, count(*) AS n
65
+ FROM spr c JOIN spr p ON c.parent_id = p.id
66
+ WHERE c.is_current = 1 ${cWhere} GROUP BY c.placetype, p.placetype`)
67
+ .all(...params);
68
+ // 3) ancestor-placetype distribution (via the ancestors chain table)
69
+ const ancRows = db
70
+ .prepare(`SELECT s.placetype AS pt, a.ancestor_placetype AS anc, count(*) AS n
71
+ FROM ancestors a JOIN spr s ON a.id = s.id
72
+ WHERE s.is_current = 1 ${where} GROUP BY s.placetype, a.ancestor_placetype`)
73
+ .all(...params);
74
+ db.close();
75
+ const byParent = new Map();
76
+ for (const r of parentRows) {
77
+ const list = byParent.get(r.child) ?? [];
78
+ list.push({ placetype: r.parent, n: r.n });
79
+ byParent.set(r.child, list);
80
+ }
81
+ const byAnc = new Map();
82
+ for (const r of ancRows) {
83
+ const list = byAnc.get(r.pt) ?? [];
84
+ list.push({ placetype: r.anc, n: r.n });
85
+ byAnc.set(r.pt, list);
86
+ }
87
+ const dist = (list) => {
88
+ if (!list?.length)
89
+ return [];
90
+ const tot = list.reduce((s, x) => s + x.n, 0) || 1;
91
+ return list
92
+ .sort((a, b) => b.n - a.n)
93
+ .slice(0, 5)
94
+ .map((x) => ({ placetype: x.placetype, fraction: x.n / tot }));
95
+ };
96
+ const tags = new Set(COMPONENT_TAGS);
97
+ const stats = counts
98
+ .sort((a, b) => b.n - a.n)
99
+ .map((c) => ({
100
+ placetype: c.placetype,
101
+ count: c.n,
102
+ parents: dist(byParent.get(c.placetype)),
103
+ ancestors: dist(byAnc.get(c.placetype)),
104
+ trained: tags.has(PLACETYPE_TO_TAG[c.placetype] ?? ""),
105
+ }));
106
+ return { dbPath, country: country ?? "ALL", stats };
107
+ });
108
+ if (state.status === "error")
109
+ return _jsxs(Text, { color: "red", children: ["\u2717 ", state.message] });
110
+ if (state.status !== "done")
111
+ return null;
112
+ if (options.json)
113
+ return _jsx(Text, { children: JSON.stringify(state.result, null, 2) });
114
+ const { stats, country } = state.result;
115
+ const pct = (f) => `${Math.round(f * 100)}%`;
116
+ const distStr = (d) => d.length ? d.map((x) => `${x.placetype} ${pct(x.fraction)}`).join(", ") : "—";
117
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { bold: true, children: ["WOF placetype stats \u00B7 ", country, " \u00B7 ", stats.length, " placetypes"] }), _jsx(Text, { dimColor: true, children: `${"placetype".padEnd(20)} count trained parent-placetype distribution` }), stats.map((s) => (_jsxs(Text, { color: s.trained ? undefined : "gray", children: [s.placetype.padEnd(20), " ", String(s.count).padStart(9), " ", s.trained ? " ✓ " : " ", " ", distStr(s.parents)] }, s.placetype))), _jsx(Text, { children: " " }), _jsx(Text, { dimColor: true, children: "Ancestor chains (rare/esoteric types):" }), stats
118
+ .filter((s) => s.count < 200_000 && s.trained)
119
+ .map((s) => (_jsxs(Text, { children: [" ", s.placetype.padEnd(20), " \u2190 ", distStr(s.ancestors)] }, `anc-${s.placetype}`)))] }));
120
+ };
121
+ export default GazetteerPlacetypeStats;
122
+ //# sourceMappingURL=placetype-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placetype-stats.js","sourceRoot":"","sources":["../../../../commands/gazetteer/inspect/placetype-stats.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mailwoman",
3
- "version": "7.0.0",
3
+ "version": "7.1.0",
4
4
  "description": "A calibrated, retrieval-augmented postal-address parser — CLI + library.",
5
5
  "keywords": [
6
6
  "address",
@@ -116,24 +116,24 @@
116
116
  },
117
117
  "dependencies": {
118
118
  "@inkjs/ui": "^2.0.0",
119
- "@mailwoman/annotations": "7.0.0",
120
- "@mailwoman/api": "7.0.0",
121
- "@mailwoman/api-kit": "7.0.0",
122
- "@mailwoman/ban": "7.0.0",
123
- "@mailwoman/codex": "7.0.0",
124
- "@mailwoman/core": "7.0.0",
125
- "@mailwoman/corpus": "7.0.0",
126
- "@mailwoman/formatter": "7.0.0",
127
- "@mailwoman/kind-classifier": "7.0.0",
128
- "@mailwoman/locale-gate": "7.0.0",
129
- "@mailwoman/neural": "7.0.0",
130
- "@mailwoman/normalize": "7.0.0",
131
- "@mailwoman/phrase-grouper": "7.0.0",
132
- "@mailwoman/query-shape": "7.0.0",
133
- "@mailwoman/registry": "7.0.0",
134
- "@mailwoman/resolver": "7.0.0",
135
- "@mailwoman/resolver-wof-sqlite": "7.0.0",
136
- "@mailwoman/spatial": "7.0.0",
119
+ "@mailwoman/annotations": "7.1.0",
120
+ "@mailwoman/api": "7.1.0",
121
+ "@mailwoman/api-kit": "7.1.0",
122
+ "@mailwoman/ban": "7.1.0",
123
+ "@mailwoman/codex": "7.1.0",
124
+ "@mailwoman/core": "7.1.0",
125
+ "@mailwoman/corpus": "7.1.0",
126
+ "@mailwoman/formatter": "7.1.0",
127
+ "@mailwoman/kind-classifier": "7.1.0",
128
+ "@mailwoman/locale-gate": "7.1.0",
129
+ "@mailwoman/neural": "7.1.0",
130
+ "@mailwoman/normalize": "7.1.0",
131
+ "@mailwoman/phrase-grouper": "7.1.0",
132
+ "@mailwoman/query-shape": "7.1.0",
133
+ "@mailwoman/registry": "7.1.0",
134
+ "@mailwoman/resolver": "7.1.0",
135
+ "@mailwoman/resolver-wof-sqlite": "7.1.0",
136
+ "@mailwoman/spatial": "7.1.0",
137
137
  "chalk": "^5.6.2",
138
138
  "change-case": "^5.4.4",
139
139
  "d3-scale-chromatic": "^3.1.0",
@@ -156,7 +156,7 @@
156
156
  },
157
157
  "peerDependencies": {
158
158
  "@duckdb/node-api": "1.5.3-r.3",
159
- "@mailwoman/resolver-wof-sqlite": "7.0.0"
159
+ "@mailwoman/resolver-wof-sqlite": "7.1.0"
160
160
  },
161
161
  "peerDependenciesMeta": {
162
162
  "@duckdb/node-api": {
@@ -176,7 +176,7 @@
176
176
  }
177
177
  },
178
178
  "optionalDependencies": {
179
- "@mailwoman/tiger": "7.0.0"
179
+ "@mailwoman/tiger": "7.1.0"
180
180
  },
181
181
  "engines": {
182
182
  "node": ">=24.18.0"