Repository navigation
Open
1 / 61 of 6 issues completedOpen
1 / 61 of 6 issues completed
Copy link
Labels
designvocabularyPer-word vocabulary model and language packsPer-word vocabulary model and language packs
Milestone
Description
Part of #747. Mostly independent of phases 2 and 3.
Order versus shape (decided): a language supplies only a default order. The shapes each order accepts (where titles, suffixes, particles and commas sit) belong to that order, in the core.
The work:
- An inventory of the shapes each order accepts, extending
tools/differential/shapes.py(Shoulddocs/document input shapes for the family-first name orders, and does a trailing particle belong in the notation? #469's inventory). - The rules a pack can choose and parameterize in its TOML (
[rules], ending rules such as-ovich), with implementations in the core. - The output model: align with CLDR's fields, add
surname2, a patronymic or neutral parent-names field (a matronymic fits it too),familyallowed to be empty, an alternate or reading view, and whatmiddlemeans.
Related questions are linked here as sub-issues.
Status (2026-11-03). Shipped in 3.0's cycle:
- 4a,
Token.reading: Add Token.reading, the reading the parse took for each word (3.0, 4a) #942, withReading.languagesin Fill Reading.languages from the reading index (3.0, 4a's follow-up) #944; - 4b, the
generationandcredentialsviews: Add generation and credentials views over suffix (3.0, 4b) #947; - 4c,
patronymic: Add ParsedName.patronymic, the words naming the bearer's parent (3.0, 4c) #948; - 4d,
surname2: Add ParsedName.surname2, the second of two family names (3.0, 4d) #951; - 4e, render order: Render a name in the order it was read in, keeping its separators (4e, #754) #943;
- 4f,
[rules]in a pack's policy patch: Compile a language file's [rules] into its pack's policy patch (3.0, 4f) #953; - 4g,
two_given_names(rules/O7): Add Policy.two_given_names, the compound given name as a rule kind (3.0, 4g) #954; - 4h, the shape inventory per order: List the shape inventory per name order (3.0, 4h) #974;
- the O6 given-name veto: Leave a listed given name out of two_family_names' family (rules/O6, #959) #961;
- 4i, the Lexicon surface, configured by reading: design Design: the 3.0 Lexicon surface, configuring by reading (#754, 4i decided) #988, then Read the vocabulary sets through Lexicon._sets (#754, 4i-a) #989 (the pipeline reads
Lexicon._sets), Configure a Lexicon by reading; its set fields are internal (#754, 4i-b) #991 (add/removeby reading), Record the choice of languages on the Lexicon (#754, 4i-c) #992 (the choice of languages recorded on theLexicon) and Reading.languages names the files on in the parse's own Lexicon (#754, 4i-d) #997 (Reading.languagesnames the files on in the parse's own lexicon). Simplify the 4i choice compile and reading-files code (#754) #1001 simplified the code. Deprecate the 2.x Lexicon translation: a 2.x pickle load warns (#754) #1002 deprecated the 2.x translation, and 3.1: delete the 2.xLexicontranslation — refuse 2.x pickles, shorten the old-spelling errors #1003 deletes it in 3.1.Lexicon.words(kind=...)and the whole-kindremove(kind=..., every=True): Add Lexicon.words(kind=...) and remove(kind=...) with no words (#1007) #1009. The vocabulary modules innameparser.config(Shouldfrom nameparser.config.titles import TITLESstill work in 3.0, now thatLexicon.readings_of()answers what a word is? #1007) andconfig.regexes(Removenameparser.config.regexesin 3.0? The parser has not readREGEXESsince 2.0 #1008) are removed by Remove the vocabulary modules in nameparser.config (#1007) #1012 and Remove nameparser.config.regexes, which the parser has not read since 2.0 (#1008) #1010; 2.8.1 warned of both (2.8.1: deprecation warnings for the Lexicon set fields and the config modules 3.0 removes #1011).
Still open:
- which particle phrases complete a given name (Should a two-word given name like
María JoséorMin Hofillgiven, instead of given + middle? #704); - render patterns: the shape of a pack's CLDR display and sorting patterns is agreed, but not yet how a call reaches one (decisions/vocabulary-model's 2026-10-28 render-patterns entry). The RFC says 3.0 if time allows, 3.x otherwise.
Metadata
Metadata
Assignees
Labels
designvocabularyPer-word vocabulary model and language packsPer-word vocabulary model and language packs
Activity
suffixsplit intogenerationandcredentials? (Smith, Jr., PhD) #326María JoséorMin Hofillgiven, instead of given + middle? #704Ramona Navarro vda. de Villegaskeepvda. de Villegasin the family name? #565von/van denopening the name start the family?van den Berg Corneliagives familyvan#670DUPONT Jeangives givenDUPONT#659Standing block for decisions/vocabulary-model (#762) (#800)
derek73 commentedon Oct 23, 2026
A ranking for the surname-span rule, from an unselected population
The RFC's surname-span measurement (315 of 390 given-first double surnames disagreeing, GND and Wikidata) "was taken over corpora built to hold second surnames, so it shows that the gap exists, not how it ranks against the others". The local corpus
psc-individuals(#849) can rank it. It holds Companies House's people with significant control, 1 in 8 of the snapshot dated 2026-10-22: 1,040,708 filed names, nobody chose them, and each filer typed the forename, middle name and surname into separate boxes.Size. 29,023 names (2.8%) have a two-word filed surname. 22,168 of them read with the surname's first word as a middle name (
Ana García López→ middleGarcía, familyLópez). It is the largest disagreement shape in the score.Who. Only 28% of the 22,168 (6,225) are Spanish, Portuguese or Latin American nationals. The rest are not:
What it means for this phase.
espack would help: in Spanish, Mexican and Colombian names, nearly two in three names are misread. That is the strongest case in the data for anespack's surname-span rule.es/ptpack would be chosen for. Nationality is not a naming convention, so the British, Indian, Moroccan and Sri Lankan counts mix several conventions (South Asian two-word surnames are Tariq Abdul Aziz: should a two-word surname like Abdul Aziz stay whole after the given name? #694's question). Even so, they say the shape is not only Iberian.Recompute.
uv run python tools/differential/local_agreement.py psc-individualsreports the shape asmiddle 0->1, family 2->1andmiddle 1->2, family 2->1. The per-nationality rows count the records inagreement.jsonlwhose filed surname has two words and whose parsed family is its second word. The names stay in the cache; this comment prints counts only.Pin two_family_names' family-first guard on a hand-built state (#754)
Add a Policy switch for names with two family names (#754) (#875)
Fix the review findings on two_family_names (#875) (#878)
35 remaining items
Lay a pack's masks over the choice's, name the pack a join fails on, …
Cover the base-chosen layer and a restored mask; drop an unreachable …
Pin the accepted limit: a caller's mask written as the shipped value …
Offer a word's name reading before its agnomen in a 2.x refusal; cove…
Record the choice of languages on the Lexicon (#754, 4i-c) (#992)
Mark 4a's follow-up superseded in part; recount de's moves (#754, 4i-…
Say when a caller's add names a file; pin an add under a choice (#754,…
Reading.languages names the files on in the parse's own Lexicon (#754,…
Point the 3.1 deletion at #1003 (#754)
Simplify the 4i choice compile and reading-files code (#754) (#1001)
Deprecate the 2.x Lexicon translation: a 2.x pickle load warns (#754)
Point the 3.1 deletion at #1003 (#754)
Deprecate the 2.x Lexicon translation: a 2.x pickle load warns (#754) (…
Review fixes for the family-first chain cut (#1024)
Cut a family-first particle chain where P1's fold cuts it under two_f…