Skip to content

Should the group suggester know John, David and James as given names? A list of Smith John, Jones David gets no suggestion #1357

Open

Description

@derek73

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% admits david, antonio, richard, robert, john; 15% adds james, 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 Ali and Ahmed and perhaps David. PatentsView's and PSC's boxes are the other fielded populations held, but they are the populations suggest_measure.py tests 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:

  1. (A) at which share? It is one constant and one re-run; the cost is in the same-order rows of suggest_measure.py and in the three places its figures are quoted (Parser.suggest's docstring, docs/suggest.rst, decisions/group-suggestion).
  2. Should Ali, Ahmed and Mohamed (25–35%) stay out whatever the share? A given-first Arabic list has them at both ends.
  3. 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

  1. self-assigned this
    on Nov 12, 2026
  2. added
    vocabularyFixed by a word-list entry: per-word vocabulary and language packs
    name-orderName order, family-first and two family names (rules/O)
    suggesterThe group suggester: Parser.suggest() and its signals
    on Nov 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

name-orderName order, family-first and two family names (rules/O)suggesterThe group suggester: Parser.suggest() and its signalsvocabularyFixed by a word-list entry: per-word vocabulary and language packs

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions