Repository navigation
양. 지훈 splits the given name in half #323
Description
Activity
Closed by #522 (merge commit 555270e, 2.3.0 unreleased).
The second candidate fix, and it was broader than filed.
_vocab._normalized_for_scriptnow strips a trailing full stop (any of the four in_lexicon.FULL_STOPS) before classifying, so양. 지훈reads family양., given지훈, and the period stays on the word it arrived with. The None thateffective_script("양.")used to return had three readers, not one: the surname site (this issue), the order rule in assign (양 지훈.had fallen to positional; family-first survives now), and the segmenter's neighbour precondition. The first candidate -- consultingis_suffix_strictat the site -- would have rescued양.and left김. 민준cut, so the classification route was the right one; and the surname site itself turned out to need the same treatment (it matches its head on the stop-stripped core, otherwise김.matched its own head and became김+.).Two adjacent readings moved with it, by the same #320 premise (the classified scripts have no initials and no period abbreviations): the glued-period honorific peels (
김민준씨.-> family 김, given 민준, suffix씨.;田中さん.-> family 田中, suffixさん.), and rules.md#H2's abbreviation shape declines a word carrying a no-initials script, so a lone田中.is the family name rather than a title. Hangul never reaches that shape test (hangul segmentation runs first), so its witness is Han.Recorded limits: a leading stop hides a token from the surname site (as before) but not from the honorific peel; a bracketed ASCII-period CJK credential
(김민준.) John Smithis unwrapped and divided; halfwidth kana is outside the script table. All indecisions.md#cjk-full-stopswith recompute recipes; 17 differential-corpus names move, every one a tolerated row this bundle added.- added 5 commits that reference this issue
on Sep 22, 2026
지훈 is one given name. The second form cuts it in two.
This is exactly the harm
_script_segment._is_post_nominal's docstring names — "지 is a listed surname, so양 지훈… would have its own given name split in half" — and the guard that prevents it is standing right there, unable to fire.Why it cannot fire
_split_surname_sitepicks its site byeffective_script(...) in scripts.effective_script("양.")returnsNone, because the trailing period defeats the wholly-one-script test, so the site scan steps straight past양.and lands on the given name. The guard downstream never gets asked.That last line is what makes this newly visible rather than newly broken: #320 made
_is_post_nominal("양.")returnTrue, so the predicate now says "this is a post-nominal" while the caller structurally cannot ask it. Output is identical onmaster, so this is not a regression — but the branch created the half-state that makes the gap legible.양 and 군 are the shipped vocabulary's designated risk class (
config/suffixes.pysingles them out — 양 is a top-tier Korean surname), which is why this shape is worth fixing rather than filing as a curiosity.Two candidate fixes, and the choice matters
is_suffix_strictalongsideeffective_script.effective_scripttolerant of a trailing period.The second is broader and would interact with the normalization question in #322.
Found while reviewing #320 (PR #321).