Skip to content

Should meng and lac be ambiguous suffix acronyms? wang meng has had no family name since 2.0 and renders Wang MENG on master #540

Description

@derek73

Two entries in SUFFIX_ACRONYMS are borne as ordinary names in the one position the suffix vocabulary claims, the last word of a name, and the claim costs the family name. meng (MEng, Master of Engineering) is a common Chinese surname and given name; lac (LAc, Licensed Acupuncturist) is a Vietnamese and French surname. Neither is in suffix_acronyms_ambiguous, so a bare trailing meng or lac reads as a credential with no words-to-spare test and no ambiguity report.

>>> parse("wang meng")
ParsedName(given='wang', suffix='meng')          # family is empty
>>> parse("wang meng").ambiguities
(Ambiguity(kind=GIVEN_OR_FAMILY, ...),)          # reports the wrong fork: the one-word name, not the suffix
>>> parse("nguyen van lac")
ParsedName(given='nguyen', family='van', suffix='lac')
>>> parse("wang meng").capitalized()
'Wang MENG'

Since when. wang meng, li meng and zhang meng read family meng on 1.4.0 and suffix meng, with no family, on every release from 2.0.0; nguyen van lac has read suffix lac with family van on every release from 1.4.0. Since #521 (on master, unreleased) the credential clause renders the suffix in capitals, so Wang MENG and Nguyen Van LAC where 2.3.0 gave Wang Meng and Nguyen Van Lac. Measured 2026-09-24 on the released wheels, the parent 4d0680e and the #539 tree; the recipe is in decisions.md#R4's Excluded block for the 2026-09-24 masks (CAPITALIZATION_EXCEPTIONS — meng, edd, lac, ded).

Origin. lac came in with the Wikipedia post-nominals import, af5bdab (2019-12-11, #93), which AGENTS.md records as never reviewed against surname collisions; meng came in with 3e14ea20 (2026-07-01, the German/Dutch title and degree batch, first shipped in 1.3.0).

The criterion. decisions.md#vocabulary-collisions C-i: a word belongs in its set's ambiguous subset iff it is borne as an ordinary name in the position the vocabulary claim acts on, and under uncertainty the default is AMBIGUOUS. Both words pass that test in the trailing position. The three earlier applications to this set were rai and cha removed, ba marked ambiguous, mc left alone (decisions.md#suffix-acronym-collisions).

Proposed rule

Rationale: a credential acronym that is also a surname cannot be read as the credential from its bare spelling alone; the words-to-spare count (rules.md#S2) and the written case are the evidence, exactly as for MA and BA.

Statement: meng and lac join suffix_acronyms_ambiguous. A bare trailing member of the ambiguous set reads as a credential only with words to spare, or written in capitals in a mixed-case name (S2, unchanged); the fork is reported as SUFFIX_OR_NAME.

Examples, measured 2026-09-24 on the #539 tree with the two words added to a private lexicon's ambiguous set:

"wang meng"          →  given="wang", family="meng"              ambiguity: SUFFIX_OR_NAME
"li meng"            →  given="li", family="meng"                ambiguity: SUFFIX_OR_NAME
"john smith meng"    →  suffix="meng"                            ambiguity: SUFFIX_OR_NAME   · words to spare
"john smith m.eng."  →  suffix="m.eng."                          ambiguity: SUFFIX_OR_NAME
"meng li"            →  given="meng", family="li"                unchanged · not the trailing slot
"nguyen van lac"     →  suffix="lac", family="van"               ambiguity: SUFFIX_OR_NAME   · words to spare
"tran lac"           →  given="tran", family="lac"               ambiguity: SUFFIX_OR_NAME

Accepted consequences:

  • john smith MEng and john smith LAc read the word as the FAMILY name under the ambiguous marking (S2: in a mixed-case name a member of the ambiguous set "written in any other cased form that is not wholly lower reads as the name even with words to spare"). Today both read as the suffix. The conventional spellings of these two credentials are exactly the mixed-case forms S2 reads as a name, so this is the real cost of the marking, and the same cost ba/ma already carry.
  • nguyen van lac keeps its 1.4.0 reading (suffix lac), since the count decides and there are words to spare; only the two-word Vietnamese forms move.

Alternative considered: REMOVE both, as rai and cha were. Measured: john smith meng then reads family meng and john smith MEng family MEng, while john smith m.eng. still reads as a suffix by its dotted shape (S3). Removal loses the bare credential outright where the marking keeps it with words to spare; the criterion's default under uncertainty is the marking.

Open questions:

Where it lands: nameparser/config/suffixes.py (SUFFIX_ACRONYMS_AMBIGUOUS), a tests/v2/cases.py row per fork, the decisions.md#suffix-acronym-collisions entry, and the differential ledger rule for the two-word Chinese forms, which move a role at every 2.x baseline.

Found while landing #539, whose decisions.md#R4 Excluded block carries the measurements and an Open: pointer to this issue.

Activity

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

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions