Skip to content

Read Graf, Gräfin, Fürst and Prinz as rank particles, as Freiherr is (#709) - #1064

Merged
derek73 merged 4 commits into
masterfrom
feat/issue-709-german-ranks
Nov 5, 2026
Merged

derek73 merged 4 commits into
masterfrom
feat/issue-709-german-ranks

Conversation

@derek73

@derek73 derek73 commented Nov 5, 2026

Copy link
Copy Markdown
Owner

German noble ranks are part of the legal surname since 1919, written before the particle. Four more ranks now read as part of the surname, as freiherr already did.

input (default order) before (1.4.0–2.8.0) now
Otto Graf Lambsdorff middle Graf, family Lambsdorff family Graf Lambsdorff
Marion Gräfin Dönhoff middle Gräfin family Gräfin Dönhoff
Georg Friedrich Prinz von Preußen middle Friedrich Prinz family Prinz von Preußen
Graf Lambsdorff, Otto title Graf family Graf Lambsdorff (rules/H6's particle stop)
Graf Zeppelin, Prinz Charles title unchanged
Werner Herzog, John Ritter family unchanged (refused)

The change. graf, gräfin, fürst and prinz in de.toml each gain a rank particle reading and the particle's given reading, freiherr's shape. Each stays in TITLES, so a name opening with one still reads it as the title.

Refused, for now: herzog and ritter. Both are common plain surnames (US Census 11,146 and 33,252) and carry excluded = { rank = … }. The cost the refusal was decided on came from a five-word prototype, and it did not reproduce. With a stored recipe (decisions/vocabulary-collisions' #709 entry), giving them the same readings moves 63 of the 879 corpus names holding either word:

moves count example
comma attachment (cost) 5 BABINGTON, BETHANY HERZOG → family HERZOG BABINGTON
title kept in the family (gain) 5 HERZOG DIAL, MICHELE → family HERZOG DIAL
double surname read as two (mostly gain) 53 ANA PAULA RITTER ASCENCO → family RITTER ASCENCO

Whether they should join the four is reopened in review.

fürstin and prinzessin are in no vocabulary file, so they are left for their own vetting.

Measured

On 2026-11-04, against origin/master c620754. The recipe is in decisions/vocabulary-collisions' #709 entry.

  • Corpus names holding one of the four words: 66 of 738 move. Nearly all are German noble names now holding the rank in the family. A few Spanish/Portuguese double surnames led by Graf read both surnames (Rodrigo Graf Fernandez). Two news-text fragments read worse.
  • Fielded corpora, local_agreement.py --base:
corpus progress regression
psc-individuals 8 1
orcid-researchers 9 1
patentsview-inventors 5 3

The regressions are mostly Austrian and Swiss filers who typed the word as a given name.

  • Committed snapshot: one name moves, Graf Lambsdorff, Otto. CLDR is unchanged.

Accepted: rules/P6's attachment after a family comma takes a trailing rank into the family (Smith, Steffi Graf → family Graf Smith), as it already does for freiherr. No corpus name moved this way.

Interaction with #670/#828's PR: these words join TITLES ∩ particles, so under a family-first order that PR's cut reaches them too (Graf von Berg Otto → family von Berg, given Otto).

Closes #709

🤖 Generated with Claude Code

derek73 and others added 2 commits November 4, 2026 15:41
…709)

Since 1919 a German noble rank is part of the legal surname, written
before the particle. Each of the four now carries freiherr's shape, a
rank particle reading beside its title reading, so `Otto Graf
Lambsdorff` gives family 'Graf Lambsdorff' where it gave middle 'Graf';
opening a name each is still a title (`Graf Zeppelin`). Herzog and
Ritter, common plain surnames, are refused the reading, with the counts
recorded on each word. rules/H6's Accepted clause and its example move:
`Graf Lambsdorff, Otto` keeps family 'Graf Lambsdorff'.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nts (#709)

The design-docs review found rules/H1's graf-class clause saying a
name word behind `graf` before a family comma makes it the title (it
now stays in the family), five copies of `TITLES ∩ particles_ambiguous`
as {freiherr, st} (vocabulary-collisions, vocabulary-exclusions, both
nameparser AGENTS.md files, a _group.py comment), decisions/H6 still
listing #709 as open, the `Graf Lambsdorff, Otto` row in H6's Accepted
fence where it is the particle stop's case, and an Accepted bullet
saying no corpus name moved by the comma attachment where one did.

The Herzog/Ritter counts came from a five-word prototype nobody can
re-run; they are re-measured with a stored recipe (63 of 879 names
move: 5 attachments, 5 titles kept in the family, 53 double surnames)
and the prototype's figures withdrawn.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@derek73 derek73 added this to the 3.0 milestone Nov 5, 2026
@derek73 derek73 added enhancement vocabulary Per-word vocabulary model and language packs labels Nov 5, 2026
@derek73 derek73 self-assigned this Nov 5, 2026
derek73 and others added 2 commits November 4, 2026 19:46
…ures (#709)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…an-ranks

# Conflicts:
#	docs/design/decisions/H6-title-before-a-family-comma.md
#	docs/release_log.rst
#	nameparser/vocab/README.md
@derek73
derek73 merged commit e599289 into master Nov 5, 2026
13 checks passed
@derek73
derek73 deleted the feat/issue-709-german-ranks branch November 5, 2026 04:50
derek73 added a commit that referenced this pull request Nov 5, 2026
…) (#1075)

* Write saint and rank particles with their capital in case repair (#1069)

Case repair's particle arm lowercased every particle without a mask, so
JOHN ST CLAIR repaired to 'John st Clair' and, once #1064 made the German
ranks particles, OTTO GRAF LAMBSDORFF to 'Otto graf Lambsdorff' where
2.8.0 gave 'Otto Graf Lambsdorff'. The saint and rank kinds now compile
into CAPITALIZED_PARTICLES, which the arm skips, so a word a file or a
caller adds of either kind is written with its capital too; sta's and
sto's masks, which #725 added for this, are dropped for the one
mechanism. Suzuki-san under a family-first order with force repairs to
'Suzuki-San', the accepted cost (rules/R4, decisions/R4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Mark #725's sta/sto masks superseded; file CAPITALIZED_PARTICLES under case masks (#1069)

Review fixes: decisions/H6's #725 entry still described the masks this
change drops, the release bullet's Suzuki-San cost left out force=True,
and AGENTS.md listed the set among the given-name sets.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Record the capitalized sweep's negative control; state the kind exclusion in _lowers_as_particle (#1069)

Code-review fixes: the helper's docstring still said every working
particle is lowercased, and the guard sweep had no recorded control.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement vocabulary Per-word vocabulary model and language packs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Should Otto Graf Lambsdorff read family Graf Lambsdorff, as Manfred Freiherr von Richthofen reads family Freiherr von Richthofen?

1 participant