Repository navigation
Description
Under locales.ZH, a name opening with 付 or 代 is left whole:
>>> from nameparser import parser_for, locales
>>> p = parser_for(locales.ZH)
>>> p.parse("付晓明").family, p.parse("付晓明").given
('付晓明', '')
>>> p.parse("傅晓明").family, p.parse("傅晓明").given
('傅', '晓明')
>>> p.parse("代红梅").family
'代红梅'rules/W1 (unspaced CJK division) divides an unspaced Chinese name after a listed surname, and decisions/W1's 2026-10-18 entry (#695) counts a common Chinese name left whole as a failure. The single-character list is the 2020 census top 100 plus the union of the top 300 of two rankings, Taiwan's Ministry of the Interior (2023) and Wikidata's Chinese family names by bearers. That entry chose two sources because each is biased by region in its own direction. Neither of them is mainland-weighted, and 付 and 代 are the cost:
| surname | Taiwan rank | Wikidata rank (bearers) | rank in a mainland name list |
|---|---|---|---|
| 付 | 435 | 393 (36) | 78 |
| 代 | 545 | 589 (10) | 150 |
付 is the simplified stand-in for 傅, written as a surname of its own in mainland registration, and it is rare in Taiwan, which writes 傅. 代 is the mainland surname Dai.
Evidence
wainshine/Chinese-Names-Corpus (Apache-2.0) has 1,144,225 distinct mainland names, two or three characters, unspaced, taken from text by a word splitter, with no surname/given split and no counts of people. Measured 2026-10-29 with parser_for(locales.ZH) on master (8a1e6f5):
- 34,472 of the names (3.01%) are left whole.
- 付 opens 3,488 of those and 代 1,323: 14% of all the misses, and every name in the list that opens with either character.
- Ranked by how many names each first character opens, 付 is 78th and 代 150th. They are the only unlisted characters in that ranking's top 200. Its top 300 holds 21 unlisted characters, and its top 400 holds 87.
- The rest of the misses form a long tail of real surnames past both sources' 300 cut: 芮 容 戎 楚 国 原 海 朴 芦 丰 …, ranked about 300–460 by Taiwan and Wikidata alike.
The cost on the Japanese side, which decisions/W1 weighs, is small for these two. Of 172,412 Japanese names in the same repository's Japanese list, none opens with 付 and 14 open with 代 (代田稔, 代島治彦, 代官山康弘 …), which under ZH would read family 代. The committed native-script corpus holds no name with either character.
Recompute: fetch Chinese_Names_Corpus/Chinese_Names_Corpus(120W).txt, drop its three header lines, parse each name with parser_for(locales.ZH), and count the ones whose family or given is empty, grouped by first character. Taiwan and Wikidata ranks come from tools/zh_surnames.py's read_moi and read_wikidata orders over its cached sources, with a character's traditional forms taken from Unihan's kSimplifiedVariant rows.
Proposal, in rule shape
When an unspaced Han name under locales.ZH opens with 付 or 代, then it divides after that character (付晓明 → family 付, given 晓明), because both are common mainland surnames that the two rankings miss only through their regional bias.
- Accepted: a Japanese name opening with 代 divides wrongly under ZH (代田稔 → family 代), the same cost decisions/W1 accepts for 安.
- Excluded: raising the 300 cut. 付 would need about 435 and 代 about 590, and the tail past 300 is where characters that open Japanese surnames sit (山 is 369th in Taiwan's order).
Open questions
- Hand additions or a third source? The two can be added by hand at the census block's tail, annotated like 萧 is today. The other route is a mainland-weighted ranking as a third source in
tools/zh_surnames.py, which would catch the next 付 too. This list is the obvious candidate, but it ranks distinct names extracted from text, not people, and its README admits some bad entries. Decisions/W1's "Sources not used as data" bullet needs a line on it either way. - Does the long tail matter? After 付 and 代, the misses are spread thin (about 1–2% each for 芮 容 戎 楚). Is a 3% → ~2.6% miss rate worth anything beyond the two?
- Should this list become a local corpus? As a corpus that is cached rather than committed (
tools/differential/local_<source>.py), it would show which names a ZH change moves. Without fields it can never be scored for agreement.
Activity
derek73 commentedon Oct 30, 2026
A population cross-check, from psychbruce/ChineseNames. It holds counts of people for 1,806 surnames across 1,181,719,774 Han Chinese people, from China's national ID registry (NCIIC) as of 2008. Its data is GPL-3 and CC BY-NC-SA, so it cannot ship as vocabulary (decisions/W1 already lists it under "Sources not used as data"). The figures below use it as a cross-check only, the way that entry treats Yuan Yida's surname books.
Measured 2026-10-29 with
parser_for(locales.ZH)on master (8a1e6f5):This bears on open question 1. Ranked by how many names each first character opens, wainshine/Chinese-Names-Corpus (Apache-2.0) follows these population ranks closely. It could serve as the mainland-weighted third source in
tools/zh_surnames.py, with this package's counts as the check behind it. On the hand-addition route, 候 may belong beside 付 and 代.Recompute: download
data-csv/familyname.csvfrom the package's repository. A surname counts as listed whenparser_for(locales.ZH).parse(s + "伟")reads familysand given伟. Ranks are row order (the file is sorted byn.1930_2008), and coverage is the sum ofn.1930_2008over the listed rows divided by the sum over all rows.Correct 农's Wikidata rank and date the zh.py counts (#952 review)