Repository navigation
Description
The suggester's given-name table (COMMON_GIVEN_NAMES in nameparser/config/_order_names.py, written by tools/vocab/order_names.py) leaves out some of the commonest given names in English, French and Arabic, because its filter drops any name that ORCID holders wrote in the family box more than 5% of the time. decisions/group-suggestion lists this on its Open: line as an item of the closed tracking issue #1308 with "no issue yet". That line should be given this issue's link.
Measured on master 670b349, 2026-11-12:
>>> Parser().suggest(["Smith John", "Jones David", "Brown James", "Taylor Robert",
... "Clark Thomas", "Wilson Paul", "Evans George", "Walker Charles"])
name_order unchanged (GIVEN_FIRST) no evidence
| List | Suggested | Votes |
|---|---|---|
Smith John, Jones David, Brown James, Taylor Robert, Clark Thomas, Wilson Paul, Evans George, Walker Charles |
nothing | no evidence, 8 of 8 |
the same eight, given-first, on a FAMILY_FIRST base |
nothing | no evidence, 8 of 8 |
Smith Emily, Jones Olivia, Brown Sophie, Wilson Hannah, Taylor Rebecca, Clark Megan |
FAMILY_FIRST |
given-name 6 |
Smith John, Jones David, Brown James, Wilson Michael, Taylor Robert, Clark William |
FAMILY_FIRST |
given-name 2 (Michael, William), 4 no evidence |
So the list a caller would try first decides on two votes of six, or on none.
The filter (tools/vocab/order_names.py, common_given): per nam_dict country column, the 500 highest-band single-word names that pass, unioned over 55 countries. A name passes with two or more letters, not a romanized surname the same run writes, at least 20 uses across ORCID's given and family boxes (MIN_USES), and at most 5% of them in the family box (MAX_FAMILY_SHARE). decisions/group-suggestion's 2026-11-10 TABLES entry: "the family share and the use count were set once and not tuned".
Which names it drops, and why (2026-11-12, the same script the tool runs, over orcid-researchers/raw.jsonl, 1.8M records; the table holds 4,262 names):
| name | given box | family box | family share | in the table |
|---|---|---|---|---|
david |
8,012 | 431 | 5.1% | no |
antonio |
5,317 | 289 | 5.2% | no |
richard |
2,086 | 120 | 5.4% | no |
robert |
2,575 | 155 | 5.7% | no |
john |
3,888 | 299 | 7.1% | no |
james |
2,232 | 255 | 10.3% | no |
jean |
1,734 | 208 | 10.7% | no |
paul |
2,958 | 377 | 11.3% | no |
charles |
1,247 | 174 | 12.2% | no |
george |
1,854 | 270 | 12.7% | no |
thomas |
2,922 | 547 | 15.8% | no |
martin |
4,312 | 1,049 | 19.6% | no |
mohamed |
7,969 | 2,607 | 24.7% | no |
ahmed |
7,563 | 3,531 | 31.8% | no |
ali |
7,378 | 3,981 | 35.0% | no |
michael |
4,691 | 163 | 3.4% | yes |
william |
1,551 | 75 | 4.6% | yes |
peter |
4,436 | 212 | 4.6% | yes |
maria |
22,453 | 351 | 1.5% | yes |
Of the 13,597 names in the union of each country's 500 highest-band names, 3,227 are dropped by the family share and 6,751 for fewer than 20 uses. The share filter is doing its job on most of them (wang 93%, silva 89%, van 85%, de 78%): those are surnames and particles nam_dict lists. The loss is the band between 5% and about 15%, which holds the given names that are also surnames in English and French (John, James, Thomas, Paul, George, Charles, Henry, Frank) and, higher, the Arabic given names that serve as family names (Ali, Ahmed, Mohamed).
Why the filter is there. A table word votes that the end it stands at is the given name's. A word that is a family name one time in ten votes wrong one time in ten, and the anti-goal is that a suggestion never moves a group its base already reads right (95% of groups at every size, suggest_measure.py). David at 5.1% is the same risk as William at 4.6%; the cut is arbitrary at the margin.
Options:
- (A) Raise the share (to 10% or 15%), and re-take
suggest_measure.py. 10% admitsdavid,antonio,richard,robert,john; 15% addsjames,jean,paul,charles,george,henry,frank. The same-order rows say whether the anti-goal holds. - (B) Weigh the vote instead of cutting. A name at 7% counts, but a name at both ends of one name (
Thomas John,James Martin) still cancels, as today. No new machinery: the cancelling exists; only the threshold moves. This is (A) stated as what protects it. - (C) Measure the share on a population that is not ORCID. ORCID's family box holds bylines' misfiled boxes and Arabic, Indian and Indonesian naming, where a given name stands in the family box by convention; that inflates
AliandAhmedand perhapsDavid. PatentsView's and PSC's boxes are the other fielded populations held, but they are the populationssuggest_measure.pytests on, which is why the first version used ORCID ("a population the suggester is not tested on"). - (D) A hand-kept allow list of the top names the filter drops. Declined in spirit by the TABLES entry (derived, not curated), and it grows.
- (E) Leave it: the table still decides lists of any size that hold enough other names, and the names dropped are exactly the ones that are wrong most often.
Open:
- (A) at which share? It is one constant and one re-run; the cost is in the same-order rows of
suggest_measure.pyand in the three places its figures are quoted (Parser.suggest's docstring, docs/suggest.rst, decisions/group-suggestion). - Should
Ali,AhmedandMohamed(25–35%) stay out whatever the share? A given-first Arabic list has them at both ends. - Is the 20-use floor (6,751 names dropped) worth a look in the same pass? Those are names ORCID barely holds, so they are rare in the populations measured too.
🤖 Generated with Claude Code
Activity