Repository navigation
Description
Parser.suggest reads a surname only from its romanized Chinese, Korean and Vietnamese table (ROMANIZED_SURNAMES in nameparser/config/_order_names.py, 341 entries). Every other list is decided by the given-name table, or not at all. decisions/group-suggestion's 2026-11-10 TABLES entry marks the surname lists "proposed, for review" for the first version, and its DECLINED entry does not decline a wider surname table; it was not considered.
Measured on master 2b39f23, 2026-11-12, Parser().suggest(...):
| List, written family first | Suggested | Votes |
|---|---|---|
Smith John, Jones David, Brown James, Taylor Robert, Clark Thomas, Wilson Paul |
nothing | no evidence |
García López Ana, Martínez Ruiz José, Fernández Díaz Luis |
FAMILY_FIRST |
3 for |
Müller Hans, Schmidt Anna, Schneider Peter, Fischer Julia |
FAMILY_FIRST |
4 for |
Rossi Marco, Russo Giulia, Ferrari Luca, Esposito Sara |
FAMILY_FIRST |
3 for, 1 no evidence |
The Spanish, German and Italian lists are decided by their given names. The English list is not: its given names are also surnames, so the given-name table's family-share filter drops them (#1357), and no table knows Smith. Written given first, the same English list also gets no evidence, so a FAMILY_FIRST base would not be corrected either.
What a surname table would add. A vote from the other end of the name: a common surname at one end and not at the other says the family name is written there. It reaches the lists #1357 describes without loosening the given-name filter, and it would decide short lists sooner. decisions/group-suggestion's table (2026-11-11) has a family-first Spanish list read right in 27% of groups of two and 84% of groups of five, all from given names.
The obvious recipe does not work as it stands. The given-name table keeps a name ORCID holders wrote in the family box at most 5% of the time. The mirror, a family word written in the given box at most 5% of the time, measured over orcid-researchers/raw.jsonl (1,831,533 records, words folded with _suggest.fold, at least 100 family-box uses):
- 1,776 family words reach 100 uses; 578 have a given share of 5% or less; 565 of those are new to both tables.
- The 25 commonest kept are all Spanish:
rodriguez,gonzalez,garcia,lopez,perez,martinez,hernandez,sanchez, …
| word | family box | given box | given share | kept at 5% |
|---|---|---|---|---|
garcia |
6,818 | 305 | 4.3% | yes |
lopez |
6,016 | 272 | 4.3% | yes |
fernandez |
3,108 | 123 | 3.8% | yes |
brown |
396 | 28 | 6.6% | no |
rossi |
199 | 22 | 10.0% | no |
silva |
5,281 | 628 | 10.6% | no |
smith |
715 | 92 | 11.4% | no |
santos |
3,358 | 453 | 11.9% | no |
jones |
364 | 69 | 15.9% | no |
khan |
2,607 | 552 | 17.5% | no |
taylor |
319 | 115 | 26.5% | no |
singh |
1,304 | 494 | 27.5% | no |
martin |
1,048 | 4,311 | 80.4% | no |
thomas |
546 | 2,918 | 84.2% | no |
Two things show in it. ORCID's sample holds about ten times as many Garcia records as Smith, so a use floor favours Spanish. And a given share of 11% for Smith is not people named Smith: it is bylines and swapped boxes (Smith J), which the filter cannot tell from a real given name. The filter does its job on martin, thomas and james.
Another source for English. The US Census 2010 surname list is already cached for tools/name_usage.py (162,253 surnames and a row for all others). Of its 1,000 commonest, 36 are already in the romanized table (lee, nguyen, kim, long, tran, …) and 12 are in the given-name table (alexander, daniel, patrick, anthony, christian, michael, …). Its 100 commonest cover 17.3% of the people counted and its 1,000 commonest 41.0% (the file's own cumulative column), which is far from the closed sets the East Asian table rests on.
Options:
- (A) A derived surname table, one source pair per language, the mirror of the given-name table: a country's commonest surnames from a census-style list (US Census 2010; Spain's INE surnames, also cached for
name_usage.py), less any word a given-name source for the same country ranks as a common given name, less any word in the given-name table.- When: a name has a listed surname at one end and not at the other.
- Then: it votes that the family name is written at that end, as a romanized surname does.
- Because: the surname is evidence in the name itself, and it is the only evidence in a list whose given names are also surnames.
- Except: a word in both tables votes in neither. A one-letter word and a two- or three-letter capitals word ending a name stay out, as today.
- Accepted: to be measured. A surname that is a given name in another language (
Santiago,Cruz,Alonso;Kelly,Jordan,Morgan) votes wrong where it is the given name.
- (B) The ORCID mirror alone, with the 5% share. Cheap, no new source, but it adds Spanish surnames to lists that already decide and leaves
Smithout. - (C) Raise the given-name share instead (Should the group suggester know
John,DavidandJamesas given names? A list ofSmith John,Jones Davidgets no suggestion #1357's option A) and add no surname table. It reachesSmith JohnthroughJohn. - (D) Leave it: a caller with such a list declares the order.
What a measurement needs to show, with tools/differential/suggest_measure.py --base:
- Every same-order row at 95% or more at every size. A surname table can only add votes, so the risk is a given-first list moved to family-first by surnames that are also given names.
- The rows written against their base at 2 to 5 names, where the table should help, for the British, US, Spanish, German and Italian populations.
- Lists outside the table's languages (Indian, Nigerian, Turkish), where a listed surname may be a given name.
- (A) against (C), since they answer the same lists. The sources must not be the populations the tool tests on (PatentsView and PSC), as the given-name table's are not.
Open:
- (A), (B), (C) or (D), or (A) and (C) together?
- Which languages first? English is the measured gap; Spanish, German and Italian lists already decide from three or four names.
- Licences: the Census list is a US government work; INE's terms and whether a table derived from it may be committed need checking against the project's source notes before anything ships. ORCID's public data file is CC0 and already filters the given-name table.
- Size: the given-name table holds 4,262 names. How many surnames per country are worth shipping, given that 1,000 US surnames cover 41%?
- Should the table be private to the suggester, as the two existing ones are (no parse reads them, so no snapshot moves)?
🤖 Generated with Claude Code
Activity