Skip to content

Should a lone dash be a separator, so John Smith - Jr. reads family 'Smith' rather than '-'? #820

Open

Description

@derek73

A dash standing alone between words is read as a name word. Every release since 1.4.0 reads it that way:

input reads
John Smith - Jr. middle 'Smith', family '-', suffix 'Jr.'
Jane Doe - MA middle 'Doe', family '-', suffix 'MA'
Jane Doe - Smith middle 'Doe -', family 'Smith'
Jane Doe nee Smith - MA maiden 'Smith -', suffix 'MA'
Jane Doe nee Smith – MA (en dash) maiden 'Smith –', suffix 'MA'

Declaring the dash with Policy(extra_suffix_delimiters={' - '}) changes none of these. C10 (a declared delimiter parts a trailing suffix part) applies only after a comma, and in the part before the first comma a declared delimiter is a word.

The maiden case was recorded rather than fixed in decisions/M2's 2026-09-19 #533 review entry, "left for its own issue". It is one symptom of the shape here.

Proposal, in rule shape

When: a token consists only of a dash (hyphen-minus, en dash, em dash) standing between words, as in "John Smith - Jr.".

Then, one of:

  • (A) It is a separator (T1). It splits like whitespace and is dropped: John Smith - Jr. → family 'Smith', suffix 'Jr.'.
  • (B) It is a suffix delimiter, as a comma would be. It parts the name there: Jane Doe - MA reads as Jane Doe, MA.
  • (C) It stays a word. The rule states this as an Accepted cost.

Because: a lone dash carries no name content, so it can't be a family name. A dash inside a word (Smith-Jones) stays a hyphen; this question is only about a dash with spaces around it.

Boundaries that stay as they are: Smith-Jones (one word); Smith, RN - CRNA (C10's Accepted bullet keeps the core a word there for v1 parity, and the answer here would have to say whether that changes).

Open questions

  1. A, B or C?
  2. Should one answer cover every dash (hyphen-minus, en dash, em dash), and other lone punctuation such as / or ·?
  3. Does the answer change the comma path, where C10 already reads a declared delimiter as a comma?

Activity

  1. self-assigned this
    on Oct 22, 2026
  2. derek73 commented on Oct 25, 2026

    @derek73
    OwnerAuthor

    Corpus survey, 2026-10-24: what a lone dash is in real data

    I scanned every committed corpus and the eight cached local corpora for a dash (-, –, —) standing alone between words. The ClinicalTrials.gov contact notes ("Call 1-877-CTLILLY … Mon - Fri") are left out. Counts are distinct strings.

    corpus name word after the dash credential after the dash
    psc-individuals 454 1 (Camellus Law Llp - Trustee - I.O.M. …)
    ctgov-officials 212 before a comma, 20 after 26 after a comma (Alessandro Armuzzi, MD - PhD), 1 before
    fec-individuals 92 (NOEL - BLAGROVE, DIONNE) 0
    nepal-candidates 29 (Kamala Rokaya - Bohara) 0
    jrc-names 2,894, mostly news-text debris (Chelsea - Everton) 7 (Peter - I)
    tse-donors / ukec-individuals 7 / 1 0
    committed corpora — test rows only (Smith, RN - CRNA; CLDR's фон Брюль — мл.)

    The shape this issue opens with, a credential after a dash with no comma before it (John Smith - Jr.), does not appear as a real name in any corpus. What people actually type is a hyphen with spaces around it inside a compound name.

    PSC shows which box the filer put each part in. Of its 454 names, 364 have the dash in the surname box (Barnabas - Wood, Al - Kufi), 73 in the middle name and 17 in the forename (Alexandru - Ionut). Over the 364, family matches the surname box (comparing with dash spacing ignored):

    reading match
    today 17 / 364: Mr Adam John Holland - Edwards → middle 'John Holland -', family 'Edwards'
    (A) separator, dropped 0 / 364
    (B) suffix delimiter worse than A: it parts the surname itself
    (D) a spaced hyphen, joined 349 / 364

    The 15 misses under D, all of them:

    • 4 are not names (Wise - As Trustee, Watson - The Estate, Blake - Executor Of …, Cartwright - As Nominee For …).
    • 6 get the dashed pair right but not a surname word in front of it (Mrs Annette Erica Hinds Tia - Okwee → 'Tia-Okwee', box 'Hinds Tia - Okwee'; also Manzanaro Fernandez - Montes, Olugu Ikechi - Iro, Hameedi Shah - Jan, A A Al - Kuwari, Amobi Kesse - Adu). That is the ordinary multi-word-surname limit, the same without any dash.
    • 5 have more than one word after the dash, and the join takes only the first (Kuijpers - Van Den Bos → 'Den Bos', Short - Van Der Laan, Dickhoff - D'Eimar De Jabrun, Schwagele - Fan Moniz, Sanchez - Osorio Nicolas).

    So the data suggests a fourth answer: (D) a lone dash between two name words is a hyphen with spaces around it, and joins them (Spindler - Vesel → family 'Spindler-Vesel', Doru - Liviu Constantinescu → given 'Doru-Liviu'). Whether the rendering keeps the spaces is a separate question.

    D cannot be a blanket rewrite. A naive join breaks two shapes the corpora hold:

    • Credentials after a comma. Alessandro Armuzzi, MD - PhD reads correctly today: suffix 'MD - PhD', which is C10's Accepted bullet. Joined into MD-PhD, the run is no longer suffix vocabulary, and the comma flips to a family comma (family 'Alessandro Armuzzi', given 'MD-PhD'). The 26 ctgov rows show this is typed. The join must not reach a credential run, which also settles open question 3: the comma path stays as it is.
    • A dash standing in for an empty field. In Mr - Ibraheem the filer typed - as the forename. Joined, it reads given 'Mr-Ibraheem'. Today it reads title 'Mr', given '-', family 'Ibraheem'. A join must not take a title.

    Names in surname-comma form (NOEL - BLAGROVE, DIONNE) already get the whole family right; only the spacing would change.

    On open question 2: / comes up too (ctgov MD / PhD, 55 strings; nepal Laxmi Sarki / Acchami, 91), but it means "or" or names an alternate surname, which is a different question, so I'd keep it out of this rule. • and · show up only in jrc-names news extraction.

    Recipe: PSC rows come from psc-individuals/raw.jsonl, keeping each record whose surname holds a whitespace-flanked [-–—]+ token. Compare parse(name).family with the surname field, after folding \s*[-–—]+\s* to - and lowercasing both. D is re.sub(r'\s+([-–—]+)\s+', r'\1', name) applied before the parse.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions