@finbheara/names 0.9.1 → 0.10.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.
Files changed (40) hide show
  1. package/README.md +38 -1
  2. package/dist/chunks/{index-b2k3er3h.js → index-7sppf1vh.js} +90 -8
  3. package/dist/chunks/{index-b2k3er3h.js.map → index-7sppf1vh.js.map} +5 -3
  4. package/dist/chunks/{index-0qptxnwh.js → index-7vvt5hhy.js} +13 -2
  5. package/dist/chunks/{index-0qptxnwh.js.map → index-7vvt5hhy.js.map} +2 -2
  6. package/dist/chunks/index-ebebeamh.js +446 -0
  7. package/dist/chunks/index-ebebeamh.js.map +10 -0
  8. package/dist/chunks/{index-fzzq5txh.js → index-khxa4qjy.js} +2 -2
  9. package/dist/chunks/{index-2fsdvhaf.js → index-kw6gbrnq.js} +2 -2
  10. package/dist/chunks/{index-d4wr471g.js → index-pncn9y2r.js} +2 -2
  11. package/dist/chunks/index-qsznkk4s.js +3 -0
  12. package/dist/chunks/index-qsznkk4s.js.map +9 -0
  13. package/dist/chunks/{index-852w8w1s.js → index-r5fp3znj.js} +3 -3
  14. package/dist/chunks/{index-0vg56t5v.js → index-yq8hsd1f.js} +3 -3
  15. package/dist/chunks/phrase-672g18kw.js +11 -0
  16. package/dist/classifier/index.js +3 -3
  17. package/dist/cli/census.js +4 -4
  18. package/dist/index.js +25 -8
  19. package/dist/index.js.map +1 -1
  20. package/dist/lexicon/index.js +1 -1
  21. package/dist/measure/index.js +4 -4
  22. package/dist/normalize/index.js +17 -5
  23. package/dist/normalize/index.js.map +1 -1
  24. package/dist/phonetic/index.js +10 -0
  25. package/dist/phonetic/index.js.map +9 -0
  26. package/dist/types/index.d.ts +2 -0
  27. package/dist/types/normalize/block-keys.d.ts +53 -0
  28. package/dist/types/normalize/index.d.ts +2 -0
  29. package/dist/types/normalize/name-columns.d.ts +51 -0
  30. package/dist/types/phonetic/double-metaphone.d.ts +25 -0
  31. package/dist/types/phonetic/index.d.ts +11 -0
  32. package/names.txt +11 -0
  33. package/package.json +8 -2
  34. package/dist/chunks/phrase-dczgr4vs.js +0 -11
  35. /package/dist/chunks/{index-fzzq5txh.js.map → index-khxa4qjy.js.map} +0 -0
  36. /package/dist/chunks/{index-2fsdvhaf.js.map → index-kw6gbrnq.js.map} +0 -0
  37. /package/dist/chunks/{index-d4wr471g.js.map → index-pncn9y2r.js.map} +0 -0
  38. /package/dist/chunks/{index-852w8w1s.js.map → index-r5fp3znj.js.map} +0 -0
  39. /package/dist/chunks/{index-0vg56t5v.js.map → index-yq8hsd1f.js.map} +0 -0
  40. /package/dist/chunks/{phrase-dczgr4vs.js.map → phrase-672g18kw.js.map} +0 -0
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/phonetic/double-metaphone.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * Double Metaphone: a phonetic key for a word, as it sounds rather than as it is spelt.\n *\n * Unlike Soundex it emits TWO codes per word, a primary and a secondary\n * (alternate), so a word can be looked up under either pronunciation. That\n * double-code behaviour is what a sound-alike lookup wants: `Smith` and `Smyth`\n * (SM0 / XMT) collide, and `Kavanagh` / `Cavanagh` both encode to KFNK. It is a\n * general key, not a surname key: a transcribed spoken word and a printed name are\n * asked the same question, how does this sound.\n *\n * It follows the reference Double Metaphone control flow (2000): the same silent\n * onsets (GN/KN/PN/WR/PS), GH / CH / C-variant / PH->F / vowel-only-at-start\n * rules, Slavo-Germanic detection, and the 4-character code cap. It is NOT\n * guaranteed byte-perfect against every entry of the reference test table, but it\n * reproduces the standard rule set and groups the classic sound-alikes.\n *\n * Plain TypeScript, no dependencies and no state.\n */\n\n/** AEIOUY — Double Metaphone treats Y as a vowel. Empty string is not a vowel. */\nfunction isVowel(c: string): boolean {\n\treturn c !== \"\" && \"AEIOUY\".includes(c);\n}\n\n/** Slavo-Germanic words get special S/Z/J handling in the reference algorithm. */\nfunction isSlavoGermanic(w: string): boolean {\n\treturn /W|K|CZ|WITZ/.test(w);\n}\n\n/**\n * Encode `word` into its [primary, secondary] Double Metaphone codes. When the\n * word has no phonetic alternate, secondary === primary. Non-letters are left\n * to the caller to strip (`metaphoneBlocks` in `/normalize` keeps A-Z only); this\n * operates on the raw uppercased string.\n */\nexport function doubleMetaphone(word: string): [string, string] {\n\tconst w = (word ?? \"\").toUpperCase();\n\tconst length = w.length;\n\tconst last = length - 1;\n\tconst slavo = isSlavoGermanic(w);\n\n\tlet primary = \"\";\n\tlet secondary = \"\";\n\n\t/** Character at index i (or \"\" out of range — never undefined). */\n\tconst at = (i: number): string => w.charAt(i);\n\t/** True if the fixed-length window at `start` equals any option. */\n\tconst stringAt = (start: number, len: number, list: string[]): boolean => {\n\t\tif (start < 0 || start >= length) return false;\n\t\treturn list.includes(w.substring(start, start + len));\n\t};\n\t/** Append to both codes (secondary defaults to the primary append). */\n\tconst add = (p: string, s?: string): void => {\n\t\tprimary += p;\n\t\tsecondary += s === undefined ? p : s;\n\t};\n\n\tlet n = 0;\n\n\t// Silent onsets: skip the first letter.\n\tif (stringAt(0, 2, [\"GN\", \"KN\", \"PN\", \"WR\", \"PS\"])) n = 1;\n\t// Initial X is pronounced like S (e.g. \"Xavier\").\n\tif (at(0) === \"X\") {\n\t\tadd(\"S\");\n\t\tn = 1;\n\t}\n\n\twhile (n < length && (primary.length < 4 || secondary.length < 4)) {\n\t\tconst c = at(n);\n\t\tswitch (c) {\n\t\t\tcase \"A\":\n\t\t\tcase \"E\":\n\t\t\tcase \"I\":\n\t\t\tcase \"O\":\n\t\t\tcase \"U\":\n\t\t\tcase \"Y\":\n\t\t\t\t// Only a leading vowel is coded (all vowels -> \"A\").\n\t\t\t\tif (n === 0) add(\"A\");\n\t\t\t\tn += 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"B\":\n\t\t\t\tadd(\"P\");\n\t\t\t\tn += at(n + 1) === \"B\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"C\":\n\t\t\t\t// Various Germanic: e.g. \"bacher\", \"macher\".\n\t\t\t\tif (\n\t\t\t\t\tn > 1 &&\n\t\t\t\t\t!isVowel(at(n - 2)) &&\n\t\t\t\t\tstringAt(n - 1, 3, [\"ACH\"]) &&\n\t\t\t\t\tat(n + 2) !== \"I\" &&\n\t\t\t\t\t(at(n + 2) !== \"E\" || stringAt(n - 2, 6, [\"BACHER\", \"MACHER\"]))\n\t\t\t\t) {\n\t\t\t\t\tadd(\"K\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Special case \"caesar\".\n\t\t\t\tif (n === 0 && stringAt(0, 6, [\"CAESAR\"])) {\n\t\t\t\t\tadd(\"S\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Italian \"chianti\".\n\t\t\t\tif (stringAt(n, 4, [\"CHIA\"])) {\n\t\t\t\t\tadd(\"K\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n, 2, [\"CH\"])) {\n\t\t\t\t\t// \"michael\".\n\t\t\t\t\tif (n > 0 && stringAt(n, 4, [\"CHAE\"])) {\n\t\t\t\t\t\tadd(\"K\", \"X\");\n\t\t\t\t\t\tn += 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t// Greek roots e.g. \"chemistry\", \"chorus\".\n\t\t\t\t\tif (\n\t\t\t\t\t\tn === 0 &&\n\t\t\t\t\t\t(stringAt(n + 1, 5, [\"HARAC\", \"HARIS\"]) ||\n\t\t\t\t\t\t\tstringAt(n + 1, 3, [\"HOR\", \"HYM\", \"HIA\", \"HEM\"])) &&\n\t\t\t\t\t\t!stringAt(0, 5, [\"CHORE\"])\n\t\t\t\t\t) {\n\t\t\t\t\t\tadd(\"K\");\n\t\t\t\t\t\tn += 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t// Germanic / Greek / otherwise hard \"kh\" sound.\n\t\t\t\t\tif (\n\t\t\t\t\t\tstringAt(0, 4, [\"VAN \", \"VON \"]) ||\n\t\t\t\t\t\tstringAt(0, 3, [\"SCH\"]) ||\n\t\t\t\t\t\tstringAt(n - 2, 6, [\"ORCHES\", \"ARCHIT\", \"ORCHID\"]) ||\n\t\t\t\t\t\tstringAt(n + 2, 1, [\"T\", \"S\"]) ||\n\t\t\t\t\t\t((stringAt(n - 1, 1, [\"A\", \"O\", \"U\", \"E\"]) || n === 0) &&\n\t\t\t\t\t\t\tstringAt(n + 2, 1, [\"L\", \"R\", \"N\", \"M\", \"B\", \"H\", \"F\", \"V\", \"W\", \" \"]))\n\t\t\t\t\t) {\n\t\t\t\t\t\tadd(\"K\");\n\t\t\t\t\t} else if (n > 0) {\n\t\t\t\t\t\tif (stringAt(0, 2, [\"MC\"])) add(\"K\");\n\t\t\t\t\t\telse add(\"X\", \"K\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tadd(\"X\");\n\t\t\t\t\t}\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// e.g. \"czerny\".\n\t\t\t\tif (stringAt(n, 2, [\"CZ\"]) && !stringAt(n - 2, 4, [\"WICZ\"])) {\n\t\t\t\t\tadd(\"S\", \"X\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// e.g. \"focaccia\".\n\t\t\t\tif (stringAt(n + 1, 3, [\"CIA\"])) {\n\t\t\t\t\tadd(\"X\");\n\t\t\t\t\tn += 3;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Double C, but not \"McClellan\".\n\t\t\t\tif (stringAt(n, 2, [\"CC\"]) && !(n === 1 && at(0) === \"M\")) {\n\t\t\t\t\t// \"bellocchio\" but not \"bacchus\".\n\t\t\t\t\tif (stringAt(n + 2, 1, [\"I\", \"E\", \"H\"]) && !stringAt(n + 2, 2, [\"HU\"])) {\n\t\t\t\t\t\t// \"accident\", \"accede\", \"succeed\".\n\t\t\t\t\t\tif ((n === 1 && at(n - 1) === \"A\") || stringAt(n - 1, 5, [\"UCCEE\", \"UCCES\"])) {\n\t\t\t\t\t\t\tadd(\"KS\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tadd(\"X\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tn += 3;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t// Any other CC: a hard K.\n\t\t\t\t\tadd(\"K\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n, 2, [\"CK\", \"CG\", \"CQ\"])) {\n\t\t\t\t\tadd(\"K\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n, 2, [\"CI\", \"CE\", \"CY\"])) {\n\t\t\t\t\t// Italian vs English.\n\t\t\t\t\tif (stringAt(n, 3, [\"CIO\", \"CIE\", \"CIA\"])) add(\"S\", \"X\");\n\t\t\t\t\telse add(\"S\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tadd(\"K\");\n\t\t\t\tif (stringAt(n + 1, 2, [\" C\", \" Q\", \" G\"])) n += 3;\n\t\t\t\telse if (stringAt(n + 1, 1, [\"C\", \"K\", \"Q\"]) && !stringAt(n + 1, 2, [\"CE\", \"CI\"])) n += 2;\n\t\t\t\telse n += 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"D\":\n\t\t\t\tif (stringAt(n, 2, [\"DG\"])) {\n\t\t\t\t\tif (stringAt(n + 2, 1, [\"I\", \"E\", \"Y\"])) {\n\t\t\t\t\t\t// \"edge\".\n\t\t\t\t\t\tadd(\"J\");\n\t\t\t\t\t\tn += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// \"edgar\".\n\t\t\t\t\t\tadd(\"TK\");\n\t\t\t\t\t\tn += 2;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n, 2, [\"DT\", \"DD\"])) {\n\t\t\t\t\tadd(\"T\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tadd(\"T\");\n\t\t\t\tn += 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"F\":\n\t\t\t\tadd(\"F\");\n\t\t\t\tn += at(n + 1) === \"F\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"G\":\n\t\t\t\tif (at(n + 1) === \"H\") {\n\t\t\t\t\tif (n > 0 && !isVowel(at(n - 1))) {\n\t\t\t\t\t\tadd(\"K\");\n\t\t\t\t\t\tn += 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (n === 0) {\n\t\t\t\t\t\t// \"ghislane\", \"ghiradelli\".\n\t\t\t\t\t\tif (at(n + 2) === \"I\") add(\"J\");\n\t\t\t\t\t\telse add(\"K\");\n\t\t\t\t\t\tn += 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t// GH after B, H or D two or three back is silent.\n\t\t\t\t\tif (\n\t\t\t\t\t\t(n > 1 && stringAt(n - 2, 1, [\"B\", \"H\", \"D\"])) ||\n\t\t\t\t\t\t(n > 2 && stringAt(n - 3, 1, [\"B\", \"H\", \"D\"])) ||\n\t\t\t\t\t\t(n > 3 && stringAt(n - 4, 1, [\"B\", \"H\"]))\n\t\t\t\t\t) {\n\t\t\t\t\t\tn += 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t// e.g. \"laugh\", \"cough\", \"rough\", \"tough\".\n\t\t\t\t\tif (n > 2 && at(n - 1) === \"U\" && stringAt(n - 3, 1, [\"C\", \"G\", \"L\", \"R\", \"T\"])) {\n\t\t\t\t\t\tadd(\"F\");\n\t\t\t\t\t} else if (n > 0 && at(n - 1) !== \"I\") {\n\t\t\t\t\t\tadd(\"K\");\n\t\t\t\t\t}\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (at(n + 1) === \"N\") {\n\t\t\t\t\tif (n === 1 && isVowel(at(0)) && !slavo) {\n\t\t\t\t\t\tadd(\"KN\", \"N\");\n\t\t\t\t\t} else if (!stringAt(n + 2, 2, [\"EY\"]) && at(n + 1) !== \"Y\" && !slavo) {\n\t\t\t\t\t\tadd(\"N\", \"KN\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tadd(\"KN\");\n\t\t\t\t\t}\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// \"tagliaro\".\n\t\t\t\tif (stringAt(n + 1, 2, [\"LI\"]) && !slavo) {\n\t\t\t\t\tadd(\"KL\", \"L\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Initial \"GE-/GY-\" variants that can sound soft.\n\t\t\t\tif (\n\t\t\t\t\tn === 0 &&\n\t\t\t\t\t(at(n + 1) === \"Y\" ||\n\t\t\t\t\t\tstringAt(n + 1, 2, [\"ES\", \"EP\", \"EB\", \"EL\", \"EY\", \"IB\", \"IL\", \"IN\", \"IE\", \"EI\", \"ER\"]))\n\t\t\t\t) {\n\t\t\t\t\tadd(\"K\", \"J\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// -GER-, -GY-.\n\t\t\t\tif (\n\t\t\t\t\t(stringAt(n + 1, 2, [\"ER\"]) || at(n + 1) === \"Y\") &&\n\t\t\t\t\t!stringAt(0, 6, [\"DANGER\", \"RANGER\", \"MANGER\"]) &&\n\t\t\t\t\t!stringAt(n - 1, 1, [\"E\", \"I\"]) &&\n\t\t\t\t\t!stringAt(n - 1, 3, [\"RGY\", \"OGY\"])\n\t\t\t\t) {\n\t\t\t\t\tadd(\"K\", \"J\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Italian e.g. \"biaggi\".\n\t\t\t\tif (stringAt(n + 1, 1, [\"E\", \"I\", \"Y\"]) || stringAt(n - 1, 4, [\"AGGI\", \"OGGI\"])) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tstringAt(0, 4, [\"VAN \", \"VON \"]) ||\n\t\t\t\t\t\tstringAt(0, 3, [\"SCH\"]) ||\n\t\t\t\t\t\tstringAt(n + 1, 2, [\"ET\"])\n\t\t\t\t\t) {\n\t\t\t\t\t\tadd(\"K\");\n\t\t\t\t\t} else if (stringAt(n + 1, 4, [\"IER \"])) {\n\t\t\t\t\t\tadd(\"J\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tadd(\"J\", \"K\");\n\t\t\t\t\t}\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tadd(\"K\");\n\t\t\t\tn += at(n + 1) === \"G\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"H\":\n\t\t\t\t// Only kept if first-and-before-vowel, or between two vowels.\n\t\t\t\tif ((n === 0 || isVowel(at(n - 1))) && isVowel(at(n + 1))) {\n\t\t\t\t\tadd(\"H\");\n\t\t\t\t\tn += 2;\n\t\t\t\t} else {\n\t\t\t\t\tn += 1;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"J\":\n\t\t\t\t// Spanish \"jose\", \"san jacinto\".\n\t\t\t\tif (stringAt(n, 4, [\"JOSE\"]) || stringAt(0, 4, [\"SAN \"])) {\n\t\t\t\t\tif ((n === 0 && at(n + 4) === \" \") || stringAt(0, 4, [\"SAN \"])) {\n\t\t\t\t\t\tadd(\"H\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tadd(\"J\", \"H\");\n\t\t\t\t\t}\n\t\t\t\t\tn += 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (n === 0) {\n\t\t\t\t\t// \"Jankelowicz\" / anglicised \"Yankelovich\".\n\t\t\t\t\tadd(\"J\", \"A\");\n\t\t\t\t} else if (isVowel(at(n - 1)) && !slavo && (at(n + 1) === \"A\" || at(n + 1) === \"O\")) {\n\t\t\t\t\tadd(\"J\", \"H\");\n\t\t\t\t} else if (n === last) {\n\t\t\t\t\tadd(\"J\", \"\");\n\t\t\t\t} else if (\n\t\t\t\t\t!stringAt(n + 1, 1, [\"L\", \"T\", \"K\", \"S\", \"N\", \"M\", \"B\", \"Z\"]) &&\n\t\t\t\t\t!stringAt(n - 1, 1, [\"S\", \"K\", \"L\"])\n\t\t\t\t) {\n\t\t\t\t\tadd(\"J\");\n\t\t\t\t}\n\t\t\t\tn += at(n + 1) === \"J\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"K\":\n\t\t\t\tadd(\"K\");\n\t\t\t\tn += at(n + 1) === \"K\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"L\":\n\t\t\t\tif (at(n + 1) === \"L\") {\n\t\t\t\t\t// Spanish silent-LL e.g. \"cabrillo\", \"gallegos\".\n\t\t\t\t\tif (\n\t\t\t\t\t\t(n === length - 3 && stringAt(n - 1, 4, [\"ILLO\", \"ILLA\", \"ALLE\"])) ||\n\t\t\t\t\t\t((stringAt(last - 1, 2, [\"AS\", \"OS\"]) || stringAt(last, 1, [\"A\", \"O\"])) &&\n\t\t\t\t\t\t\tstringAt(n - 1, 4, [\"ALLE\"]))\n\t\t\t\t\t) {\n\t\t\t\t\t\tadd(\"L\", \"\");\n\t\t\t\t\t\tn += 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tn += 2;\n\t\t\t\t} else {\n\t\t\t\t\tn += 1;\n\t\t\t\t}\n\t\t\t\tadd(\"L\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"M\":\n\t\t\t\tadd(\"M\");\n\t\t\t\tif (\n\t\t\t\t\tat(n + 1) === \"M\" ||\n\t\t\t\t\t// Silent B: \"dumb\", \"thumb\", \"comb\".\n\t\t\t\t\t(at(n - 1) === \"U\" && at(n + 1) === \"B\" && (n + 1 === last || stringAt(n + 2, 2, [\"ER\"])))\n\t\t\t\t) {\n\t\t\t\t\tn += 2;\n\t\t\t\t} else {\n\t\t\t\t\tn += 1;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"N\":\n\t\t\t\tadd(\"N\");\n\t\t\t\tn += at(n + 1) === \"N\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"P\":\n\t\t\t\tif (at(n + 1) === \"H\") {\n\t\t\t\t\tadd(\"F\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tadd(\"P\");\n\t\t\t\t// \"campbell\", \"raspberry\".\n\t\t\t\tn += stringAt(n + 1, 1, [\"P\", \"B\"]) ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"Q\":\n\t\t\t\tadd(\"K\");\n\t\t\t\tn += at(n + 1) === \"Q\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"R\":\n\t\t\t\t// French final \"-ier\" e.g. \"rogier\" (but not \"hochmeier\").\n\t\t\t\tif (\n\t\t\t\t\tn === last &&\n\t\t\t\t\t!slavo &&\n\t\t\t\t\tstringAt(n - 2, 2, [\"IE\"]) &&\n\t\t\t\t\t!stringAt(n - 4, 2, [\"ME\", \"MA\"])\n\t\t\t\t) {\n\t\t\t\t\tadd(\"\", \"R\");\n\t\t\t\t} else {\n\t\t\t\t\tadd(\"R\");\n\t\t\t\t}\n\t\t\t\tn += at(n + 1) === \"R\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"S\":\n\t\t\t\t// \"island\", \"isle\", \"carlisle\".\n\t\t\t\tif (stringAt(n - 1, 3, [\"ISL\", \"YSL\"])) {\n\t\t\t\t\tn += 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// \"sugar\".\n\t\t\t\tif (n === 0 && stringAt(0, 5, [\"SUGAR\"])) {\n\t\t\t\t\tadd(\"X\", \"S\");\n\t\t\t\t\tn += 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n, 2, [\"SH\"])) {\n\t\t\t\t\t// Germanic \"sh\".\n\t\t\t\t\tif (stringAt(n + 1, 4, [\"HEIM\", \"HOEK\", \"HOLM\", \"HOLZ\"])) add(\"S\");\n\t\t\t\t\telse add(\"X\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Italian / Armenian.\n\t\t\t\tif (stringAt(n, 3, [\"SIO\", \"SIA\"]) || stringAt(n, 4, [\"SIAN\"])) {\n\t\t\t\t\tif (!slavo) add(\"S\", \"X\");\n\t\t\t\t\telse add(\"S\");\n\t\t\t\t\tn += 3;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// German onset \"sm/sn/sl/sw\", and any \"sz\".\n\t\t\t\tif ((n === 0 && stringAt(n + 1, 1, [\"M\", \"N\", \"L\", \"W\"])) || at(n + 1) === \"Z\") {\n\t\t\t\t\tadd(\"S\", \"X\");\n\t\t\t\t\tn += at(n + 1) === \"Z\" ? 2 : 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n, 2, [\"SC\"])) {\n\t\t\t\t\t// SC: SCH reads SK or X, SCE/SCI/SCY reads S, any other SC reads SK.\n\t\t\t\t\tif (at(n + 2) === \"H\") {\n\t\t\t\t\t\t// Dutch e.g. \"school\", \"schooner\".\n\t\t\t\t\t\tif (stringAt(n + 3, 2, [\"OO\", \"ER\", \"EN\", \"UY\", \"ED\", \"EM\"])) {\n\t\t\t\t\t\t\tif (stringAt(n + 3, 2, [\"ER\", \"EN\"])) add(\"X\", \"SK\");\n\t\t\t\t\t\t\telse add(\"SK\");\n\t\t\t\t\t\t} else if (n === 0 && !isVowel(at(3)) && at(3) !== \"W\") {\n\t\t\t\t\t\t\tadd(\"X\", \"S\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tadd(\"X\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tn += 3;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (stringAt(n + 2, 1, [\"I\", \"E\", \"Y\"])) {\n\t\t\t\t\t\tadd(\"S\");\n\t\t\t\t\t\tn += 3;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tadd(\"SK\");\n\t\t\t\t\tn += 3;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// French final \"-ais/-ois\".\n\t\t\t\tif (n === last && stringAt(n - 2, 2, [\"AI\", \"OI\"])) {\n\t\t\t\t\tadd(\"\", \"S\");\n\t\t\t\t} else {\n\t\t\t\t\tadd(\"S\");\n\t\t\t\t}\n\t\t\t\tn += stringAt(n + 1, 1, [\"S\", \"Z\"]) ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"T\":\n\t\t\t\tif (stringAt(n, 4, [\"TION\"])) {\n\t\t\t\t\tadd(\"X\");\n\t\t\t\t\tn += 3;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n, 3, [\"TIA\", \"TCH\"])) {\n\t\t\t\t\tadd(\"X\");\n\t\t\t\t\tn += 3;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n, 2, [\"TH\"]) || stringAt(n, 3, [\"TTH\"])) {\n\t\t\t\t\t// \"thomas\", \"thames\", or Germanic -> hard T.\n\t\t\t\t\tif (\n\t\t\t\t\t\tstringAt(n + 2, 2, [\"OM\", \"AM\"]) ||\n\t\t\t\t\t\tstringAt(0, 4, [\"VAN \", \"VON \"]) ||\n\t\t\t\t\t\tstringAt(0, 3, [\"SCH\"])\n\t\t\t\t\t) {\n\t\t\t\t\t\tadd(\"T\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tadd(\"0\", \"T\");\n\t\t\t\t\t}\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tadd(\"T\");\n\t\t\t\tn += stringAt(n + 1, 1, [\"T\", \"D\"]) ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"V\":\n\t\t\t\tadd(\"F\");\n\t\t\t\tn += at(n + 1) === \"V\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"W\":\n\t\t\t\t// \"wr\" -> R.\n\t\t\t\tif (stringAt(n, 2, [\"WR\"])) {\n\t\t\t\t\tadd(\"R\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (n === 0 && (isVowel(at(n + 1)) || stringAt(n, 2, [\"WH\"]))) {\n\t\t\t\t\t// \"Wasserman\" ~ \"Vasserman\"; \"Uomo\" ~ \"Womo\".\n\t\t\t\t\tif (isVowel(at(n + 1))) add(\"A\", \"F\");\n\t\t\t\t\telse add(\"A\");\n\t\t\t\t}\n\t\t\t\t// \"Arnow\" ~ \"Arnoff\"; Polish/Slavic \"-owski\".\n\t\t\t\tif (\n\t\t\t\t\t(n === last && isVowel(at(n - 1))) ||\n\t\t\t\t\tstringAt(n - 1, 5, [\"EWSKI\", \"EWSKY\", \"OWSKI\", \"OWSKY\"]) ||\n\t\t\t\t\tstringAt(0, 3, [\"SCH\"])\n\t\t\t\t) {\n\t\t\t\t\tadd(\"\", \"F\");\n\t\t\t\t\tn += 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Polish e.g. \"filipowicz\".\n\t\t\t\tif (stringAt(n, 4, [\"WICZ\", \"WITZ\"])) {\n\t\t\t\t\tadd(\"TS\", \"FX\");\n\t\t\t\t\tn += 4;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tn += 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"X\":\n\t\t\t\t// French final \"-eaux/-aux\" is silent.\n\t\t\t\tif (\n\t\t\t\t\t!(n === last && (stringAt(n - 3, 3, [\"IAU\", \"EAU\"]) || stringAt(n - 2, 2, [\"AU\", \"OU\"])))\n\t\t\t\t) {\n\t\t\t\t\tadd(\"KS\");\n\t\t\t\t}\n\t\t\t\tn += stringAt(n + 1, 1, [\"C\", \"X\"]) ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"Z\":\n\t\t\t\t// Chinese pinyin \"zhao\".\n\t\t\t\tif (at(n + 1) === \"H\") {\n\t\t\t\t\tadd(\"J\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n + 1, 2, [\"ZO\", \"ZI\", \"ZA\"]) || (slavo && n > 0 && at(n - 1) !== \"T\")) {\n\t\t\t\t\tadd(\"S\", \"TS\");\n\t\t\t\t} else {\n\t\t\t\t\tadd(\"S\");\n\t\t\t\t}\n\t\t\t\tn += at(n + 1) === \"Z\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tn += 1;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn [primary.slice(0, 4), secondary.slice(0, 4)];\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "48794DFF0F1B895264756E2164756E21",
9
+ "names": []
10
+ }
@@ -3,7 +3,7 @@ import {
3
3
  normalizeApostrophes2,
4
4
  lexiconKey2,
5
5
  Lexicon2
6
- } from "./index-0qptxnwh.js";
6
+ } from "./index-7vvt5hhy.js";
7
7
  import {
8
8
  canonicalTeamName2,
9
9
  isTeamPrint2
@@ -1058,4 +1058,4 @@ function personNameFromIcao2(icao, print) {
1058
1058
  export { NAME_REFUSED2, stripEveryAside2, stripTrailingCredentials2, scrubNameDetail2, scrubName2, foldNameKey2, nameFold2, PLATFORM_PLACEHOLDERS2, NAME_PLACEHOLDERS2, isPlaceholderPrint2, isNoNamePrint2, COMPOUND_SURNAMES2, isCompoundSurname2, spaceAfterComma2, isNameSuffix, tokenize, inferNameOrder2, commaReading2, lexiconNameOrder, resolveNameOrder2, splitPersonName2, classifyCell2, capitalise2, nameCase2, SURNAME_SEPARATOR2, GIVEN_SEPARATOR2, titleCaseNamePart2, spellingLookup2, parsePersonName2, formatPersonDisplay2, personDisplayName2, NAME_TRADITIONS2, traditionFromIndex2, isIcaoName2, levelOf2, givenKeyAbbreviates2, givenAbbreviates2, PersonName2, DEFAULT_PERSON_NAME_CAPACITY2, traditionLookupOf2, createPersonNameFactory2, createCachingPersonNameFactory2, defaultPersonNameFactory2, personName2, personNameFromIcao2 };
1059
1059
 
1060
1060
  //# debugId=49F5F13DC88ECCC664756E2164756E21
1061
- //# sourceMappingURL=index-fzzq5txh.js.map
1061
+ //# sourceMappingURL=index-khxa4qjy.js.map
@@ -3,7 +3,7 @@ import {
3
3
  isAmbiguous2,
4
4
  isPlace2,
5
5
  isTradename2
6
- } from "./index-0qptxnwh.js";
6
+ } from "./index-7vvt5hhy.js";
7
7
 
8
8
  // src/lexicon/place.ts
9
9
  var JOINING_COMMA = /(?<=[^\s,]),(?=[^\s,])/g;
@@ -24,4 +24,4 @@ function isPlacePhrase(phrase, getFlags) {
24
24
  export { splitWords, FIELD_END, isPlaceWordFlags, isPlacePhrase };
25
25
 
26
26
  //# debugId=A9815F8EF12D8D4964756E2164756E21
27
- //# sourceMappingURL=index-2fsdvhaf.js.map
27
+ //# sourceMappingURL=index-kw6gbrnq.js.map
@@ -6,7 +6,7 @@ import {
6
6
  isPlace2,
7
7
  isTradename2,
8
8
  isMultiWord2
9
- } from "./index-0qptxnwh.js";
9
+ } from "./index-7vvt5hhy.js";
10
10
  // src/measure/classifier-eval.ts
11
11
  function prng(seed) {
12
12
  let a = seed >>> 0;
@@ -88,4 +88,4 @@ function evaluateClassifier2(classifier, set, examples = 10) {
88
88
  export { composeEvalSet2, evaluateClassifier2 };
89
89
 
90
90
  //# debugId=88988FDC2AE4309964756E2164756E21
91
- //# sourceMappingURL=index-d4wr471g.js.map
91
+ //# sourceMappingURL=index-pncn9y2r.js.map
@@ -0,0 +1,3 @@
1
+
2
+ //# debugId=E7675F777D5D5F4364756E2164756E21
3
+ //# sourceMappingURL=index-qsznkk4s.js.map
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "E7675F777D5D5F4364756E2164756E21",
8
+ "names": []
9
+ }
@@ -2,12 +2,12 @@ import {
2
2
  lexiconKey2,
3
3
  lookupKey2,
4
4
  Lexicon2
5
- } from "./index-0qptxnwh.js";
5
+ } from "./index-7vvt5hhy.js";
6
6
  import {
7
7
  splitWords,
8
8
  FIELD_END,
9
9
  isPlacePhrase
10
- } from "./index-2fsdvhaf.js";
10
+ } from "./index-kw6gbrnq.js";
11
11
  import {
12
12
  TEAM_DESIGNATION_WORDS2,
13
13
  partitionTeamSuffix2,
@@ -2798,4 +2798,4 @@ function phraseClassifier2(names = Lexicon2.default(), options = {}) {
2798
2798
  export { CONNECTORS2, SCHOOL_KEYWORDS2, isStopword2, createSegmenter2, createClassifier2, phraseClassifier2 };
2799
2799
 
2800
2800
  //# debugId=6A3E8AB61D184D7064756E2164756E21
2801
- //# sourceMappingURL=index-852w8w1s.js.map
2801
+ //# sourceMappingURL=index-r5fp3znj.js.map
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  lookupKey2,
3
3
  Lexicon2
4
- } from "./index-0qptxnwh.js";
4
+ } from "./index-7vvt5hhy.js";
5
5
  import {
6
6
  lexiconNameOrder,
7
7
  defaultPersonNameFactory2
8
- } from "./index-fzzq5txh.js";
8
+ } from "./index-khxa4qjy.js";
9
9
  import {
10
10
  isNameParticle2
11
11
  } from "./index-23rzmwe2.js";
@@ -134,4 +134,4 @@ function createNameCensus2(options = {}) {
134
134
  export { createNameCensus2 };
135
135
 
136
136
  //# debugId=42B6EBFD51EC241764756E2164756E21
137
- //# sourceMappingURL=index-0vg56t5v.js.map
137
+ //# sourceMappingURL=index-yq8hsd1f.js.map
@@ -0,0 +1,11 @@
1
+ import {
2
+ phraseClassifier2
3
+ } from "./index-r5fp3znj.js";
4
+ import"./index-kw6gbrnq.js";
5
+ import"./index-7vvt5hhy.js";
6
+ export {
7
+ phraseClassifier2 as phraseClassifier
8
+ };
9
+
10
+ //# debugId=BD8F5B3E6DE1DCF664756E2164756E21
11
+ //# sourceMappingURL=phrase-672g18kw.js.map
@@ -6,9 +6,9 @@ import {
6
6
  createSegmenter2,
7
7
  createClassifier2,
8
8
  phraseClassifier2
9
- } from "../chunks/index-852w8w1s.js";
10
- import"../chunks/index-2fsdvhaf.js";
11
- import"../chunks/index-0qptxnwh.js";
9
+ } from "../chunks/index-r5fp3znj.js";
10
+ import"../chunks/index-kw6gbrnq.js";
11
+ import"../chunks/index-7vvt5hhy.js";
12
12
  export {
13
13
  CONNECTORS2 as CONNECTORS,
14
14
  SCHOOL_KEYWORDS2 as SCHOOL_KEYWORDS,
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
- import"../chunks/index-0qptxnwh.js";
2
+ import"../chunks/index-7vvt5hhy.js";
3
3
  import {
4
4
  createNameCensus2
5
- } from "../chunks/index-0vg56t5v.js";
6
- import"../chunks/index-fzzq5txh.js";
5
+ } from "../chunks/index-yq8hsd1f.js";
6
+ import"../chunks/index-khxa4qjy.js";
7
7
  import { createRequire } from "node:module";
8
8
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
9
9
 
@@ -20,7 +20,7 @@ async function main(argv) {
20
20
  const limit = Number(value("limit") ?? 25);
21
21
  const field = value("field") ?? "name";
22
22
  const orderField = value("order-field") ?? "order";
23
- const classifier = flag("classify") ? (await import("../chunks/phrase-dczgr4vs.js")).phraseClassifier() : undefined;
23
+ const classifier = flag("classify") ? (await import("../chunks/phrase-672g18kw.js")).phraseClassifier() : undefined;
24
24
  const census = createNameCensus2(classifier === undefined ? {} : { classifier });
25
25
  for await (const line of createInterface({
26
26
  input: process.stdin,
package/dist/index.js CHANGED
@@ -29,7 +29,7 @@ import {
29
29
  NAMES_TXT2,
30
30
  parseEntries2,
31
31
  Lexicon2
32
- } from "./chunks/index-0qptxnwh.js";
32
+ } from "./chunks/index-7vvt5hhy.js";
33
33
  import {
34
34
  CONNECTORS2,
35
35
  SCHOOL_KEYWORDS2,
@@ -37,7 +37,7 @@ import {
37
37
  createSegmenter2,
38
38
  createClassifier2,
39
39
  phraseClassifier2
40
- } from "./chunks/index-852w8w1s.js";
40
+ } from "./chunks/index-r5fp3znj.js";
41
41
  import"./chunks/index-jwx1mm4k.js";
42
42
  import {
43
43
  repairMojibake2,
@@ -73,20 +73,31 @@ import {
73
73
  infeasibleClass2,
74
74
  isListJoiner2,
75
75
  personList2,
76
+ surnameBlock2,
77
+ initialsBlock2,
78
+ metaphoneBlocks2,
79
+ NAME_LEVEL_COLUMNS2,
80
+ NAME_COLUMNS2,
81
+ nameColumns2,
76
82
  NAME_FORMATS2,
77
83
  nameFormatOrder2,
78
84
  ORDER_READINGS2,
79
85
  readNameCell2,
80
86
  DEFAULT_NAME_FORMAT_THRESHOLD2,
81
87
  deriveNameFormat2
82
- } from "./chunks/index-b2k3er3h.js";
88
+ } from "./chunks/index-7sppf1vh.js";
89
+ import"./chunks/index-qsznkk4s.js";
83
90
  import {
84
91
  composeEvalSet2,
85
92
  evaluateClassifier2
86
- } from "./chunks/index-d4wr471g.js";
93
+ } from "./chunks/index-pncn9y2r.js";
94
+ import"./chunks/index-kw6gbrnq.js";
95
+ import {
96
+ doubleMetaphone2
97
+ } from "./chunks/index-ebebeamh.js";
87
98
  import {
88
99
  createNameCensus2
89
- } from "./chunks/index-0vg56t5v.js";
100
+ } from "./chunks/index-yq8hsd1f.js";
90
101
  import {
91
102
  NAME_REFUSED2,
92
103
  stripEveryAside2,
@@ -130,8 +141,7 @@ import {
130
141
  defaultPersonNameFactory2,
131
142
  personName2,
132
143
  personNameFromIcao2
133
- } from "./chunks/index-fzzq5txh.js";
134
- import"./chunks/index-2fsdvhaf.js";
144
+ } from "./chunks/index-khxa4qjy.js";
135
145
  import {
136
146
  TEAM_WORD2,
137
147
  TEAM_DESIGNATION_WORDS2,
@@ -166,7 +176,9 @@ export {
166
176
  MARK_FLAGS2 as MARK_FLAGS,
167
177
  MAX_READINGS2 as MAX_READINGS,
168
178
  NAMES_TXT2 as NAMES_TXT,
179
+ NAME_COLUMNS2 as NAME_COLUMNS,
169
180
  NAME_FORMATS2 as NAME_FORMATS,
181
+ NAME_LEVEL_COLUMNS2 as NAME_LEVEL_COLUMNS,
170
182
  NAME_PLACEHOLDERS2 as NAME_PLACEHOLDERS,
171
183
  NAME_REFUSED2 as NAME_REFUSED,
172
184
  NAME_TRADITIONS2 as NAME_TRADITIONS,
@@ -205,6 +217,7 @@ export {
205
217
  defaultPersonNameFactory2 as defaultPersonNameFactory,
206
218
  deriveNameFormat2 as deriveNameFormat,
207
219
  displaySpellings2 as displaySpellings,
220
+ doubleMetaphone2 as doubleMetaphone,
208
221
  editDistance2 as editDistance,
209
222
  evaluateClassifier2 as evaluateClassifier,
210
223
  foldNameKey2 as foldNameKey,
@@ -213,6 +226,7 @@ export {
213
226
  givenKeyAbbreviates2 as givenKeyAbbreviates,
214
227
  infeasibleClass2 as infeasibleClass,
215
228
  inferNameOrder2 as inferNameOrder,
229
+ initialsBlock2 as initialsBlock,
216
230
  isAmbiguous2 as isAmbiguous,
217
231
  isAscii2 as isAscii,
218
232
  isCanonicalTeamName2 as isCanonicalTeamName,
@@ -242,9 +256,11 @@ export {
242
256
  lookupKey2 as lookupKey,
243
257
  meetReading2 as meetReading,
244
258
  meetReadings2 as meetReadings,
259
+ metaphoneBlocks2 as metaphoneBlocks,
245
260
  middleForm2 as middleForm,
246
261
  nameBlockKeys2 as nameBlockKeys,
247
262
  nameCase2 as nameCase,
263
+ nameColumns2 as nameColumns,
248
264
  nameCompare2 as nameCompare,
249
265
  nameFold2 as nameFold,
250
266
  nameFormatOrder2 as nameFormatOrder,
@@ -281,6 +297,7 @@ export {
281
297
  splitPersonName2 as splitPersonName,
282
298
  stripEveryAside2 as stripEveryAside,
283
299
  stripTrailingCredentials2 as stripTrailingCredentials,
300
+ surnameBlock2 as surnameBlock,
284
301
  surnameParts2 as surnameParts,
285
302
  teamLetter2 as teamLetter,
286
303
  teamRowDesignation2 as teamRowDesignation,
@@ -291,5 +308,5 @@ export {
291
308
  traditionOf2 as traditionOf
292
309
  };
293
310
 
294
- //# debugId=72383B5CF66A450E64756E2164756E21
311
+ //# debugId=168C2BEC179E7C6664756E2164756E21
295
312
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -4,6 +4,6 @@
4
4
  "sourcesContent": [
5
5
  ],
6
6
  "mappings": "",
7
- "debugId": "72383B5CF66A450E64756E2164756E21",
7
+ "debugId": "168C2BEC179E7C6664756E2164756E21",
8
8
  "names": []
9
9
  }
@@ -29,7 +29,7 @@ import {
29
29
  NAMES_TXT2,
30
30
  parseEntries2,
31
31
  Lexicon2
32
- } from "../chunks/index-0qptxnwh.js";
32
+ } from "../chunks/index-7vvt5hhy.js";
33
33
  export {
34
34
  APOSTROPHE_CHARS2 as APOSTROPHE_CHARS,
35
35
  CLASSIFICATION_FLAGS2 as CLASSIFICATION_FLAGS,
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  composeEvalSet2,
3
3
  evaluateClassifier2
4
- } from "../chunks/index-d4wr471g.js";
4
+ } from "../chunks/index-pncn9y2r.js";
5
5
  import {
6
6
  createNameCensus2
7
- } from "../chunks/index-0vg56t5v.js";
8
- import"../chunks/index-fzzq5txh.js";
9
- import"../chunks/index-0qptxnwh.js";
7
+ } from "../chunks/index-yq8hsd1f.js";
8
+ import"../chunks/index-khxa4qjy.js";
9
+ import"../chunks/index-7vvt5hhy.js";
10
10
  export {
11
11
  composeEvalSet2 as composeEvalSet,
12
12
  createNameCensus2 as createNameCensus,
@@ -32,13 +32,20 @@ import {
32
32
  infeasibleClass2,
33
33
  isListJoiner2,
34
34
  personList2,
35
+ surnameBlock2,
36
+ initialsBlock2,
37
+ metaphoneBlocks2,
38
+ NAME_LEVEL_COLUMNS2,
39
+ NAME_COLUMNS2,
40
+ nameColumns2,
35
41
  NAME_FORMATS2,
36
42
  nameFormatOrder2,
37
43
  ORDER_READINGS2,
38
44
  readNameCell2,
39
45
  DEFAULT_NAME_FORMAT_THRESHOLD2,
40
46
  deriveNameFormat2
41
- } from "../chunks/index-b2k3er3h.js";
47
+ } from "../chunks/index-7sppf1vh.js";
48
+ import"../chunks/index-kw6gbrnq.js";
42
49
  import {
43
50
  NAME_REFUSED2,
44
51
  stripEveryAside2,
@@ -82,8 +89,7 @@ import {
82
89
  defaultPersonNameFactory2,
83
90
  personName2,
84
91
  personNameFromIcao2
85
- } from "../chunks/index-fzzq5txh.js";
86
- import"../chunks/index-2fsdvhaf.js";
92
+ } from "../chunks/index-khxa4qjy.js";
87
93
  import {
88
94
  TEAM_WORD2,
89
95
  TEAM_DESIGNATION_WORDS2,
@@ -96,7 +102,7 @@ import {
96
102
  } from "../chunks/index-0phgwy52.js";
97
103
  import {
98
104
  lexiconKey2
99
- } from "../chunks/index-0qptxnwh.js";
105
+ } from "../chunks/index-7vvt5hhy.js";
100
106
  export {
101
107
  COMPOUND_SURNAMES2 as COMPOUND_SURNAMES,
102
108
  DEFAULT_NAME_FORMAT_THRESHOLD2 as DEFAULT_NAME_FORMAT_THRESHOLD,
@@ -104,7 +110,9 @@ export {
104
110
  GIVEN_SEPARATOR2 as GIVEN_SEPARATOR,
105
111
  INFEASIBLE_CLASSES2 as INFEASIBLE_CLASSES,
106
112
  MAX_READINGS2 as MAX_READINGS,
113
+ NAME_COLUMNS2 as NAME_COLUMNS,
107
114
  NAME_FORMATS2 as NAME_FORMATS,
115
+ NAME_LEVEL_COLUMNS2 as NAME_LEVEL_COLUMNS,
108
116
  NAME_PLACEHOLDERS2 as NAME_PLACEHOLDERS,
109
117
  NAME_REFUSED2 as NAME_REFUSED,
110
118
  NAME_TRADITIONS2 as NAME_TRADITIONS,
@@ -138,6 +146,7 @@ export {
138
146
  givenKeyAbbreviates2 as givenKeyAbbreviates,
139
147
  infeasibleClass2 as infeasibleClass,
140
148
  inferNameOrder2 as inferNameOrder,
149
+ initialsBlock2 as initialsBlock,
141
150
  isCanonicalTeamName2 as isCanonicalTeamName,
142
151
  isCompoundSurname2 as isCompoundSurname,
143
152
  isIcaoName2 as isIcaoName,
@@ -149,9 +158,11 @@ export {
149
158
  lexiconKey2 as lexiconKey,
150
159
  meetReading2 as meetReading,
151
160
  meetReadings2 as meetReadings,
161
+ metaphoneBlocks2 as metaphoneBlocks,
152
162
  middleForm2 as middleForm,
153
163
  nameBlockKeys2 as nameBlockKeys,
154
164
  nameCase2 as nameCase,
165
+ nameColumns2 as nameColumns,
155
166
  nameCompare2 as nameCompare,
156
167
  nameFold2 as nameFold,
157
168
  nameFormatOrder2 as nameFormatOrder,
@@ -182,6 +193,7 @@ export {
182
193
  splitPersonName2 as splitPersonName,
183
194
  stripEveryAside2 as stripEveryAside,
184
195
  stripTrailingCredentials2 as stripTrailingCredentials,
196
+ surnameBlock2 as surnameBlock,
185
197
  surnameParts2 as surnameParts,
186
198
  teamLetter2 as teamLetter,
187
199
  teamRowDesignation2 as teamRowDesignation,
@@ -190,5 +202,5 @@ export {
190
202
  traditionLookupOf2 as traditionLookupOf
191
203
  };
192
204
 
193
- //# debugId=E840BFF5527EE85364756E2164756E21
205
+ //# debugId=F6630C203D8EAD8B64756E2164756E21
194
206
  //# sourceMappingURL=index.js.map
@@ -4,6 +4,6 @@
4
4
  "sourcesContent": [
5
5
  ],
6
6
  "mappings": "",
7
- "debugId": "E840BFF5527EE85364756E2164756E21",
7
+ "debugId": "F6630C203D8EAD8B64756E2164756E21",
8
8
  "names": []
9
9
  }
@@ -0,0 +1,10 @@
1
+ import"../chunks/index-qsznkk4s.js";
2
+ import {
3
+ doubleMetaphone2
4
+ } from "../chunks/index-ebebeamh.js";
5
+ export {
6
+ doubleMetaphone2 as doubleMetaphone
7
+ };
8
+
9
+ //# debugId=A3D8AA14030D5FE264756E2164756E21
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "A3D8AA14030D5FE264756E2164756E21",
8
+ "names": []
9
+ }
@@ -7,10 +7,12 @@
7
7
  * @finbheara/names/particles the particle vocabulary
8
8
  * @finbheara/names/classifier person / school / location phrase classification
9
9
  * @finbheara/names/normalize PersonName, its factories, compare, compose, lists
10
+ * @finbheara/names/phonetic how a word sounds, as a key (Double Metaphone)
10
11
  * @finbheara/names/measure census a stream of names against all of the above
11
12
  */
12
13
  export * from "./lexicon/index.ts";
13
14
  export * from "./particles/index.ts";
14
15
  export * from "./classifier/index.ts";
15
16
  export * from "./normalize/index.ts";
17
+ export * from "./phonetic/index.ts";
16
18
  export * from "./measure/index.ts";
@@ -0,0 +1,53 @@
1
+ /**
2
+ * The three surname BLOCKING keys, in one place.
3
+ *
4
+ * A blocking key buckets names that are *worth comparing*; it decides nothing
5
+ * about identity. Each is derived from the halves of a parsed name, normally a
6
+ * `PersonName`'s `surnameKey()` and its first given name.
7
+ *
8
+ * | key | buckets on | asks |
9
+ * |---|---|---|
10
+ * | `surnameBlock` | the surname's A-Z letters | is the surname spelt alike? |
11
+ * | `metaphoneBlocks` | the surname's Double Metaphone codes | does the surname sound alike? |
12
+ * | `initialsBlock` | first given initial + surname initial | could these be one name at all? |
13
+ *
14
+ * They are not `surnameKey()`. That is the NN3 field, which keeps every letter and
15
+ * digit in every script; a block key keeps A-Z only, so a stray digit or an
16
+ * unfolded letter never splits a bucket and a key with no A-Z letter is no bucket.
17
+ *
18
+ * They are not `nameBlockKeys` (`./name-compose.ts`) either. That family keys each
19
+ * surname PART with the first initial, so a compound surname meets either of its
20
+ * halves, and it is the candidate generator for `composeNames`. These key the WHOLE
21
+ * surname key, by spelling, by sound or by initials, and know nothing of parts.
22
+ *
23
+ * ## One implementation, every caller
24
+ *
25
+ * A stored key that re-implemented one of these would be a second copy that can
26
+ * silently disagree with the first, and the disagreement is invisible: a self-join
27
+ * on the two simply returns different pairs. A store that bakes these keys and a
28
+ * reader that blocks live rows ask the same functions.
29
+ *
30
+ * ## An EMPTY key means "not blockable", never "matches other empty keys"
31
+ *
32
+ * Every function here returns `null` (or `[]`) for a blank surname, a name with no
33
+ * A-Z letter, or a surname Double Metaphone declines to encode. A caller skips
34
+ * those rather than pooling them into one enormous `""` bucket, and `null` carries
35
+ * that through SQL for free: no equality join matches NULL.
36
+ *
37
+ * Pure and I/O-free; `../phonetic` is the only import.
38
+ */
39
+ /** The surname's A-Z letters, or null when there are none. */
40
+ export declare function surnameBlock(surname: string): string | null;
41
+ /**
42
+ * First given initial + surname initial, the coarsest of the three. Null unless
43
+ * BOTH letters exist: a name missing either is skipped, not filed under a
44
+ * one-letter key.
45
+ */
46
+ export declare function initialsBlock(given: string, surname: string): string | null;
47
+ /**
48
+ * The surname's Double Metaphone codes: primary first, then the secondary WHEN
49
+ * IT DIFFERS. A name is filed under every code returned here, which is the
50
+ * standard double-filing recall trick (it lets an `X…`-secondary spelling meet an
51
+ * `S…`-primary one). Empty when the surname yields no primary code.
52
+ */
53
+ export declare function metaphoneBlocks(surname: string): string[];
@@ -24,4 +24,6 @@ export { type NameReading, type NameRelation, type NameRelationReason, comparePo
24
24
  export * from "./name-compose.ts";
25
25
  export { INFEASIBLE_CLASSES, type InfeasibleClass, compoundGiven, editDistance, infeasibleClass, middleForm, nearSpelling, } from "./name-infeasible.ts";
26
26
  export { type ListedPerson, isListJoiner, personList } from "./person-list.ts";
27
+ export { initialsBlock, metaphoneBlocks, surnameBlock } from "./block-keys.ts";
28
+ export { NAME_COLUMNS, NAME_LEVEL_COLUMNS, type NameColumn, type NameColumns, nameColumns, } from "./name-columns.ts";
27
29
  export { type CellSegmentation, type CellSegmenter, type CommaClass, DEFAULT_NAME_FORMAT_THRESHOLD, NAME_FORMATS, type NameCellOptions, type NameCellReading, type NameFormat, type NameFormatEvidence, type NameFormatOptions, type NameFormatResult, type NameFormatVerdict, ORDER_READINGS, type OrderReading, type PrintedNameCell, type SkipReason, deriveNameFormat, nameFormatOrder, readNameCell, } from "./name-format.ts";
@@ -0,0 +1,51 @@
1
+ /**
2
+ * A `PersonName` as database columns: the keys a store indexes, encoded once.
3
+ *
4
+ * A store that holds many prints and answers "which rows hold this name?" wants
5
+ * the parse's keys as plain columns, so the question is an equality lookup on an
6
+ * index rather than a parse per row. `nameColumns` is the one encoder of those
7
+ * keys, so a store that bakes them and a reader that parses a probe live cannot
8
+ * disagree about a key. It depends on no database: a row is a plain object of
9
+ * strings and nulls, and `NAME_COLUMNS` is its declared column order.
10
+ *
11
+ * | column | holds | answers |
12
+ * |---|---|---|
13
+ * | `nn0`-`nn4` | the transitive levels (`PersonName.nn0`…`nn4`) | a `NameMap`/`NameSet` lookup at that level |
14
+ * | `surname_key` | `surnameKey()` | do two prints agree on the surname? |
15
+ * | `given_key` | `givenName()` | do two prints agree on the given names? |
16
+ * | `blk_surname` | `surnameBlock(surnameKey())` | is the surname spelt alike? |
17
+ * | `blk_initials` | `initialsBlock(givenFields()[0], surnameKey())` | could these be one name at all? |
18
+ * | `blk_metaphone` | the first of `metaphoneBlocks(surnameKey())` | does the surname sound alike? |
19
+ * | `blk_metaphone_alt` | the second, when it differs | the same, under the alternate code |
20
+ *
21
+ * ## A level lookup is one equality
22
+ *
23
+ * `createNameMap(dop)` files a person under `name[dop]` and never finds a print
24
+ * that names no person. The level columns are exactly that slot: the level for a
25
+ * person, `null` otherwise. So `map.get(probe)` at level `dop` is
26
+ *
27
+ * SELECT … WHERE <dop> = nameColumns(probe)[dop]
28
+ *
29
+ * and a non-person probe carries `null`, which no equality matches, as the map
30
+ * answers `undefined` for it. NN5 is a distance and has no column, as it has no map.
31
+ *
32
+ * ## Null means "no key", never "an empty key"
33
+ *
34
+ * Every column is `null` where its key is empty or does not apply: a refused or
35
+ * empty print, a name with no given name, a surname with no A-Z letter. Two rows
36
+ * that both lack a key are not thereby alike, and `null` carries that through SQL
37
+ * for free. The metaphone pair is two columns because a name is filed under both
38
+ * codes; a row's code set is `{blk_metaphone} ∪ {blk_metaphone_alt}`.
39
+ */
40
+ import type { PersonName } from "./person-name.ts";
41
+ /** The level columns, one per transitive level, named as the level is. */
42
+ export declare const NAME_LEVEL_COLUMNS: readonly ["nn0", "nn1", "nn2", "nn3", "nn4"];
43
+ /** Every column `nameColumns` fills, in declared order. */
44
+ export declare const NAME_COLUMNS: readonly ["nn0", "nn1", "nn2", "nn3", "nn4", "surname_key", "given_key", "blk_surname", "blk_initials", "blk_metaphone", "blk_metaphone_alt"];
45
+ export type NameColumn = (typeof NAME_COLUMNS)[number];
46
+ /** One name's row: every column a string or `null`. */
47
+ export type NameColumns = {
48
+ readonly [C in NameColumn]: string | null;
49
+ };
50
+ /** The keys of one parsed name, as columns. See the module header for each. */
51
+ export declare function nameColumns(name: PersonName): NameColumns;