diff --git a/AGENTS.md b/AGENTS.md index a9eaddaa..bc856333 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -253,7 +253,7 @@ Add a dedicated `copy.deepcopy()` round-trip test for it too (see `test_regexes_ **Unknown-key attribute access on `TupleManager`/`RegexTupleManager` warns (1.4, #256) — 2.0 note: the warning became a hard `AttributeError` naming the known keys (shim `TupleManager`); the paragraph below describes the deleted v1 machinery and applies only when reading v1 history.** — a key not currently in the dict emits `DeprecationWarning` naming the miss and the known keys (`_warn_unknown_key`), before falling back to the same `None`/`EMPTY_REGEX` default as before; `.get()` stays silent. Dunder probes (`__deepcopy__`) still raise `AttributeError` outright, and single-underscore probes (`_repr_html_`, IPython's `_ipython_canary_method_should_not_exist_`, etc.) are excluded from the warning too — no real config key starts with `_`, so both guards just keep protocol/introspection probes from misfiring as "typo" warnings. This means internal parser code that reads `self.C.regexes.` unconditionally (e.g. `squash_bidi`'s `bidi`) now warns if a caller's custom `regexes` dict omits that key — a previously-silent partial-override pattern is on the same deprecation path as an actual typo. -**Adding a word to a config set** — first check the *other* sets for the same word (grep `nameparser/config/` or intersect the sets in a `python3 -c`). Real overlaps exist: `do`/`st`/`mc` ∈ `PARTICLES` ∩ `TITLES`/`SUFFIX_ACRONYMS`; `abd` = "ABD" ∈ `SUFFIX_ACRONYMS`; `abu` ∈ `PARTICLES` ∩ `BOUND_GIVEN_NAMES` (position-dependent: leading token → given-name join, mid-name → family-name join). Usually position-dependent and harmless, but can force a guard or an exclusion (the `last_base` all-particles guard; dropping `abd` from `BOUND_GIVEN_NAMES`). Then check the word against real names, not memory: `uv run python tools/name_usage.py ` counts its bearers as a given name and as a family name (US Census surnames, SSA given names, Wikidata with countries of citizenship). Pass a name as it is written (`McDonald`): Wikidata labels match exactly, and no rule rebuilds an internal capital from `mcdonald`. It reports and does not decide — read the counts against the position the set's claim acts on. And check the predicates that test a member's SPELLING rather than its membership: they encode what the set's members happened to look like when they were written. `_pieces.starts_a_credential_run` implemented rules.md#S2's "Latin" as `isascii()`, exact until #661 added `mlađi`, which would have read `mlađi Jones` differently from `stariji Jones`; the design-docs review caught it, after a first draft had credited the test to the wrong clause of S2 and proposed deleting it on a mutation that moved nothing because nothing pinned it. Before adding the first member of a new script, or the first accented one, grep the set's consumers for `isascii`, `isalpha` and script tests, and read the rule each one implements. +**Adding a word to a config set** — first check the *other* sets for the same word (grep `nameparser/config/` or intersect the sets in a `python3 -c`). Real overlaps exist: `do`/`st`/`mc` ∈ `PARTICLES` ∩ `TITLES`/`SUFFIX_ACRONYMS`; `abd` = "ABD" ∈ `SUFFIX_ACRONYMS`; `abu` ∈ `PARTICLES` ∩ `BOUND_GIVEN_NAMES` (position-dependent: leading token → given-name join, mid-name → family-name join). Usually position-dependent and harmless, but can force a guard or an exclusion (the `last_base` all-particles guard; dropping `abd` from `BOUND_GIVEN_NAMES`). Then check the word against real names, not memory: `uv run python tools/name_usage.py ` counts its bearers as a given name and as a family name (US Census surnames, SSA given names, Wikidata with countries of citizenship). Pass a name as it is written (`McDonald`): Wikidata labels match exactly, and no rule rebuilds an internal capital from `mcdonald`. It reports and does not decide — read the counts against the position the set's claim acts on. And check the predicates that test a member's SPELLING rather than its membership: they encode what the set's members happened to look like when they were written. `_pieces.starts_a_credential_run` implemented rules.md#S2's "Latin" as `isascii()`, exact until #661 added `mlađi`, which would have read `mlađi Jones` differently from `stariji Jones`; the design-docs review caught it, after a first draft had credited the test to the wrong clause of S2 and proposed deleting it on a mutation that moved nothing because nothing pinned it. (#679 then dropped the script test on purpose, after measuring what it protected.) Before adding the first member of a new script, or the first accented one, grep the set's consumers for `isascii`, `isalpha` and script tests, and read the rule each one implements. **Before adding a short/common word to `PARTICLES` globally**, test it mid-string against realistic 3-token names, not just check for English-word collisions: Korean/Vietnamese given names put a short syllable in the middle slot (`Park In Hwan`, `Nguyen To Nga`), and Western names put a bare initial there (`John V. Smith`). A word that looks safe ("nobody is named 'to'") can still swallow a real middle name/initial into the last name once it's a global prefix — confirmed regressions for `to`/`in`/`an`/`ten`/`then` and bare `v` this way (PR #191). diff --git a/docs/design/decisions.md b/docs/design/decisions.md index eacdcb80..a7354650 100644 --- a/docs/design/decisions.md +++ b/docs/design/decisions.md @@ -760,8 +760,8 @@ for n in ('Smith, John','Smith, XYZ'): print(n, calls_for(off.parse, n), calls_f COST, `sys.setprofile` call counts (mean of 50, after one warm-up) against `git archive origin/master`: `Smith, John` 183 → 183, `Smith, JOHN` 183 → 183, `Smith, XYZ` 182 → 182, `John Smith, PhD` 217 → 217, `John Smith, MA` 252 → 252, `John Smith, Ph. D.` 254 → 254, `John Smith, CPA` 217 → 217, `John Smith, MD PhD` 260 → 260, `John Smith, MBA CPA` 261 → 261, `Dr. Juan de la Vega III` 366 → 366, `John Smith, XYZ` 251 → 266, and an all-caps record with a capitalized given name and a credential, `LLOYD WEBBER, ANDREW PhD`, 338 → 364, a constant +26 that does not grow with the name's length (`'LLOYD'*64 + ' WEBBER, ANDREW PhD'` 653 → 679; the second draft's per-character contrast test had made that +350). Past the all-caps check the contrast is linear in the words before the comma, about four frames a word (the generator, the case test's call, and the own-words walk's fold and marker test; `'GAULLE ' + 'ap '*k + 'GAULLE, CHARLES'` is +7, +26, +38, +54 over master at k = 0, 1, 4, 8), and constant in a word's letters (`'de ' + 'GAULLE'*k + ', CHARLES'` 253 → 275, 343 → 365 and 631 → 653 at k = 1, 16, 64), where the capital-then-lowercase draft grew a frame per letter; all paid only once a caps word is in hand. The comma test is on by default, so three C-level checks go before any call: two or more words before the comma (the first draft lacked it, and `Smith, JOHN`, a common record format, paid +25 for a flip it can never make — the code review), the first word in capitals, and the lone-two-letter length. Every caller of the caps predicate asks first, in C, what it would decline anyway — alphabetic capitals, not a listed suffix word — so a listed credential never pays for the call (the review of the first fix found `John Smith, CPA` +4 and `John Smith, Ph. D.` +5 before these). The 2026-09-14 entry's recompute recipe predates the enum: its `on` is `Policy(unlisted_caps_suffixes=CapsSuffixes.EVERYWHERE)` now, and its `off=Parser()` is `Policy(unlisted_caps_suffixes=CapsSuffixes.OFF)`, `Parser()` being AFTER_COMMA. - 2026-10-02 (Derek), #573 — a never-given particle opening the given part after a family comma leaves no word to spare; the member behind it is the surname it heads, unless mixed-case capitals say credential. The record is the P6 section's entry of the same date. - 2026-10-02 (Derek), #578 — A PARTICLE BETWEEN A CREDENTIAL AND A TITLE-CASE WORD STAYS SILENT, AS IT READS. `Doe, Jane PhD vd Ma` reads given 'Jane', middle 'vd Ma', family 'Doe', suffix 'PhD', reporting nothing. No new rule decides that: S2's given-part slot already says a particle in front of a member takes the member out of the slot, and where the word behind reads as a name the two are one name, asked nothing and reporting nothing — `vd` reads as `van` does (`Doe, Jane PhD van Ma`, the same reading), and S2's own boundary example is `Doe, John van Ma`. The writing is malformed whichever reading is meant: a Title-case `Ma` behind a lowercase `vd` behind a `PhD` is neither a Dutch listing nor a credential run as anyone writes one. A reader leaning anywhere leans suffix (Derek: both words follow a known credential, and the writer likely did not know how suffixes are capitalized), but that is a guess about a writer's mistake, not a convention the writing carries. Declined: (a) reading `vd Ma` as suffixes, which needs code to make a credential speak across a particle — against P2 (a particle joins the word behind it) and #554 (`vd` speaks for nothing behind it); (b) reporting the fork, which needs an emitter on the family-comma path for a decision the particle chain makes before assign knows which read the part gets (AGENTS.md: prefer leaving a fork silent and documenting the omission over machinery for input nobody reads with confidence). Where the writing does speak the parser already follows it: `Doe, Jane PhD vd MA` reads suffix 'PhD vd MA' and reports (#573). Pinned by the case row `a_particle_after_a_credential_heads_a_title_case_name`. -- 2026-10-04 (Derek), #602 — A CREDENTIAL AFTER THE NAME CORE STARTS A RUN TO THE END OF ITS PART. An unambiguous Latin suffix word of two or more letters standing after two name words with no comma (a lone particle not counting toward the two; qualified by #627, below), or after the given word in the part after a family comma, makes every later word of that part a suffix, except a title word, which reads as a title: `John Smith PhD Jones` → suffix 'PhD Jones', `Eric H. Holder Jr. Attorney General` → suffix 'Jr.', title 'Attorney General'. A name word the run absorbs is reported `suffix-or-name`, a reader hesitating over `Jones` there. Before this the three comma shapes disagreed — middle 'Smith PhD' with no comma, middle 'Jones' and suffix 'PhD' after a family comma, and suffix 'Jr., Jones' after a suffix comma (C2's tail) — and the no-comma reading made a credential a middle name, the one reading nobody intends. The suffix-comma path already read it this way, and the comma spelling of the Holder name always did. - WHAT STARTS THE RUN is one predicate, `_pieces.starts_a_credential_run`, read by the trailing peel (`credential_run`, applied to every finished peel, so assign, P5's reserve, P2's chain stop and the maiden walk see one answer) and by the given-part walk. EXCLUDED, each with its reason: a TITLE WORD — 746 title words are in no suffix set (measured 2026-10-04: `len(L.titles - L.suffix_acronyms - L.suffix_words)` for the default lexicon), many of them surnames (`King`, `Bishop`, `Judge`), so `Mary Jane King Smith` keeps family 'Smith'; a title is read from the end of a name only behind a comma or with a period (H5, Derek). The AMBIGUOUS CLASS, which carries no evidence of which it is. A SINGLE LETTER, in any case: a lowercase `i` or `v` carries no `initial` tag, and found by the v1 off-switch test, `Josep Carod i Rovira` with `i` removed from the conjunctions read suffix 'i Rovira'. A CONNECTIVE. A word that is also PARTICLE or BOUND GIVEN-NAME vocabulary — found by the suite, not foreseen: `abd` is in the credential list (ABD) and heads `Abd Allah`, and `Mohamed Ali Abd Allah` read suffix 'Abd Allah' until it was excluded. The NON-LATIN HONORIFIC words, an honorific followed by a name word being a different question from a credential followed by one. A word that is also a title (`MD`, `Ms`, `Sr.`) does start the run: position decides, and after the name core it is the suffix. +- 2026-10-04 (Derek), #602 — A CREDENTIAL AFTER THE NAME CORE STARTS A RUN TO THE END OF ITS PART. An unambiguous Latin suffix word (the Latin restriction retracted by #679, below) of two or more letters standing after two name words with no comma (a lone particle not counting toward the two; qualified by #627, below), or after the given word in the part after a family comma, makes every later word of that part a suffix, except a title word, which reads as a title: `John Smith PhD Jones` → suffix 'PhD Jones', `Eric H. Holder Jr. Attorney General` → suffix 'Jr.', title 'Attorney General'. A name word the run absorbs is reported `suffix-or-name`, a reader hesitating over `Jones` there. Before this the three comma shapes disagreed — middle 'Smith PhD' with no comma, middle 'Jones' and suffix 'PhD' after a family comma, and suffix 'Jr., Jones' after a suffix comma (C2's tail) — and the no-comma reading made a credential a middle name, the one reading nobody intends. The suffix-comma path already read it this way, and the comma spelling of the Holder name always did. + WHAT STARTS THE RUN is one predicate, `_pieces.starts_a_credential_run`, read by the trailing peel (`credential_run`, applied to every finished peel, so assign, P5's reserve, P2's chain stop and the maiden walk see one answer) and by the given-part walk. EXCLUDED, each with its reason: a TITLE WORD — 746 title words are in no suffix set (measured 2026-10-04: `len(L.titles - L.suffix_acronyms - L.suffix_words)` for the default lexicon), many of them surnames (`King`, `Bishop`, `Judge`), so `Mary Jane King Smith` keeps family 'Smith'; a title is read from the end of a name only behind a comma or with a period (H5, Derek). The AMBIGUOUS CLASS, which carries no evidence of which it is. A SINGLE LETTER, in any case: a lowercase `i` or `v` carries no `initial` tag, and found by the v1 off-switch test, `Josep Carod i Rovira` with `i` removed from the conjunctions read suffix 'i Rovira'. A CONNECTIVE. A word that is also PARTICLE or BOUND GIVEN-NAME vocabulary — found by the suite, not foreseen: `abd` is in the credential list (ABD) and heads `Abd Allah`, and `Mohamed Ali Abd Allah` read suffix 'Abd Allah' until it was excluded. The NON-LATIN HONORIFIC words, an honorific followed by a name word being a different question from a credential followed by one (retracted by #679, below). A word that is also a title (`MD`, `Ms`, `Sr.`) does start the run: position decides, and after the name core it is the suffix. DECLINED: lifting the credential out — `John Smith PhD Jones` as given 'John', middle 'Smith', family 'Jones', suffix 'PhD', the family-comma path's old reading. It keeps every name word in a name field, but it reads a credential as something written in the middle of a name, which is the reading the rule rejects. REVERSED BY THIS ENTRY rather than edited: the #578 bullet above (`Doe, Jane PhD vd Ma` now reads suffix 'PhD vd Ma', the credential starting the given part's run), and two of the three shapes #544's ACCEPTED LIMITS kept out of the company's reach — a title standing between the credential and the member, and a member a particle chain had taken. The case rows `a_title_between_degree_and_member_keeps_it_a_name` and `a_member_the_particle_chain_took_is_out_of_reach` keep their ids and now pin the run. The third, the merged `Ph. D.`, stays out of reach: that piece is outside the walk the run is read over. MEASURED 2026-10-04, every name in `tools/differential/corpus*.jsonl` parsed on this tree and on aa401d80 with `nameparser.__file__` asserted on each side: 7 of 1,514 move, four of them this entry's own new rules.md#S2 examples. The three already in the corpus: `Jane van der Berg née Jr Jones` (suffix 'Jr Jones', where the marker's declined clause had left middle 'van der Berg née Jr'), and `John Doe, MD - PhD - FACS` and `Smith, MD - PhD - FACS`, whose dash inside the given part, a word there under every policy (#549), is now in the run: suffix 'PhD - FACS' where they read middle '-', suffix 'PhD, FACS'. The comma-part question — whether a part OPENING with a credential makes the comma a suffix comma (`John Smith, PhD Jones` still reads family 'John Smith') — is #603's. @@ -792,6 +792,7 @@ for n in ('Smith, John','Smith, XYZ'): print(n, calls_for(off.parse, n), calls_f DECIDED (Derek): retiring the two reader-side mechanisms is worth the moves -- every one is garbage input, now read consistently, and none is a released reading restored. MEASURED 2026-10-10 against 505d6dec (#632's merge), py3.11, `nameparser.__file__` asserted on each side. A particle-run grid -- `{head} {run} {tail}` for every head in (none), `Dr.`, `Freiherr`, `St`, `John`, `Dr. John`, `Freiherr von`, `John Smith`, `Sir`, `Freiherr St`; every run of one to three words over `van der de la von und mc Mc vd do Do St du`; every tail in (none), `Berg`, `MA`, `PhD`, `Ma`, `Jr.`, `Berg MA`, `Prof.`, `Berg Ph. D.`, `V`, `VI`, `X.Y.Z.`, `née Smith`, `Berg Jr. PhD`, `Berg van`, `, Jr.`, `, John` (a comma tail written against the run) -- 395,148 texts, 1,185,444 parses under the three orders, comparing the seven fields and every report (kind, detail, tokens): 774 role moves (258 texts under each order), no report-only move. Every move holds `St und`, the joined piece carrying the title tag, which master merged into the particle run in front with the tag kept and read as a title (`Freiherr Do St und Berg MA` → title 'Freiherr Do St und Berg', family 'MA'); now title 'Freiherr', family 'Do St und Berg', suffix 'MA', the name part read alike with and without the trailing 'MA'. Not a released reading: 1.4.0 reads first 'Do St und Berg', last 'MA', and 2.3.0 family 'Do St und Berg MA', and over the 258 moved texts under the default order master's seven fields equal 2.3.0's on 152, the tree's on none. The S2 stress grid (#614's recipe, above): no role move, and one text's report under its four policies -- `de Mesnil Ma do mc and Ph. D.` no longer reports 'do': P3 joins `mc and Ph. D.` into one suffix-tagged piece, the merge folds 'do' into it, and the peel takes the piece whole rather than picking 'do', the report adf6da88 did not make either and #620 added (its entry above). The #624 title-particle head grid (decisions.md#P2, 2026-10-10): 0. Every corpus name and case text, and #624's comma-tail grid, under the three orders: 0. The five differential gates exit 0, their reports identical line for line to the tree before. The 2026-10-08 prototype's 80 moves (`Dr. mc mc`) are not in the population: #624 already reads `Dr. Mc Mc` as H3 states. Recorded negative controls (2026-10-10): with the merge off, 30 tests in tests/v2 fail (32 over the whole suite, measured at the review's fix), `test_an_absorbed_particle_run_reports_as_the_one_word_the_chain_makes` among them; with the report keyed on `j > k + 1` alone, the case rows `a_particle_takes_the_dual_behind_it_at_the_head` and `a_particle_run_before_the_run_stays_one_name_word`; with the merge starting at the segment's second piece rather than past the lead, 13; with `title` kept, only `test_a_merged_particle_run_is_a_particle_and_no_title`, the unit test added for it. Cost: +3 frames on the reference row, which holds `de la` (decisions.md#parse-cost, this date). THE REVIEW (2026-10-10) found the change reaching further, every shape garbage, none given a row (Derek): no move goes the other way, and nothing moved over comma shapes (an empty or nickname-only head, a family comma's given part), connective-separated runs, runs beside a maiden marker or holding a nickname, bound given names, one-case names, or caller lexicons adding title or suffix words as particles. (1) The `St und` class is any P3 join whose left word is in both the title and particle vocabularies, `und`, `and` or `of` (`y` moves nothing: master already reads `Freiherr Do St y Berg MA` as now), a caller's title-particle included (`Freiherr Do Freiherr and Berg MA`: master title 'Freiherr Do Freiherr and Berg', family 'MA'; now title 'Freiherr', family 'Do Freiherr and Berg', suffix 'MA'). (2) A title-particle head, a particle run, then a title and a dotted word (`Freiherr van der Dr. G.J. MA`, 88 texts on its grid under each order): the run now counts as one name word, so 'G.J.' has none to spare, the read takes nothing and group's own chain takes 'Dr. G.J.' -- family 'van der Dr. G.J.', suffix 'MA', as the one-particle `Freiherr van Dr. G.J. MA` reads (master title 'Freiherr Dr.', family 'van der', suffix 'G.J. MA'). (3) H3's give-back behind a leading title where every word is suffix vocabulary, the last two a run of duals (`Dr. vd Jr. mc mc`, about 1,800 parses over two grids): the merged run is a particle piece and no suffix word, so the title stays -- title 'Dr.', family 'vd', suffix 'Jr. mc mc', where master gave 'Dr.' back as the given name with 'vd' still standing; `Dr. vd Jr. mc` still gives it back. The review also found two runs in one name unreached by any test (an off-by-one in the merge's bookkeeping passed the suite), now the rows `two_particle_runs_merge_each` and `a_second_run_of_duals_is_the_family` (parity) and a half of the merge's unit test, which also holds that a lone particle is no merged run; and the read's title run taken before the merge held only by the frame bands, now `test_the_read_takes_the_title_run_as_written_before_the_merge` (`Dr. mc Jr mc mc`, which with the run asked again after the merge, by the read or by group, reads family 'mc Jr mc mc'; the fix's own review found the group-side half unheld by a read-level test, so it pins the parse too). +- 2026-10-14 (Derek), #679 — ANY UNAMBIGUOUS SUFFIX WORD OF TWO OR MORE LETTERS STARTS THE RUN, WHATEVER ITS SCRIPT; THE HONORIFIC EXCEPTION IS RETRACTED. #602 excluded "the NON-LATIN HONORIFIC words, an honorific followed by a name word being a different question from a credential followed by one", and drew that line by script, the vocabulary having no honorific marker. #661 then added Cyrillic and Devanagari GENERATIONAL words the script line refused too, splitting Serbian by the script it is written in (#generational-words). Measured 2026-10-14 over every non-Latin suffix word (51) in six shapes under three orders (918 parses), the exception protected no correct reading: an honorific followed by a name word read as a MIDDLE name, in silence (`राम शर्मा साहब मोहन` gave middle 'शर्मा साहब', family 'मोहन'; `משה כהן ז"ל דוד` middle 'כהן ז"ל'), and dropping it reads the honorific as the suffix it is with the word behind it absorbed and reported, as `John Smith PhD Jones` reads. 360 of the 576 honorific parses move and 285 of the 342 generational ones, the same 120 and 95 under each order; the one-character honorifics (씨 様 氏 殿 군 님 양, and जी, whose vowel sign is no letter) never move, S2's two-letter minimum keeping them out already. No realistic name with a name word after an honorific was found, and no corpus name outside rules.md's own examples moves; of the three S2 examples that had pinned the refusal, two now pin the run, and the mixed-script `Taro Tanaka さん Jones` gives way to `राम शर्मा साहब मोहन`. Recompute: the words are master's `Lexicon.default().suffix_words` (after #681) whose letters are not all LATIN by Unicode name; each goes between same-script name words in the shapes `{a} {b} {w} {c}`, `{b}, {a} {w} {c}`, `{a} {b}, {w} {c}`, `{a} {b} {w} {c} {c}`, `{a} {w} {c}` and `{b} {a} {w} {c}`, under each of the three orders, keyed by the order's NAME (the first count keyed by its first role and lost an order, two orders both beginning with FAMILY); compare `as_dict()` and the ambiguity kinds with `_pieces.starts_a_credential_run`'s script test in and out. Generational words are not a class of their own here: a suffix word is a suffix word, which is what drops `_pieces._all_latin` (#681, the same day) and the need for any honorific or generational marker as #679's roster adds non-Latin words. ### indic-honorifics — the renunciate class and the Indic honorific vocabulary (2026-09-06, #346/#344/#343) @@ -826,9 +827,11 @@ Closes #661. 31 spelled-out generational words join SUFFIX_WORDS, and one predic - **CLDR is corroboration, not a source.** Its person-name samples write mlađi/млађи (hr, sr — on a woman's name too), младши/младша (bg), ifj. (hu) and जूनियर (hi), but its `generation` field also holds translations of the field LABEL rather than of the word: isizukulwane (zu), जेनेरेसन (ne), نسل (ps) and jẹnereṣọn (pcm) all mean "generation". A word is not added because CLDR has it. The wider roster (fils, yngri, الابن and the rest) is open at [#679](https://github.com/derek73/python-nameparser/issues/679), to be vetted word by word the same way. - **Excluded, each with its reason.** kıdemli (tr): a rank word (Kıdemli onbaşı); Turkish writes Jr. or a parenthesis, (oğul). sóisearach/sinsearach (ga): rank words too; Irish writes Óg and Mór, which are also inside given names (Seán Óg Ó hAilpín), so they are a separate decision and not taken here. ifj./id. (hu): written BEFORE the name (ifj. Kovács János, which H2's shape rule already reads as a title), and a bare `id` would make any trailing ID a suffix. млада (bg feminine of млади): Mlada is a borne given name, and under a family-first order the given name is the trailing word. ml./мл./st.: the abbreviations stay under the #269 deferral in suffixes.py, st. colliding with Saint besides. - **Spaced only, and what that leaves.** bg, ru and uk write a modern Jr. hyphen-glued (Теодор Рузвелт-младши, Дональд Трамп-молодший), which no whole-token set reaches; for those three the gain is mainly the historical the Elder/the Younger names, written title case (Младший), which the lowercase fold matches. -- **The #602 run start reads the letters' script, not ASCII (Derek chose the Latin-script test, 2026-10-14).** rules.md#S2 lets "an unambiguous Latin suffix word of two or more letters" start the run, and `_pieces.starts_a_credential_run` had implemented Latin as `letters.isascii()`, exact while no accented Latin word was suffix vocabulary. This entry adds the first ones (mlađi, mlađa, mladší, starší), so without a change `Pieter Bruegel stariji Jones` would read suffix 'stariji Jones' while `Antonio Pavlović mlađi Jones` kept family Jones -- one language, one construction, split by the `đ`. The test now asks a non-ASCII word whether every letter's Unicode name is a LATIN one; the ASCII test stays first, so an ASCII word pays no frame for it. The same script test is what refuses the non-Latin honorifics (`Taro Tanaka さん Jones` keeps family Jones), and it refuses this entry's Cyrillic and Devanagari generational words with them, though the reason S2 gives for the refusal -- an honorific carries no credential mark -- is not true of them. So Serbian splits by script: `Ana Horvat stariji Jones` reads suffix 'stariji Jones' and `Ана Хорват старији Џонс` family Џонс, and after a comma C1 asks the same predicate, so `Ана Хорват, старији Џонс` reads given 'старији'. ACCEPTED for this entry (Derek, 2026-10-14) and stated at rules.md#S2's Accepted clause: the vocabulary does not mark which suffix words are honorifics, a script test is the only line available, and only a name word written after the generational word reaches it. Settling it is open at [#679](https://github.com/derek73/python-nameparser/issues/679), where the non-Latin generational words multiply. The first draft of this entry credited the ASCII test to S2's honorific exclusion instead and proposed deleting it, on the evidence that deleting it moved no test and no corpus name. The design-docs review found the attribution wrong and the evidence empty: nothing pinned the test, and deleting it reads `Taro Tanaka さん Jones` as suffix 'さん Jones' and `Гай Плиний Старший Иванов` as suffix 'Старший Иванов'. Both are rules.md#S2 boundary examples now. #678 was filed on the first draft and corrected. +- **The #602 run start reads the letters' script, not ASCII (Derek chose the Latin-script test, 2026-10-14). SUPERSEDED the same day by #679 (decisions.md#S2): no script is refused now, so the split this bullet accepts is gone.** rules.md#S2 lets "an unambiguous Latin suffix word of two or more letters" start the run, and `_pieces.starts_a_credential_run` had implemented Latin as `letters.isascii()`, exact while no accented Latin word was suffix vocabulary. This entry adds the first ones (mlađi, mlađa, mladší, starší), so without a change `Pieter Bruegel stariji Jones` would read suffix 'stariji Jones' while `Antonio Pavlović mlađi Jones` kept family Jones -- one language, one construction, split by the `đ`. The test now asks a non-ASCII word whether every letter's Unicode name is a LATIN one; the ASCII test stays first, so an ASCII word pays no frame for it. The same script test is what refuses the non-Latin honorifics (`Taro Tanaka さん Jones` keeps family Jones), and it refuses this entry's Cyrillic and Devanagari generational words with them, though the reason S2 gives for the refusal -- an honorific carries no credential mark -- is not true of them. So Serbian splits by script: `Ana Horvat stariji Jones` reads suffix 'stariji Jones' and `Ана Хорват старији Џонс` family Џонс, and after a comma C1 asks the same predicate, so `Ана Хорват, старији Џонс` reads given 'старији'. ACCEPTED for this entry (Derek, 2026-10-14) and stated at rules.md#S2's Accepted clause: the vocabulary does not mark which suffix words are honorifics, a script test is the only line available, and only a name word written after the generational word reaches it. Settling it is open at [#679](https://github.com/derek73/python-nameparser/issues/679), where the non-Latin generational words multiply. The first draft of this entry credited the ASCII test to S2's honorific exclusion instead and proposed deleting it, on the evidence that deleting it moved no test and no corpus name. The design-docs review found the attribution wrong and the evidence empty: nothing pinned the test, and deleting it reads `Taro Tanaka さん Jones` as suffix 'さん Jones' and `Гай Плиний Старший Иванов` as suffix 'Старший Иванов'. Both are rules.md#S2 boundary examples now. #678 was filed on the first draft and corrected. - **Measurement (2026-10-14).** Six corpus names move, all in corpus_cldr.jsonl and all the CLDR hr/sr renderings carrying mlađi/млађи, each gaining suffix mlađi (or млађи) from a name field; cldr_agreement records 14 changes, every one toward CLDR's fields. The bg and hi renderings do not move because those locales' formats drop the generation field. The run-start change moves no name the corpus held before this entry; its one mover is S2's own `Antonio Pavlović mlađi Jones`. Of the 161 rows of tools/differential/cldr_fields.jsonl whose `generation` value `cldr_agreement.occurs()` in the text, none writing a non-ASCII generation word has a name word after it in the same part (two write given names after `II` across a comma, which ends the run's part). Recompute: `uv run python tools/differential/snapshot.py --since `. +- **2026-10-14 #679 — the rest of CLDR's roster, vetted word by word (Derek).** 76 more words join SUFFIX_WORDS (counted against master's set, none removed): the #679 block in suffixes.py, 30-odd languages. Vetting as above, run by three research passes over each language's Wikipedia (langlinks of the Jr./Sr./the Younger/the Elder articles, then the language's own search) and `tools/name_usage.py`. CLDR's `generation` field proved unreliable in about a third of languages, beyond the field-label translations: an adjective written BEFORE the name (ta இளைய, kn ಕಿರಿ, si බාල, az Kiçik, uz Kichik, tk kiçi, ba кесе, ky Кенже, kk кіші), an abbreviation nobody writes after a name (mr ज्यु., pa ਜੂ., kok धा.), a word that means "second" (chr ᏔᎵᏁ, hi द्वितीय, zh 二世 — regnal, and glued), or a word no Wikipedia uses where another is standard. Where the language's Wikipedia writes a different word after names, that word ships instead of CLDR's: lo ຈູເນຍ for ຮຸ່ນລູກ, ti ጁንየር (and am ጁኒየር) for ማንጁስ, or ଜୁନିଅର/ଜୁନିୟର୍ for ଜେଆର୍, ta இளையவர் and ஜூனியர், si ජූනියර්, mk помладиот for јуниор. EXCLUDED, each with its reason: he סניור, which Israelis bear as a surname (אלי סניור and בוריס סניור, found on he Wikipedia), and ja シニア, whose only evidence is weaker: `tools/name_usage.py` gives both spellings the same 96 Wikidata bearers as Latin Senior, with the same citizenships, because Wikidata's Senior surname item carries he and ja labels, so the count measures the English surname and not Japanese writing; left out anyway (Derek, 2026-10-14), beside its Hebrew twin — English `senior` is no suffix either, Senior being a surname (3,864 US Census); hy Ավագ (an Armenian given name, in lists that write the surname first); km ជូនៀ (a given name; ជូនៀរ ships); Ajala (a Yoruba surname); kk Джуниор and mk јуниор (a given name or a club name there); mn Жр (the initials ЖР); be мал. (also "figure"); lt jaun.; the single-letter abbreviations mr क. and as ক., which are the initial shape; ne/kok जेआर (rare; also JR); fa پدر/پسر ("father"/"son" without the article that marks ar الابن and he הבן as never a name); and the CLDR forms that are label translations or unattested (cv, chr, ak, blo, kok-Latin, kk-Arabic). PACK-SHAPED, NOT SHIPPED: fr fils/père and the Latin abbreviations ml./st. (cs, sk, sl, hr) are real and standard, but their collisions are with OTHER languages written in the same script — `Marie Fils` (767 US Census bearers of Fils) and `Jiří Dienstbier ml.` beside ML initials and St. as Saint — which is the case a locale pack exists for (the #604 `nic` precedent). No fr or cs pack exists; proposing them is open at [#684](https://github.com/derek73/python-nameparser/issues/684). The Cyrillic мл. does ship: ru, bg and sr all write it after names and nothing collides with it in Cyrillic, so a pack would protect nobody; ст. is barely attested after a name and stays out. Neither existing pack takes anything: tr and az put the junior word BEFORE the name or in a parenthesis, and Turkish baba collides inside Turkish. Measured 2026-10-14: 16 corpus names move, all CLDR renderings in is, ar, fa, gu, kn, ml, ru and cv (cv's rendering through мл.) gaining their generation word as the suffix out of a name field; cldr_agreement's default view records 4 suffix fields newly agreeing (cv, fa, is, ru) and no regression, and 40 still-wrong fields changing across the 16 renderings: 12 suffixes now the generation word alone where CLDR also holds the comma-led credential (`yngri` for `yngri þingmaður`), and 28 family, family_base and given_names fields that lost the word but still disagree. No rendering newly agrees on every role. The Burmese sample glues the Burmese comma ၊ (U+104A) to ဂျူနီယာ and is not reached, the tokenizer not splitting on it. + ### cjk-comma-demotion — the script shapes are pure, the wrappers are tolerated (2026-09-01, #469) Closes #469, and continues the corpus-tier arc below rather than standing apart from it: the tier split gave the differential somewhere to WATCH a name without promising it, and this is the first doctrine narrowing to spend that. No parser behavior moves anywhere in it. Counts are this session's and every one is recomputable from the checked-in tree — `wc -l` over tools/differential/, `uv run python tools/differential/build_shapes_corpus.py --coverage`, and one `uv run python tools/differential/compare.py --baseline X` run per baseline, read off its `corpora:` and `corpus:` lines. diff --git a/docs/design/rules.md b/docs/design/rules.md index 6b1f3362..02f972e4 100644 --- a/docs/design/rules.md +++ b/docs/design/rules.md @@ -1193,8 +1193,8 @@ S2. Rationale: generational suffixes and credentials are recognized word, which reads wholly as the credential run. A member its own capitals already made the credential reports nothing new. A credential after the name core starts a run to the end of its - part (#602). An unambiguous Latin suffix word of two or more - letters, standing after two name words where no comma divides + part (#602). An unambiguous suffix word of two or more letters, + in any script, standing after two name words where no comma divides the name or before a suffix comma, or after the given word in the part after a family comma, makes every later word of that part a suffix, except a title word, which reads as a title, and @@ -1211,9 +1211,10 @@ S2. Rationale: generational suffixes and credentials are recognized A title word never starts the run, and neither does a member of the ambiguous class, a single letter, a connective, a word that is also - particle or bound given-name vocabulary, or a non-Latin honorific - word: a credential is the writer's mark that the post-nominals - have begun, and those carry no such mark. A name word the run + particle or bound given-name vocabulary: a credential is the + writer's mark that the post-nominals have begun, and those carry + no such mark. An honorific or a generational word carries it as + a credential does, whatever its script. A name word the run absorbs is reported `suffix-or-name`. An unlisted word joins this same ambiguous class by SHAPE where the caller asks for it. Two or more period-separated chunks is @@ -1241,6 +1242,11 @@ S2. Rationale: generational suffixes and credentials are recognized "Antonio Pavlović mlađi" → family="Pavlović" "Antonio Pavlović mlađi" → suffix="mlađi" "Агриппина Младшая" → suffix="Младшая" + "جورج بوش الابن" → suffix="الابن" + "ロバート・ダウニー・ジュニア" → suffix="ジュニア" + "Питер Брейгель мл." → suffix="мл." + "Marie Fils" → family="Fils" · boundary + "Jiří Dienstbier ml." → family="ml." · boundary "Pavlović, Antonio mlađi" → suffix="mlađi" "Stariji Bruegel" → given="Stariji" · boundary "John Smith M.A." → suffix="M.A." @@ -1309,8 +1315,10 @@ S2. Rationale: generational suffixes and credentials are recognized "Mohamed Ali Abd Allah" → family="Allah" "Antonio Pavlović mlađi Jones" → suffix="mlađi Jones" "Pieter Bruegel stariji Jones" → suffix="stariji Jones" - "Гай Плиний Старший Иванов" → family="Иванов" · boundary - "Taro Tanaka さん Jones" → family="Jones" · boundary + "Ана Хорват старији Џонс" → suffix="старији Џонс" + "Гай Плиний Старший Иванов" → suffix="Старший Иванов" + "राम शर्मा साहब मोहन" → suffix="साहब मोहन" + "राम शर्मा साहब मोहन" → ambiguities=("suffix-or-name",) "John PhD Smith" → family="Smith" · boundary Accepted: a title before the credential keeps it a credential, and the name loses its surname exactly as it did before this @@ -1362,14 +1370,6 @@ S2. Rationale: generational suffixes and credentials are recognized and unchanged (decisions.md#v1-xfail-triage: `king` stays a title, for the addressing forms). "Dr Jr" → suffix="Jr" - Accepted: the non-Latin refusal is drawn by script, because the - vocabulary does not say which suffix words are honorifics, so a - generational word in another script does not start the run - either, and Serbian reads by the script it is written in. Only a - name word written after the generational word reaches the - difference (decisions.md#generational-words, open at #679). - "Ana Horvat stariji Jones" → suffix="stariji Jones" - "Ана Хорват старији Џонс" → family="Џонс" · boundary history: decisions.md#S2 · interacts: H1, H2, H3, H5, C1, C2, S3, P1, P2, P3, P5, P6, M2 · implemented: nameparser/_pipeline/_assign.py, nameparser/_pipeline/_classify.py, nameparser/_pipeline/_group.py, nameparser/_pipeline/_pieces.py, nameparser/_pipeline/_vocab.py S3. Rationale: credentials are often written run together with diff --git a/docs/release_log.rst b/docs/release_log.rst index e6585a9f..f3f2c728 100644 --- a/docs/release_log.rst +++ b/docs/release_log.rst @@ -6,7 +6,7 @@ Release Log **Behavior Changes** - - **Add junior and senior in other languages as suffixes.** ``Antonio Pavlović mlađi`` gives last ``Pavlović``, suffix ``mlađi``, where 1.4.0 through 2.4.2 gave middle ``Pavlović``, last ``mlađi``; the words are Croatian, Serbian, Bosnian, Bulgarian, Russian, Ukrainian, Czech, Slovak, Finnish, Lithuanian and Hindi, written as a separate word after the name. :issue:`661` + - **Add junior and senior in other languages as suffixes.** ``Antonio Pavlović mlađi`` gives last ``Pavlović``, suffix ``mlađi``, where 1.4.0 through 2.4.2 gave middle ``Pavlović``, last ``mlađi``. The words come from 45 languages and are read when written as a separate word after the name. :issue:`661`, :issue:`679` * 2.4.2 - October 13, 2026 diff --git a/nameparser/_pipeline/_pieces.py b/nameparser/_pipeline/_pieces.py index 705f50db..1be5733e 100644 --- a/nameparser/_pipeline/_pieces.py +++ b/nameparser/_pipeline/_pieces.py @@ -466,20 +466,19 @@ def is_suffix_piece(piece: Sequence[int], ptags: Set[str], # the given-part walk (mechanisms.md#ONE-PREDICATE-PER-QUESTION) def starts_a_credential_run(piece: Sequence[int], ptags: Set[str], tokens: Sequence[WorkToken]) -> bool: - """Whether one piece starts #602's run: an unambiguous LATIN - suffix word of two or more letters -- a credential acronym or a - generational word -- that no other vocabulary claims as a name. + """Whether one piece starts #602's run: an unambiguous suffix + word of two or more letters, in any script -- a credential acronym, + a generational word or an honorific -- that no other vocabulary + claims as a name. `is_suffix_piece` already refuses the ambiguous class and an initial-shaped letter. Refused here: any single letter (a lowercase `i` or `v` mid-name is an initial or a connective far more often than a numeral, and carries no `initial` tag), a connective, a word that is also bound given-name or particle vocabulary (`abd` - heads `Abd Allah`; `vd`, `mc`), and a word with a letter of another - script, which is what refuses the non-Latin honorifics (`Taro - Tanaka さん Jones` keeps family 'Jones'). Latin means the letters' - Unicode names, not ASCII: #661's `mlađi` starts the run as `stariji` - does (decisions.md#generational-words, #678). + heads `Abd Allah`; `vd`, `mc`). No script is refused: an honorific + starts the run as a credential does (#679, decisions.md#S2), so + `Ана Хорват старији Џонс` reads as `Ana Horvat stariji Jones` does. The split credential group merges ('Ph. D.', the one piece carrying the "suffix" piece tag) starts it as its one-token spelling 'PhD' @@ -504,16 +503,7 @@ def starts_a_credential_run(piece: Sequence[int], ptags: Set[str], return False # C-level, no generator frame per character letters = "".join(filter(str.isalpha, tok.text.lower())) - return len(letters) >= 2 and (letters.isascii() - or _all_latin(letters)) - - -def _all_latin(letters: str) -> bool: - """Whether every letter is a Latin one by its Unicode name. Asked - only of a non-ASCII word, so the ASCII test above keeps the common - case free of a frame per letter.""" - return all(unicodedata.name(c, "").startswith("LATIN ") - for c in letters) + return len(letters) >= 2 #: tags of suffix words another vocabulary claims as a name word or a diff --git a/nameparser/config/suffixes.py b/nameparser/config/suffixes.py index 5fde4e5c..1d154254 100644 --- a/nameparser/config/suffixes.py +++ b/nameparser/config/suffixes.py @@ -6,7 +6,8 @@ # 'ст' especially is a plausible false-positive risk (many two- # letter Cyrillic abbreviations exist), and both are short enough # to worry about. Not shipped in this pass. The spelled-out words - # ship since #661 (the block below 'vet'); the abbreviations do not. + # ship since #661 (the block below 'vet'), and мл since #679, which + # found nothing it collides with in Cyrillic; ст stays deferred. 'esq', 'esquire', 'jr', @@ -39,7 +40,7 @@ # in decisions.md#generational-words: kıdemli, sóisearach and # sinsearach (rank words, not generations), Hungarian ifj./id. # (written BEFORE the name), Bulgarian млада (a given name), and the - # abbreviations ml./мл./st. (the #269 deferral above). + # abbreviations ml./st. (#679 ships мл.; see the deferral above). 'mlađi', 'mlađa', 'stariji', 'starija', # hr/sr/bs Latin 'млађи', 'млађа', 'старији', 'старија', # sr Cyrillic 'младши', 'младша', 'старши', 'старша', # bg; старша is uk too @@ -51,6 +52,53 @@ 'jaunesnysis', 'jaunesnioji', # lt 'vyresnysis', 'vyresnioji', # lt 'जूनियर', 'जुनियर', 'सीनियर', # hi, junior in both u spellings + # #679: the rest of CLDR's `generation` samples, vetted the same + # way. CLDR is a lead, not a source: where its word is a label + # translation, an adjective written BEFORE the name, or unused, the + # word the language's Wikipedia writes after names ships instead + # (lo, ti, or, ta, si, mk). Transliterations of "senior" ship, but + # not Hebrew סניור, which Israelis bear as a surname (אלי סניור), nor + # Japanese シニア (decisions.md#generational-words); English + # `senior` is not a suffix at all, Senior being a surname. + # Left out with reasons in decisions.md#generational-words, + # including fils/père and the Latin ml./st., which collide outside + # their languages and wait on a pack. + 'yngri', 'eldri', # is + 'jaunākais', 'jaunākā', 'vecākais', 'vecākā', # lv + 'малодшы', 'малодшая', 'старэйшы', 'старэйшая', # be + 'помладиот', 'постариот', # mk + 'mlajši', 'mlajša', 'starejši', 'starejša', # sl + 'mladšia', 'staršia', # sk feminine + 'мл', # ru/bg/sr мл. + 'τζούνιορ', 'σίνιορ', # el + 'կրտսեր', # hy + 'უმცროსი', 'უფროსი', # ka + "ג'וניור", 'ג׳וניור', 'ג’וניור', # he, three apostrophes + 'הבן', 'האב', # he the son / the father + 'الابن', 'الإبن', 'الأب', # ar the son / the father + 'جونيور', 'سينيور', # ar + 'جونیئر', 'جونيئر', 'جونئیر', 'سینئر', 'سینیئر', # ur/sd + 'جونیور', 'سینیور', # fa + 'ज्युनियर', 'ज्यूनियर', # mr + 'কনিষ্ঠ', 'জ্যেষ্ঠ', 'জুনিয়ৰ', # as + 'জুনিয়র', 'সিনিয়র', # bn + 'ਜੂਨੀਅਰ', 'ਸੀਨੀਅਰ', # pa + 'જુનિયર', 'જૂનિયર', 'સિનિયર', # gu + 'ଜୁନିଅର', 'ଜୁନିୟର୍', # or + 'இளையவர்', 'மூத்தவர்', 'ஜூனியர்', # ta + 'జూనియర్', 'సీనియర్', # te + 'ಜೂನಿಯರ್', # kn + 'ജൂനിയർ', 'സീനിയർ', # ml + 'ජූනියර්', # si + 'ジュニア', # ja + '주니어', '시니어', # ko + 'จูเนียร์', 'ซีเนียร์', # th + 'ຈູເນຍ', # lo + 'ဂျူနီယာ', # my + 'ၵျူႇၼီႇယႃႇ', # shn + 'ជូនៀរ', # km + 'ጁንየር', 'ጁኒየር', # ti, am + 'ƙarami', # ha the Younger # #269 follow-up: Hebrew post-nominals, both gershayim spellings # (ASCII '"' and U+05F4); the mid-word quote is inert in diff --git a/tests/v2/cases.py b/tests/v2/cases.py index da8a9b19..e26a3e9c 100644 --- a/tests/v2/cases.py +++ b/tests/v2/cases.py @@ -1003,6 +1003,21 @@ def _check_cjk_shape_purity(self) -> None: {"given": "बलबीर", "family": "सिंह", "suffix": "सीनियर"}, classification="fix(#661)", notes="1.4.0 and 2.4.2 read middle 'सिंह', family 'सीनियर'"), + Case("a_generational_word_in_hangul_comes_off_before_the_order", + "로버트 다우니 주니어", + {"given": "다우니", "family": "로버트", "suffix": "주니어"}, + classification="fix(#679)", + notes="the suffix peels before the wholly-hangul name reads " + "family-first by script (rules.md#W4), so the transcribed " + "Robert is the family name as it was before; 2.4.2 read " + "middle '주니어', and 1.4.0 family '주니어'"), + Case("a_generational_word_after_a_nakaguro", "ロバート・ダウニー・ジュニア", + {"given": "ロバート", "family": "ダウニー", "suffix": "ジュニア"}, + classification="fix(#679)", + notes="the nakaguro separates tokens, so the katakana Jr. is " + "a word of its own; pure katakana keeps the positional " + "order. 2.4.2 read middle 'ダウニー', family 'ジュニア'; " + "1.4.0 read the whole text as the first name"), Case("a_title_inside_the_run_is_a_title", "Eric H. Holder Jr. Attorney General", {"title": "Attorney General", "given": "Eric", "middle": "H.", diff --git a/tests/v2/pipeline/test_post_rules.py b/tests/v2/pipeline/test_post_rules.py index c2e4077b..9cc913da 100644 --- a/tests/v2/pipeline/test_post_rules.py +++ b/tests/v2/pipeline/test_post_rules.py @@ -28,9 +28,10 @@ given_name_titles=frozenset({"sir"}), particles=frozenset({"de", "der", "ibn", "la", "van", "vd"}), particles_ambiguous=frozenset({"la", "van"}), - # `씨` is a suffix word that starts no credential run (rules.md#S2, - # #602: an honorific word never does), the filler a test needs - # where a credential would now take the rest of the part + # `씨` is a ONE-LETTER suffix word, which starts no credential run + # (rules.md#S2's two-letter minimum -- any longer suffix word would, + # an honorific included since #679), the filler a test needs where + # a credential would now take the rest of the part suffix_words=frozenset({"jr", "씨"}), # `vd` mirrors its shipped dual membership -- particle AND # UNAMBIGUOUS suffix acronym -- which is what puts a name on P6's @@ -829,8 +830,9 @@ def test_a_suffix_word_mid_run_ends_the_chain( # Without it the whole leftover is ONE unit and lands in one field. # Three leftover units here, so this is also the only place the two # orders are pinned apart at a count other than two. The suffix word - # is an honorific because a credential here would start #602's run - # and take `Juan` with it (rules.md#S2); it was `MD` until then. + # is one letter because a longer one -- a credential, or since #679 + # an honorific -- would start #602's run and take `Juan` with it + # (rules.md#S2); it was `MD` until #602. out = _parsed("de Mesnil van Berg 씨 Juan", policy) assert _by_role(out, Role.FAMILY) == "de Mesnil" assert _by_role(out, Role.GIVEN) == given diff --git a/tools/differential/cldr_agreement.json b/tools/differential/cldr_agreement.json index b8adba6e..a602b5d9 100644 --- a/tools/differential/cldr_agreement.json +++ b/tools/differential/cldr_agreement.json @@ -377,11 +377,11 @@ "ar/foreignFull/givenFirst": { "family": { "expected": "فون برول", - "got": "الدكتور عايدة كورنيليا سيزار مارتن فون برول الإبن" + "got": "الدكتور عايدة كورنيليا سيزار مارتن فون برول" }, "family_base": { "expected": "برول", - "got": "الدكتور عايدة كورنيليا سيزار مارتن فون برول الإبن" + "got": "الدكتور عايدة كورنيليا سيزار مارتن فون برول" }, "family_particles": { "expected": "فون", @@ -393,7 +393,7 @@ }, "suffix": { "expected": "الإبن طبيب وجراح", - "got": "" + "got": "الإبن" }, "text": "الدكتور عايدة كورنيليا سيزار مارتن فون برول الإبن، طبيب وجراح", "title": { @@ -448,11 +448,11 @@ "ar/nativeFull/givenFirst": { "family": { "expected": "أبو الأغا", - "got": "السيد أحمد رامي نجيب محفوظ أبو الأغا الابن" + "got": "السيد أحمد رامي نجيب محفوظ أبو الأغا" }, "family_base": { "expected": "الأغا", - "got": "السيد أحمد رامي نجيب محفوظ الأغا الابن" + "got": "السيد أحمد رامي نجيب محفوظ الأغا" }, "given_names": { "expected": "أحمد رامي نجيب محفوظ", @@ -460,7 +460,7 @@ }, "suffix": { "expected": "الابن النائب", - "got": "" + "got": "الابن" }, "text": "السيد أحمد رامي نجيب محفوظ أبو الأغا الابن، النائب", "title": { @@ -2107,11 +2107,7 @@ }, "given_names": { "expected": "Ада Корнелия Сезар Мартин", - "got": "Ада Корнелия Сезар Мартин фон Брюль — мл." - }, - "suffix": { - "expected": "мл. к.м.н.", - "got": "к.м.н." + "got": "Ада Корнелия Сезар Мартин фон Брюль —" }, "text": "проф., д-р Ада Корнелия Сезар Мартин фон Брюль — мл., к.м.н.", "title": { @@ -2854,11 +2850,11 @@ "fa/foreignFull/givenFirst": { "family": { "expected": "وان بروهل", - "got": "پروفسور آدا کورنلیا سزار مارتین وان بروهل جونیور" + "got": "پروفسور آدا کورنلیا سزار مارتین وان بروهل" }, "family_base": { "expected": "بروهل", - "got": "پروفسور آدا کورنلیا سزار مارتین وان بروهل جونیور" + "got": "پروفسور آدا کورنلیا سزار مارتین وان بروهل" }, "family_particles": { "expected": "وان", @@ -2870,7 +2866,7 @@ }, "suffix": { "expected": "جونیور دکترای دندانپزشکی", - "got": "" + "got": "جونیور" }, "text": "پروفسور آدا کورنلیا سزار مارتین وان بروهل جونیور، دکترای دندانپزشکی", "title": { @@ -2904,11 +2900,7 @@ }, "given_names": { "expected": "آدا کورنلیا سزار مارتین", - "got": "پروفسور آدا کورنلیا سزار مارتین جونیور" - }, - "suffix": { - "expected": "جونیور دکترای دندانپزشکی", - "got": "دکترای دندانپزشکی" + "got": "پروفسور آدا کورنلیا سزار مارتین" }, "text": "وان بروهل، پروفسور آدا کورنلیا سزار مارتین جونیور، دکترای دندانپزشکی", "title": { @@ -3586,11 +3578,11 @@ "gu/foreignFull/givenFirst": { "family": { "expected": "ફૉન્ બ્રાઑલ્", - "got": "પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન ફૉન્ બ્રાઑલ્ જૂનિયર" + "got": "પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન ફૉન્ બ્રાઑલ્" }, "family_base": { "expected": "બ્રાઑલ્", - "got": "પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન ફૉન્ બ્રાઑલ્ જૂનિયર" + "got": "પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન ફૉન્ બ્રાઑલ્" }, "family_particles": { "expected": "ફૉન્", @@ -3602,7 +3594,7 @@ }, "suffix": { "expected": "જૂનિયર એમ.ડી. ડી.ડી.એસ.", - "got": "" + "got": "જૂનિયર" }, "text": "પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન ફૉન્ બ્રાઑલ્ જૂનિયર, એમ.ડી. ડી.ડી.એસ.", "title": { @@ -3628,11 +3620,11 @@ "gu/foreignFull/surnameFirst": { "family": { "expected": "ફૉન્ બ્રાઑલ્", - "got": "ફૉન્ બ્રાઑલ્ પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન જૂનિયર" + "got": "ફૉન્ બ્રાઑલ્ પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન" }, "family_base": { "expected": "બ્રાઑલ્", - "got": "ફૉન્ બ્રાઑલ્ પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન જૂનિયર" + "got": "ફૉન્ બ્રાઑલ્ પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન" }, "family_particles": { "expected": "ફૉન્", @@ -3644,7 +3636,7 @@ }, "suffix": { "expected": "જૂનિયર એમ.ડી. ડી.ડી.એસ.", - "got": "" + "got": "જૂનિયર" }, "text": "ફૉન્ બ્રાઑલ્ પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન જૂનિયર, એમ.ડી. ડી.ડી.એસ.", "title": { @@ -3677,11 +3669,11 @@ "gu/nativeFull/givenFirst": { "family": { "expected": "પટેલ કુમાર શાહ", - "got": "શ્રી. પટેલ ખુશી કિંજલ કુમાર શાહ જૂનિયર" + "got": "શ્રી. પટેલ ખુશી કિંજલ કુમાર શાહ" }, "family_base": { "expected": "પટેલ શાહ", - "got": "શ્રી. પટેલ ખુશી કિંજલ કુમાર શાહ જૂનિયર" + "got": "શ્રી. પટેલ ખુશી કિંજલ કુમાર શાહ" }, "family_particles": { "expected": "કુમાર", @@ -3693,7 +3685,7 @@ }, "suffix": { "expected": "જૂનિયર એમપી", - "got": "" + "got": "જૂનિયર" }, "text": "શ્રી. પટેલ ખુશી કિંજલ કુમાર શાહ જૂનિયર, એમપી", "title": { @@ -3723,11 +3715,11 @@ "gu/nativeFull/surnameFirst": { "family": { "expected": "કુમાર શાહ પટેલ", - "got": "કુમાર શાહ શ્રી. પટેલ ખુશી કિંજલ જૂનિયર" + "got": "કુમાર શાહ શ્રી. પટેલ ખુશી કિંજલ" }, "family_base": { "expected": "શાહ પટેલ", - "got": "કુમાર શાહ શ્રી. પટેલ ખુશી કિંજલ જૂનિયર" + "got": "કુમાર શાહ શ્રી. પટેલ ખુશી કિંજલ" }, "family_particles": { "expected": "કુમાર", @@ -3739,7 +3731,7 @@ }, "suffix": { "expected": "જૂનિયર એમપી", - "got": "" + "got": "જૂનિયર" }, "text": "કુમાર શાહ શ્રી. પટેલ ખુશી કિંજલ જૂનિયર, એમપી", "title": { @@ -4899,11 +4891,7 @@ }, "given_names": { "expected": "Sigríður Jóna Valgerður Fanndís", - "got": "Bjarnadóttir dr. Sigríður Jóna Valgerður Fanndís yngri" - }, - "suffix": { - "expected": "yngri M.A. í bókmenntafræði", - "got": "M.A. í bókmenntafræði" + "got": "Bjarnadóttir dr. Sigríður Jóna Valgerður Fanndís" }, "text": "von Bjarnadóttir dr. Sigríður Jóna Valgerður Fanndís yngri, M.A. í bókmenntafræði", "title": { @@ -4992,11 +4980,11 @@ "is/nativeFull/surnameFirst": { "family": { "expected": "Skeggjason", - "got": "Skeggjason Hr. Geir Jón Magnús Brynjar yngri" + "got": "Skeggjason Hr. Geir Jón Magnús Brynjar" }, "family_base": { "expected": "Skeggjason", - "got": "Skeggjason Hr. Geir Jón Magnús Brynjar yngri" + "got": "Skeggjason Hr. Geir Jón Magnús Brynjar" }, "given_names": { "expected": "Geir Jón Magnús Brynjar", @@ -5004,7 +4992,7 @@ }, "suffix": { "expected": "yngri þingmaður", - "got": "" + "got": "yngri" }, "text": "Skeggjason Hr. Geir Jón Magnús Brynjar yngri, þingmaður", "title": { @@ -5944,11 +5932,11 @@ "kn/foreignFull/givenFirst": { "family": { "expected": "ವಾನ್ ಬ್ರಾಲ್", - "got": "ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ವಾನ್ ಬ್ರಾಲ್ ಜೂನಿಯರ್" + "got": "ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ವಾನ್ ಬ್ರಾಲ್" }, "family_base": { "expected": "ಬ್ರಾಲ್", - "got": "ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ವಾನ್ ಬ್ರಾಲ್ ಜೂನಿಯರ್" + "got": "ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ವಾನ್ ಬ್ರಾಲ್" }, "family_particles": { "expected": "ವಾನ್", @@ -5960,7 +5948,7 @@ }, "suffix": { "expected": "ಜೂನಿಯರ್ ಎಂ.ಡಿ ಡಿ.ಡಿ.ಎಸ್", - "got": "" + "got": "ಜೂನಿಯರ್" }, "text": "ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ವಾನ್ ಬ್ರಾಲ್ ಜೂನಿಯರ್, ಎಂ.ಡಿ ಡಿ.ಡಿ.ಎಸ್", "title": { @@ -5986,11 +5974,11 @@ "kn/foreignFull/surnameFirst": { "family": { "expected": "ವಾನ್ ಬ್ರಾಲ್", - "got": "ವಾನ್ ಬ್ರಾಲ್ ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ಜೂನಿಯರ್" + "got": "ವಾನ್ ಬ್ರಾಲ್ ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್" }, "family_base": { "expected": "ಬ್ರಾಲ್", - "got": "ವಾನ್ ಬ್ರಾಲ್ ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ಜೂನಿಯರ್" + "got": "ವಾನ್ ಬ್ರಾಲ್ ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್" }, "family_particles": { "expected": "ವಾನ್", @@ -6002,7 +5990,7 @@ }, "suffix": { "expected": "ಜೂನಿಯರ್ ಎಂ.ಡಿ ಡಿ.ಡಿ.ಎಸ್", - "got": "" + "got": "ಜೂನಿಯರ್" }, "text": "ವಾನ್ ಬ್ರಾಲ್ ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ಜೂನಿಯರ್, ಎಂ.ಡಿ ಡಿ.ಡಿ.ಎಸ್", "title": { @@ -7248,11 +7236,11 @@ "ml/foreignFull/surnameFirst": { "family": { "expected": "വാൻ ബ്ര്യൂൾ", - "got": "വാൻ ബ്ര്യൂൾ പ്രൊഫ. ഡോ. എയ്‌ഡ കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ ജൂനിയർ" + "got": "വാൻ ബ്ര്യൂൾ പ്രൊഫ. ഡോ. എയ്‌ഡ കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ" }, "family_base": { "expected": "ബ്ര്യൂൾ", - "got": "വാൻ ബ്ര്യൂൾ പ്രൊഫ. ഡോ. എയ്‌ഡ കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ ജൂനിയർ" + "got": "വാൻ ബ്ര്യൂൾ പ്രൊഫ. ഡോ. എയ്‌ഡ കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ" }, "family_particles": { "expected": "വാൻ", @@ -7264,7 +7252,7 @@ }, "suffix": { "expected": "ജൂനിയർ എം.ഡി. ഡി.ഡി.എസ്", - "got": "" + "got": "ജൂനിയർ" }, "text": "വാൻ ബ്ര്യൂൾ പ്രൊഫ. ഡോ. എയ്‌ഡ കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ ജൂനിയർ, എം.ഡി. ഡി.ഡി.എസ്", "title": { @@ -7316,11 +7304,11 @@ "ml/nativeFull/surnameFirst": { "family": { "expected": "കറുവാപ്പറമ്പിൽ", - "got": "കറുവാപ്പറമ്പിൽ ശ്രീ. തോമസ് കുരുവിള അന്തോണി ജൂനിയർ" + "got": "കറുവാപ്പറമ്പിൽ ശ്രീ. തോമസ് കുരുവിള അന്തോണി" }, "family_base": { "expected": "കറുവാപ്പറമ്പിൽ", - "got": "കറുവാപ്പറമ്പിൽ ശ്രീ. തോമസ് കുരുവിള അന്തോണി ജൂനിയർ" + "got": "കറുവാപ്പറമ്പിൽ ശ്രീ. തോമസ് കുരുവിള അന്തോണി" }, "given_names": { "expected": "തോമസ് കുരുവിള അന്തോണി", @@ -7328,7 +7316,7 @@ }, "suffix": { "expected": "ജൂനിയർ എംപി", - "got": "" + "got": "ജൂനിയർ" }, "text": "കറുവാപ്പറമ്പിൽ ശ്രീ. തോമസ് കുരുവിള അന്തോണി ജൂനിയർ, എംപി", "title": { @@ -9500,11 +9488,7 @@ }, "given_names": { "expected": "Ада Корнелия Сезар Мартин", - "got": "Ада Корнелия Сезар Мартин фон Брюль — мл." - }, - "suffix": { - "expected": "мл. к. м. н.", - "got": "к. м. н." + "got": "Ада Корнелия Сезар Мартин фон Брюль —" }, "text": "проф., д-р Ада Корнелия Сезар Мартин фон Брюль — мл., к. м. н.", "title": { diff --git a/tools/differential/cldr_agreement_locales.json b/tools/differential/cldr_agreement_locales.json index 1dc5a87e..34e657f1 100644 --- a/tools/differential/cldr_agreement_locales.json +++ b/tools/differential/cldr_agreement_locales.json @@ -306,11 +306,7 @@ }, "given_names": { "expected": "Ада Корнелия Сезар Мартин", - "got": "Ада Корнелия Сезар Мартин фон Брюль — мл." - }, - "suffix": { - "expected": "мл. к. м. н.", - "got": "к. м. н." + "got": "Ада Корнелия Сезар Мартин фон Брюль —" }, "text": "проф., д-р Ада Корнелия Сезар Мартин фон Брюль — мл., к. м. н.", "title": { diff --git a/tools/differential/corpus_cjk.jsonl b/tools/differential/corpus_cjk.jsonl index 8c2f1730..b5c8a744 100644 --- a/tools/differential/corpus_cjk.jsonl +++ b/tools/differential/corpus_cjk.jsonl @@ -28,6 +28,7 @@ "マイケル." "マイケル·ジャクソン" "マイケル・ジャクソン" +"ロバート・ダウニー・ジュニア" "佐々木 太郎" "佐藤 花子 \"旧姓・田中\" (旧姓 鈴木)" "司马相如" @@ -135,6 +136,7 @@ "남궁" "남궁민수" "남궁민수, 지훈" +"로버트 다우니 주니어" "마이클·잭슨" "마틴 킹, MA" "선생님" diff --git a/tools/differential/corpus_rules.jsonl b/tools/differential/corpus_rules.jsonl index 6c5dd75c..a6150dd2 100644 --- a/tools/differential/corpus_rules.jsonl +++ b/tools/differential/corpus_rules.jsonl @@ -11,7 +11,6 @@ "Ali Ahmad Vali oglu" "Ali Ahmad Vali oglu Jr." "Ali Ahmad oglu" -"Ana Horvat stariji Jones" "Andrew" "Andrew (Andy) Perkins" "Andrew Perkins (Andy)" @@ -187,6 +186,7 @@ "Jean 'JD' Smith" "Jean DUPONT" "Jean Pierre DUPONT" +"Jiří Dienstbier ml." "John . Smith" "John Doctor Smith" "John Ma" @@ -310,6 +310,7 @@ "Maria Kowalska z domu Nowak" "Maria Luisa y de la Cruz" "Maria López née García Pérez" +"Marie Fils" "Marquess of Bath" "Mary Beth Smith" "Mary Jane King" @@ -425,7 +426,6 @@ "Stariji Bruegel" "Steven Hardman, MD, DO, DDS" "Steven Hardman, RN - CRNA" -"Taro Tanaka さん Jones" "The Right Hon. the President of the Queen's Bench Division" "Van Buren, Ed" "Van Johnson" @@ -525,15 +525,19 @@ "Ана Хорват старији Џонс" "Гай Плиний Старший Иванов" "Иван Петрович Абрамович" +"Питер Брейгель мл." "Сидоров Иван Петрович" "Хосе И Мария Сантос" +"جورج بوش الابن" "سلمان، محمد" +"राम शर्मा साहब मोहन" "প্রকৌশলী. Sen" "김. 민준" "ア゙イ タロウ" "マイケル ジャクソン" "マイケル ジャクソン" "マイケル・ジャクソン" +"ロバート・ダウニー・ジュニア" "威廉·莎士比亚" "威廉・莎士比亚" "安东尼·陈志明" diff --git a/tools/differential/snapshot.jsonl b/tools/differential/snapshot.jsonl index 1c3b8bb3..5df496f3 100644 --- a/tools/differential/snapshot.jsonl +++ b/tools/differential/snapshot.jsonl @@ -95,7 +95,6 @@ {"name": "Amy E Maid", "given": "Amy", "middle": "E", "family": "Maid", "initials": "A. E. M."} {"name": "Amy E. Maid", "given": "Amy", "middle": "E.", "family": "Maid", "initials": "A. E. M."} {"name": "An tOll. An Dr. Brigid Aoibhe Sophia de Bhulbh", "given": "An", "middle": "tOll. An Dr. Brigid Aoibhe Sophia", "family": "de Bhulbh", "initials": "A. t. A. D. B. A. S. B."} -{"name": "Ana Horvat stariji Jones", "given": "Ana", "family": "Horvat", "suffix": "stariji Jones", "ambiguities": ["SUFFIX_OR_NAME"], "initials": "A. H."} {"name": "Ana Marija Vera Kovač", "given": "Ana", "middle": "Marija Vera", "family": "Kovač", "initials": "A. M. V. K."} {"name": "Ana Torres", "given": "Ana", "family": "Torres", "initials": "A. T."} {"name": "Andersen Irene", "order": "FAMILY_FIRST", "given": "Irene", "family": "Andersen", "initials": "I. A."} @@ -847,6 +846,7 @@ {"name": "Jill St. John", "given": "Jill", "family": "St. John", "initials": "J. J."} {"name": "Jiří", "given": "Jiří", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "J."} {"name": "Jiří", "order": "FAMILY_FIRST", "family": "Jiří", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "J."} +{"name": "Jiří Dienstbier ml.", "given": "Jiří", "middle": "Dienstbier", "family": "ml.", "initials": "J. D. m."} {"name": "Jo Ann", "given": "Jo", "family": "Ann", "initials": "J. A."} {"name": "Joao da Silva Do Amaral de Souza", "given": "Joao", "middle": "da Silva Do Amaral", "family": "de Souza", "initials": "J. S. A. S."} {"name": "Joao da Silva do Amaral de Souza", "given": "Joao", "middle": "da Silva do Amaral", "family": "de Souza", "initials": "J. S. A. S."} @@ -1300,6 +1300,7 @@ {"name": "Maria Silva", "given": "Maria", "family": "Silva", "initials": "M. S."} {"name": "Maria Wijaya", "given": "Maria", "family": "Wijaya", "initials": "M. W."} {"name": "Mariam Geedi Hamish Hussein", "given": "Mariam", "middle": "Geedi Hamish", "family": "Hussein", "initials": "M. G. H. H."} +{"name": "Marie Fils", "given": "Marie", "family": "Fils", "initials": "M. F."} {"name": "Marie-Agnès Suzanne Gilot", "given": "Marie-Agnès", "middle": "Suzanne", "family": "Gilot", "initials": "M. S. G."} {"name": "Marijana Tomislav Babić", "given": "Marijana", "middle": "Tomislav", "family": "Babić", "initials": "M. T. B."} {"name": "Mario", "given": "Mario", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "M."} @@ -1678,7 +1679,7 @@ {"name": "Sir de Mesnil", "title": "Sir", "family": "de Mesnil", "initials": "M."} {"name": "Sister Mary", "title": "Sister", "given": "Mary", "initials": "M."} {"name": "Sister Souljah", "title": "Sister", "given": "Souljah", "initials": "S."} -{"name": "Skeggjason Hr. Geir Jón Magnús Brynjar yngri, þingmaður", "order": "FAMILY_FIRST", "given": "þingmaður", "family": "Skeggjason Hr. Geir Jón Magnús Brynjar yngri", "initials": "þ. S. H. G. J. M. B. y."} +{"name": "Skeggjason Hr. Geir Jón Magnús Brynjar yngri, þingmaður", "order": "FAMILY_FIRST", "given": "þingmaður", "family": "Skeggjason Hr. Geir Jón Magnús Brynjar", "suffix": "yngri", "initials": "þ. S. H. G. J. M. B."} {"name": "Slovák Ján Matej", "order": "FAMILY_FIRST", "given": "Ján", "middle": "Matej", "family": "Slovák", "initials": "J. M. S."} {"name": "Slovák, Ján Matej", "given": "Ján", "middle": "Matej", "family": "Slovák", "initials": "J. M. S."} {"name": "Smith", "given": "Smith", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "S."} @@ -1841,7 +1842,6 @@ {"name": "Szabados, Máté Bendegúz", "given": "Máté", "middle": "Bendegúz", "family": "Szabados", "initials": "M. B. S."} {"name": "Tammik hr Mari-Ann Henri Roobert parlamendiliige", "order": "FAMILY_FIRST", "given": "hr", "middle": "Mari-Ann Henri Roobert parlamendiliige", "family": "Tammik", "initials": "h. M. H. R. p. T."} {"name": "Tammik, Mari-Ann Henri Roobert, parlamendiliige", "given": "Mari-Ann", "middle": "Henri Roobert", "family": "Tammik", "suffix": "parlamendiliige", "ambiguities": ["COMMA_STRUCTURE"], "initials": "M. H. R. T."} -{"name": "Taro Tanaka さん Jones", "given": "Taro", "middle": "Tanaka さん", "family": "Jones", "initials": "T. T. さ. J."} {"name": "Te Awanui-a-Rangi Black", "given": "Te", "middle": "Awanui-a-Rangi", "family": "Black", "ambiguities": ["PARTICLE_OR_GIVEN"], "initials": "T. A. B."} {"name": "Tham Jun", "given": "Tham", "family": "Jun", "initials": "T. J."} {"name": "Tham Jun Hoe", "given": "Tham", "middle": "Jun", "family": "Hoe", "initials": "T. J. H."} @@ -2259,7 +2259,7 @@ {"name": "van nguyen", "given": "van", "family": "nguyen", "ambiguities": ["PARTICLE_OR_GIVEN"], "initials": "v. n."} {"name": "van. den. Wolf Ada Cornelia Eva Sophia M.D. Ph.D.", "order": "FAMILY_FIRST", "title": "van. den.", "given": "Ada", "middle": "Cornelia Eva Sophia", "family": "Wolf", "suffix": "M.D. Ph.D.", "initials": "A. C. E. S. W."} {"name": "van. den. Wolf, Ada Cornelia Eva Sophia M.D. Ph.D.", "given": "Ada", "middle": "Cornelia Eva Sophia", "family": "van. den. Wolf", "suffix": "M.D. Ph.D.", "initials": "A. C. E. S. W."} -{"name": "von Bjarnadóttir dr. Sigríður Jóna Valgerður Fanndís yngri, M.A. í bókmenntafræði", "order": "FAMILY_FIRST", "given": "Bjarnadóttir", "middle": "dr. Sigríður Jóna Valgerður Fanndís yngri", "family": "von", "suffix": "M.A. í bókmenntafræði", "ambiguities": ["PARTICLE_OR_GIVEN", "SUFFIX_OR_NAME"], "initials": "B. d. S. J. V. F. y. v."} +{"name": "von Bjarnadóttir dr. Sigríður Jóna Valgerður Fanndís yngri, M.A. í bókmenntafræði", "order": "FAMILY_FIRST", "given": "Bjarnadóttir", "middle": "dr. Sigríður Jóna Valgerður Fanndís", "family": "von", "suffix": "yngri, M.A. í bókmenntafræði", "ambiguities": ["PARTICLE_OR_GIVEN", "SUFFIX_OR_NAME"], "initials": "B. d. S. J. V. F. v."} {"name": "von Braun", "given": "von", "family": "Braun", "ambiguities": ["PARTICLE_OR_GIVEN"], "initials": "v. B."} {"name": "von Bruhel Ada Cornelia Martina MD DDS", "order": "FAMILY_FIRST", "given": "Bruhel", "middle": "Ada Cornelia Martina", "family": "von", "suffix": "MD DDS", "ambiguities": ["PARTICLE_OR_GIVEN"], "initials": "B. A. C. M. v."} {"name": "von Bruhl Prof. Dr. Ada Cornelia Cesar Martin Jr, MD DDS", "order": "FAMILY_FIRST", "given": "Bruhl", "middle": "Prof. Dr. Ada Cornelia Cesar Martin", "family": "von", "suffix": "Jr, MD DDS", "ambiguities": ["PARTICLE_OR_GIVEN"], "initials": "B. P. D. A. C. C. M. v."} @@ -2360,7 +2360,7 @@ {"name": "Амосова Ирина", "order": "FAMILY_FIRST", "given": "Ирина", "family": "Амосова", "initials": "И. А."} {"name": "Амосова, Ирина", "given": "Ирина", "family": "Амосова", "initials": "И. А."} {"name": "Ана Иванова Димитрова", "given": "Ана", "middle": "Иванова", "family": "Димитрова", "initials": "А. И. Д."} -{"name": "Ана Хорват старији Џонс", "given": "Ана", "middle": "Хорват старији", "family": "Џонс", "initials": "А. Х. с. Џ."} +{"name": "Ана Хорват старији Џонс", "given": "Ана", "family": "Хорват", "suffix": "старији Џонс", "ambiguities": ["SUFFIX_OR_NAME"], "initials": "А. Х."} {"name": "Анна Мельник", "given": "Анна", "family": "Мельник", "initials": "А. М."} {"name": "Аталан", "given": "Аталан", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "А."} {"name": "Аталан", "order": "FAMILY_FIRST", "family": "Аталан", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "А."} @@ -2385,7 +2385,7 @@ {"name": "Волф, Ана Марија Цезар Мартин ван ден", "given": "Ана", "middle": "Марија Цезар Мартин ван ден", "family": "Волф", "initials": "А. М. Ц. М. в. д. В."} {"name": "Вольга Караліна Равенская", "given": "Вольга", "middle": "Караліна", "family": "Равенская", "initials": "В. К. Р."} {"name": "Вустер Бертрам Вилберфорс Ҳенру Роберт", "order": "FAMILY_FIRST", "given": "Бертрам", "middle": "Вилберфорс Ҳенру Роберт", "family": "Вустер", "initials": "Б. В. Ҳ. Р. В."} -{"name": "Гай Плиний Старший Иванов", "given": "Гай", "middle": "Плиний Старший", "family": "Иванов", "initials": "Г. П. С. И."} +{"name": "Гай Плиний Старший Иванов", "given": "Гай", "family": "Плиний", "suffix": "Старший Иванов", "ambiguities": ["SUFFIX_OR_NAME"], "initials": "Г. П."} {"name": "Джон", "given": "Джон", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "Д."} {"name": "Джон", "order": "FAMILY_FIRST", "family": "Джон", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "Д."} {"name": "Джоунс, Зара Мери", "given": "Зара", "middle": "Мери", "family": "Джоунс", "initials": "З. М. Д."} @@ -2473,6 +2473,7 @@ {"name": "Петренко Анна Марія Богдан-Зиновій, доц., проф.", "title": "доц. проф.", "given": "Петренко", "middle": "Анна Марія", "family": "Богдан-Зиновій", "initials": "П. А. М. Б."} {"name": "Петрова, Мария", "given": "Мария", "family": "Петрова", "initials": "М. П."} {"name": "Петрова, Мария", "order": "FAMILY_FIRST", "given": "Мария", "family": "Петрова", "initials": "М. П."} +{"name": "Питер Брейгель мл.", "given": "Питер", "family": "Брейгель", "suffix": "мл.", "initials": "П. Б."} {"name": "Поповић Јован Драган", "order": "FAMILY_FIRST", "given": "Јован", "middle": "Драган", "family": "Поповић", "initials": "Ј. Д. П."} {"name": "Поповић, Јован Драган", "given": "Јован", "middle": "Драган", "family": "Поповић", "initials": "Ј. Д. П."} {"name": "Проф. Док. Ада Корнелиа Сезар Мартин вон Брухи Гонзалес Доминго", "title": "Проф. Док.", "given": "Ада", "middle": "Корнелиа Сезар Мартин вон Брухи Гонзалес", "family": "Доминго", "initials": "А. К. С. М. в. Б. Г. Д."} @@ -2549,8 +2550,8 @@ {"name": "проф. др Александра Ева Сара ван ден Волф Петровић Југовић дипл. инж.", "title": "проф.", "given": "др", "middle": "Александра Ева Сара ван ден Волф Петровић Југовић дипл.", "family": "инж.", "initials": "д. А. Е. С. в. д. В. П. Ј. д. и."} {"name": "проф. фон Вольф Гонзалес Домінго Анастасія Єва Софія д-р", "order": "FAMILY_FIRST", "title": "проф.", "given": "Вольф", "middle": "Гонзалес Домінго Анастасія Єва Софія д-р", "family": "фон", "initials": "В. Г. Д. А. Є. С. д. ф."} {"name": "проф., д-р Ада Корнелия Сезар Мартин фон Брюль кесе, м. ф. д.", "title": "д-р", "given": "Ада", "middle": "Корнелия Сезар Мартин фон Брюль кесе", "family": "проф.", "suffix": "м. ф. д.", "ambiguities": ["COMMA_STRUCTURE"], "initials": "А. К. С. М. ф. Б. к. п."} -{"name": "проф., д-р Ада Корнелия Сезар Мартин фон Брюль — мл., к. м. н.", "title": "д-р", "given": "Ада", "middle": "Корнелия Сезар Мартин фон Брюль — мл.", "family": "проф.", "suffix": "к. м. н.", "ambiguities": ["COMMA_STRUCTURE"], "initials": "А. К. С. М. ф. Б. —. м. п."} -{"name": "проф., д-р Ада Корнелия Сезар Мартин фон Брюль — мл., к.м.н.", "title": "д-р", "given": "Ада", "middle": "Корнелия Сезар Мартин фон Брюль — мл.", "family": "проф.", "suffix": "к.м.н.", "initials": "А. К. С. М. ф. Б. —. м. п."} +{"name": "проф., д-р Ада Корнелия Сезар Мартин фон Брюль — мл., к. м. н.", "title": "д-р", "given": "Ада", "middle": "Корнелия Сезар Мартин фон Брюль —", "family": "проф.", "suffix": "мл., к. м. н.", "ambiguities": ["COMMA_STRUCTURE"], "initials": "А. К. С. М. ф. Б. —. п."} +{"name": "проф., д-р Ада Корнелия Сезар Мартин фон Брюль — мл., к.м.н.", "title": "д-р", "given": "Ада", "middle": "Корнелия Сезар Мартин фон Брюль —", "family": "проф.", "suffix": "мл., к.м.н.", "initials": "А. К. С. М. ф. Б. —. п."} {"name": "уулу Төрөкул Махмудов, Мырза Чыңгыз Айтматов Исхак Раззаков Парламент мүчөсү", "given": "Мырза", "middle": "Чыңгыз Айтматов Исхак Раззаков Парламент мүчөсү", "family": "уулу Төрөкул Махмудов", "initials": "М. Ч. А. И. Р. П. м. у. Т. М."} {"name": "уулу Төрөкул Чыңгыз Айтматов Исхак Раззаков Парламент мүчөсү", "order": "FAMILY_FIRST", "given": "Төрөкул", "middle": "Чыңгыз Айтматов Исхак Раззаков Парламент мүчөсү", "family": "уулу", "initials": "Т. Ч. А. И. Р. П. м. у."} {"name": "фон Бруль Ада Карнэлія Сесар Марцін д-р", "order": "FAMILY_FIRST", "given": "Бруль", "middle": "Ада Карнэлія Сесар Марцін д-р", "family": "фон", "initials": "Б. А. К. С. М. д. ф."} @@ -2615,8 +2616,8 @@ {"name": "اسەم", "order": "FAMILY_FIRST", "family": "اسەم", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "ا."} {"name": "اصغر شازیہ", "order": "FAMILY_FIRST", "given": "شازیہ", "family": "اصغر", "initials": "ش. ا."} {"name": "اصغر، شازیہ", "order": "FAMILY_FIRST", "given": "شازیہ", "family": "اصغر", "initials": "ش. ا."} -{"name": "الدكتور عايدة كورنيليا سيزار مارتن فون برول الإبن، طبيب وجراح", "given": "طبيب", "middle": "وجراح", "family": "الدكتور عايدة كورنيليا سيزار مارتن فون برول الإبن", "initials": "ط. و. ا. ع. ك. س. م. ف. ب. ا."} -{"name": "السيد أحمد رامي نجيب محفوظ أبو الأغا الابن، النائب", "given": "النائب", "family": "السيد أحمد رامي نجيب محفوظ أبو الأغا الابن", "initials": "ا. ا. أ. ر. ن. م. ا. ا."} +{"name": "الدكتور عايدة كورنيليا سيزار مارتن فون برول الإبن، طبيب وجراح", "given": "طبيب", "middle": "وجراح", "family": "الدكتور عايدة كورنيليا سيزار مارتن فون برول", "suffix": "الإبن", "initials": "ط. و. ا. ع. ك. س. م. ف. ب."} +{"name": "السيد أحمد رامي نجيب محفوظ أبو الأغا الابن، النائب", "given": "النائب", "family": "السيد أحمد رامي نجيب محفوظ أبو الأغا", "suffix": "الابن", "initials": "ا. ا. أ. ر. ن. م. ا."} {"name": "العامر، كمال مجدي", "order": "FAMILY_FIRST", "given": "كمال", "middle": "مجدي", "family": "العامر", "initials": "ك. م. ا."} {"name": "النجار، سميرة", "order": "FAMILY_FIRST", "given": "سميرة", "family": "النجار", "initials": "س. ا."} {"name": "امید رضا ملایری", "given": "امید", "middle": "رضا", "family": "ملایری", "initials": "ا. ر. م."} @@ -2626,6 +2627,7 @@ {"name": "بروهل، آدا کورنلیا سزار مارتین وان", "order": "FAMILY_FIRST", "given": "آدا", "middle": "کورنلیا سزار مارتین وان", "family": "بروهل", "initials": "آ. ک. س. م. و. ب."} {"name": "بريۋل، ادا كورنەليا سەزار مارتين فون", "order": "FAMILY_FIRST", "given": "ادا", "middle": "كورنەليا سەزار مارتين فون", "family": "بريۋل", "initials": "ا. ك. س. م. ف. ب."} {"name": "جان همیش واټسن", "given": "جان", "middle": "همیش", "family": "واټسن", "initials": "ج. ه. و."} +{"name": "جورج بوش الابن", "given": "جورج", "family": "بوش", "suffix": "الابن", "initials": "ج. ب."} {"name": "حاتم منصور", "given": "حاتم", "family": "منصور", "initials": "ح. م."} {"name": "خان مریم نواز", "order": "FAMILY_FIRST", "given": "مریم", "middle": "نواز", "family": "خان", "initials": "م. ن. خ."} {"name": "خان، مریم نواز", "order": "FAMILY_FIRST", "given": "مریم", "middle": "نواز", "family": "خان", "initials": "م. ن. خ."} @@ -2692,14 +2694,14 @@ {"name": "ندیم رضا، یاسمین راشد سدرہ منیر ایم ڈی ڈی ڈی ایس", "order": "FAMILY_FIRST", "given": "یاسمین", "middle": "راشد سدرہ منیر ایم ڈی ڈی ڈی ایس", "family": "ندیم رضا", "initials": "ی. ر. س. م. ا. ڈ. ڈ. ڈ. ا. ن. ر."} {"name": "وان برل گونزالس ڊومنگو پروفيسر ڊاڪٽر ايڊا ڪورنيليا سيزر مارٽن ايم ڊي ڊي ڊي ايس", "order": "FAMILY_FIRST", "given": "برل", "middle": "گونزالس ڊومنگو پروفيسر ڊاڪٽر ايڊا ڪورنيليا سيزر مارٽن ايم ڊي ڊي ڊي ايس", "family": "وان", "initials": "ب. گ. ڊ. پ. ڊ. ا. ڪ. س. م. ا. ڊ. ڊ. ڊ. ا. و."} {"name": "وان برل گونزالس ڊومنگو, پروفيسر ڊاڪٽر ايڊا ڪورنيليا سيزر مارٽن ايم ڊي ڊي ڊي ايس", "given": "پروفيسر", "middle": "ڊاڪٽر ايڊا ڪورنيليا سيزر مارٽن ايم ڊي ڊي ڊي ايس", "family": "وان برل گونزالس ڊومنگو", "initials": "پ. ڊ. ا. ڪ. س. م. ا. ڊ. ڊ. ڊ. ا. و. ب. گ. ڊ."} -{"name": "وان بروهل، پروفسور آدا کورنلیا سزار مارتین جونیور، دکترای دندانپزشکی", "order": "FAMILY_FIRST", "given": "پروفسور", "middle": "آدا کورنلیا سزار مارتین جونیور", "family": "وان بروهل", "suffix": "دکترای دندانپزشکی", "ambiguities": ["COMMA_STRUCTURE"], "initials": "پ. آ. ک. س. م. ج. و. ب."} +{"name": "وان بروهل، پروفسور آدا کورنلیا سزار مارتین جونیور، دکترای دندانپزشکی", "order": "FAMILY_FIRST", "given": "پروفسور", "middle": "آدا کورنلیا سزار مارتین", "family": "وان بروهل", "suffix": "جونیور, دکترای دندانپزشکی", "ambiguities": ["COMMA_STRUCTURE"], "initials": "پ. آ. ک. س. م. و. ب."} {"name": "واټسن جان همیش", "order": "FAMILY_FIRST", "given": "جان", "middle": "همیش", "family": "واټسن", "initials": "ج. ه. و."} {"name": "واٽسن ميري سيو ھامش", "order": "FAMILY_FIRST", "given": "ميري", "middle": "سيو ھامش", "family": "واٽسن", "initials": "م. س. ھ. و."} {"name": "ووسټر ښاغلی. برټرام ولبرفورس هنري رابرټ ایم پی", "order": "FAMILY_FIRST", "given": "ښاغلی.", "middle": "برټرام ولبرفورس هنري رابرټ ایم پی", "family": "ووسټر", "initials": "ښ. ب. و. ه. ر. ا. پ. و."} {"name": "ووسٽر محترم برٽرم ولبرفورس ھينري رابرٽ ايم پي", "order": "FAMILY_FIRST", "given": "محترم", "middle": "برٽرم ولبرفورس ھينري رابرٽ ايم پي", "family": "ووسٽر", "initials": "م. ب. و. ھ. ر. ا. پ. و."} {"name": "وون لیوه بیکر شمیت پروفیسور ډاکټر اډا کورنیلیا ایوا سوفیا ایم ‌ډی ډیی ډیی ایس", "order": "FAMILY_FIRST", "given": "لیوه", "middle": "بیکر شمیت پروفیسور ډاکټر اډا کورنیلیا ایوا سوفیا ایم ‌ډی ډیی ډیی ایس", "family": "وون", "initials": "ل. ب. ش. پ. ډ. ا. ک. ا. س. ا. ‌. ډ. ډ. ا. و."} {"name": "وون لیوه بیکر شمیت, پروفیسور ډاکټر اډا کورنیلیا ایوا سوفیا ایم ‌ډی ډیی ډیی ایس", "given": "پروفیسور", "middle": "ډاکټر اډا کورنیلیا ایوا سوفیا ایم ‌ډی ډیی ډیی ایس", "family": "وون لیوه بیکر شمیت", "initials": "پ. ډ. ا. ک. ا. س. ا. ‌. ډ. ډ. ا. و. ل. ب. ش."} -{"name": "پروفسور آدا کورنلیا سزار مارتین وان بروهل جونیور، دکترای دندانپزشکی", "given": "دکترای", "middle": "دندانپزشکی", "family": "پروفسور آدا کورنلیا سزار مارتین وان بروهل جونیور", "initials": "د. د. پ. آ. ک. س. م. و. ب. ج."} +{"name": "پروفسور آدا کورنلیا سزار مارتین وان بروهل جونیور، دکترای دندانپزشکی", "given": "دکترای", "middle": "دندانپزشکی", "family": "پروفسور آدا کورنلیا سزار مارتین وان بروهل", "suffix": "جونیور", "initials": "د. د. پ. آ. ک. س. م. و. ب."} {"name": "پروفيسر ڊاڪٽر ايڊا ڪورنيليا سيزر مارٽن وان برل گونزالس ڊومنگو ايم ڊي ڊي ڊي ايس", "given": "پروفيسر", "middle": "ڊاڪٽر ايڊا ڪورنيليا سيزر مارٽن وان برل گونزالس ڊومنگو ايم ڊي ڊي ڊي", "family": "ايس", "initials": "پ. ڊ. ا. ڪ. س. م. و. ب. گ. ڊ. ا. ڊ. ڊ. ڊ. ا."} {"name": "پروفیسور ډاکټر اډا کورنیلیا ایوا سوفیا وون لیوه بیکر شمیت ایم ‌ډی ډیی ډیی ایس", "given": "پروفیسور", "middle": "ډاکټر اډا کورنیلیا ایوا سوفیا وون لیوه بیکر شمیت ایم ‌ډی ډیی ډیی", "family": "ایس", "initials": "پ. ډ. ا. ک. ا. س. و. ل. ب. ش. ا. ‌. ډ. ډ. ا."} {"name": "ژیلا", "given": "ژیلا", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "ژ."} @@ -2758,6 +2760,7 @@ {"name": "मुलर, क्याथी", "given": "क्याथी", "family": "मुलर", "initials": "क. म."} {"name": "मैरी सिलविया जोनस", "given": "मैरी", "middle": "सिलविया", "family": "जोनस", "initials": "म. स. ज."} {"name": "रमिता पोख्रेल", "given": "रमिता", "family": "पोख्रेल", "initials": "र. प."} +{"name": "राम शर्मा साहब मोहन", "given": "राम", "family": "शर्मा", "suffix": "साहब मोहन", "ambiguities": ["SUFFIX_OR_NAME"], "initials": "र. श."} {"name": "रिधान समीर फडके", "given": "रिधान", "middle": "समीर", "family": "फडके", "initials": "र. स. फ."} {"name": "रॉबर्ट", "given": "रॉबर्ट", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "र."} {"name": "रॉबर्ट", "order": "FAMILY_FIRST", "family": "रॉबर्ट", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "र."} @@ -2862,19 +2865,19 @@ {"name": "આઇરીન અદાણી", "given": "આઇરીન", "family": "અદાણી", "initials": "આ. અ."} {"name": "કિરણ", "given": "કિરણ", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "ક."} {"name": "કિરણ", "order": "FAMILY_FIRST", "family": "કિરણ", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "ક."} -{"name": "કુમાર શાહ શ્રી. પટેલ ખુશી કિંજલ જૂનિયર, એમપી", "order": "FAMILY_FIRST", "given": "એમપી", "family": "કુમાર શાહ શ્રી. પટેલ ખુશી કિંજલ જૂનિયર", "initials": "એ. ક. શ. શ. પ. ખ. ક. જ."} +{"name": "કુમાર શાહ શ્રી. પટેલ ખુશી કિંજલ જૂનિયર, એમપી", "order": "FAMILY_FIRST", "given": "એમપી", "family": "કુમાર શાહ શ્રી. પટેલ ખુશી કિંજલ", "suffix": "જૂનિયર", "initials": "એ. ક. શ. શ. પ. ખ. ક."} {"name": "કૅથિ મુલર", "given": "કૅથિ", "family": "મુલર", "initials": "ક. મ."} {"name": "ખુશી પટેલ હેતલ દવે", "given": "ખુશી", "middle": "પટેલ હેતલ", "family": "દવે", "initials": "ખ. પ. હ. દ."} {"name": "જઝિલીયા હૅમીશ સ્ટૂબર", "given": "જઝિલીયા", "middle": "હૅમીશ", "family": "સ્ટૂબર", "initials": "જ. હ. સ."} {"name": "દવે ખુશી પટેલ હેતલ", "order": "FAMILY_FIRST", "given": "ખુશી", "middle": "પટેલ હેતલ", "family": "દવે", "initials": "ખ. પ. હ. દ."} {"name": "દવે, ખુશી પટેલ હેતલ", "given": "ખુશી", "middle": "પટેલ હેતલ", "family": "દવે", "initials": "ખ. પ. હ. દ."} -{"name": "પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન ફૉન્ બ્રાઑલ્ જૂનિયર, એમ.ડી. ડી.ડી.એસ.", "given": "એમ.ડી.", "middle": "ડી.ડી.એસ.", "family": "પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન ફૉન્ બ્રાઑલ્ જૂનિયર", "initials": "એ. ડ. પ. ડ. એ. ક. સ. મ. ફ. બ. જ."} -{"name": "ફૉન્ બ્રાઑલ્ પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન જૂનિયર, એમ.ડી. ડી.ડી.એસ.", "order": "FAMILY_FIRST", "given": "એમ.ડી.", "middle": "ડી.ડી.એસ.", "family": "ફૉન્ બ્રાઑલ્ પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન જૂનિયર", "initials": "એ. ડ. ફ. બ. પ. ડ. એ. ક. સ. મ. જ."} +{"name": "પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન ફૉન્ બ્રાઑલ્ જૂનિયર, એમ.ડી. ડી.ડી.એસ.", "given": "એમ.ડી.", "middle": "ડી.ડી.એસ.", "family": "પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન ફૉન્ બ્રાઑલ્", "suffix": "જૂનિયર", "initials": "એ. ડ. પ. ડ. એ. ક. સ. મ. ફ. બ."} +{"name": "ફૉન્ બ્રાઑલ્ પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન જૂનિયર, એમ.ડી. ડી.ડી.એસ.", "order": "FAMILY_FIRST", "given": "એમ.ડી.", "middle": "ડી.ડી.એસ.", "family": "ફૉન્ બ્રાઑલ્ પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન", "suffix": "જૂનિયર", "initials": "એ. ડ. ફ. બ. પ. ડ. એ. ક. સ. મ."} {"name": "બ્રાઑલ્, એડા કૉર્નેલિયા સિઝર માર્ટિન ફૉન્", "given": "એડા", "middle": "કૉર્નેલિયા સિઝર માર્ટિન ફૉન્", "family": "બ્રાઑલ્", "initials": "એ. ક. સ. મ. ફ. બ."} {"name": "મુલર કૅથિ", "order": "FAMILY_FIRST", "given": "કૅથિ", "family": "મુલર", "initials": "ક. મ."} {"name": "મુલર, કૅથિ", "given": "કૅથિ", "family": "મુલર", "initials": "ક. મ."} {"name": "શાહ, પટેલ ખુશી કિંજલ કુમાર", "given": "પટેલ", "middle": "ખુશી કિંજલ કુમાર", "family": "શાહ", "initials": "પ. ખ. ક. ક. શ."} -{"name": "શ્રી. પટેલ ખુશી કિંજલ કુમાર શાહ જૂનિયર, એમપી", "given": "એમપી", "family": "શ્રી. પટેલ ખુશી કિંજલ કુમાર શાહ જૂનિયર", "initials": "એ. શ. પ. ખ. ક. ક. શ. જ."} +{"name": "શ્રી. પટેલ ખુશી કિંજલ કુમાર શાહ જૂનિયર, એમપી", "given": "એમપી", "family": "શ્રી. પટેલ ખુશી કિંજલ કુમાર શાહ", "suffix": "જૂનિયર", "initials": "એ. શ. પ. ખ. ક. ક. શ."} {"name": "સિનબાદ", "given": "સિનબાદ", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "સ."} {"name": "સિનબાદ", "order": "FAMILY_FIRST", "family": "સિનબાદ", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "સ."} {"name": "સ્ટૂબર જઝિલીયા હૅમીશ", "order": "FAMILY_FIRST", "given": "જઝિલીયા", "middle": "હૅમીશ", "family": "સ્ટૂબર", "initials": "જ. હ. સ."} @@ -2951,14 +2954,14 @@ {"name": "ಝೆಂಡಾಯಾ", "order": "FAMILY_FIRST", "family": "ಝೆಂಡಾಯಾ", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "ಝ."} {"name": "ಪಾಟೀಲ್ ಶ್ರೀ. ನಾರಯಣ ಕುಮಾರ್ ಶಿವ ರಾಮ ಕಿರಿ, ಎಮ್‌ಪಿ", "order": "FAMILY_FIRST", "given": "ಎಮ್‌ಪಿ", "family": "ಪಾಟೀಲ್ ಶ್ರೀ. ನಾರಯಣ ಕುಮಾರ್ ಶಿವ ರಾಮ ಕಿರಿ", "initials": "ಎ. ಪ. ಶ. ನ. ಕ. ಶ. ರ. ಕ."} {"name": "ಪಾಟೀಲ್, ನಾರಯಣ ಕುಮಾರ್ ಶಿವ ರಾಮ", "given": "ನಾರಯಣ", "middle": "ಕುಮಾರ್ ಶಿವ ರಾಮ", "family": "ಪಾಟೀಲ್", "initials": "ನ. ಕ. ಶ. ರ. ಪ."} -{"name": "ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ವಾನ್ ಬ್ರಾಲ್ ಜೂನಿಯರ್, ಎಂ.ಡಿ ಡಿ.ಡಿ.ಎಸ್", "given": "ಎಂ.ಡಿ", "middle": "ಡಿ.ಡಿ.ಎಸ್", "family": "ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ವಾನ್ ಬ್ರಾಲ್ ಜೂನಿಯರ್", "initials": "ಎ. ಡ. ಪ. ಡ. ಅ. ಕ. ಸ. ಮ. ವ. ಬ. ಜ."} +{"name": "ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ವಾನ್ ಬ್ರಾಲ್ ಜೂನಿಯರ್, ಎಂ.ಡಿ ಡಿ.ಡಿ.ಎಸ್", "given": "ಎಂ.ಡಿ", "middle": "ಡಿ.ಡಿ.ಎಸ್", "family": "ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ವಾನ್ ಬ್ರಾಲ್", "suffix": "ಜೂನಿಯರ್", "initials": "ಎ. ಡ. ಪ. ಡ. ಅ. ಕ. ಸ. ಮ. ವ. ಬ."} {"name": "ಬ್ರಾಲ್, ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ವಾನ್", "given": "ಅಡಾ", "middle": "ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ವಾನ್", "family": "ಬ್ರಾಲ್", "initials": "ಅ. ಕ. ಸ. ಮ. ವ. ಬ."} {"name": "ಮುಲ್ಲರ್ ಕ್ಯಾಥಿ", "order": "FAMILY_FIRST", "given": "ಕ್ಯಾಥಿ", "family": "ಮುಲ್ಲರ್", "initials": "ಕ. ಮ."} {"name": "ಮುಲ್ಲರ್, ಕ್ಯಾಥಿ", "given": "ಕ್ಯಾಥಿ", "family": "ಮುಲ್ಲರ್", "initials": "ಕ. ಮ."} {"name": "ಯಶ್ ವಿಜಯ ಲಕ್ಷ್ಮಿ ಹರೀಶ್", "order": "FAMILY_FIRST", "given": "ವಿಜಯ", "middle": "ಲಕ್ಷ್ಮಿ ಹರೀಶ್", "family": "ಯಶ್", "initials": "ವ. ಲ. ಹ. ಯ."} {"name": "ಯಶ್, ವಿಜಯ ಲಕ್ಷ್ಮಿ ಹರೀಶ್", "given": "ವಿಜಯ", "middle": "ಲಕ್ಷ್ಮಿ ಹರೀಶ್", "family": "ಯಶ್", "initials": "ವ. ಲ. ಹ. ಯ."} {"name": "ರಶ್ಮಿಕಾ ಶೆಟ್ಟಿ", "given": "ರಶ್ಮಿಕಾ", "family": "ಶೆಟ್ಟಿ", "initials": "ರ. ಶ."} -{"name": "ವಾನ್ ಬ್ರಾಲ್ ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ಜೂನಿಯರ್, ಎಂ.ಡಿ ಡಿ.ಡಿ.ಎಸ್", "order": "FAMILY_FIRST", "given": "ಎಂ.ಡಿ", "middle": "ಡಿ.ಡಿ.ಎಸ್", "family": "ವಾನ್ ಬ್ರಾಲ್ ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ಜೂನಿಯರ್", "initials": "ಎ. ಡ. ವ. ಬ. ಪ. ಡ. ಅ. ಕ. ಸ. ಮ. ಜ."} +{"name": "ವಾನ್ ಬ್ರಾಲ್ ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ಜೂನಿಯರ್, ಎಂ.ಡಿ ಡಿ.ಡಿ.ಎಸ್", "order": "FAMILY_FIRST", "given": "ಎಂ.ಡಿ", "middle": "ಡಿ.ಡಿ.ಎಸ್", "family": "ವಾನ್ ಬ್ರಾಲ್ ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್", "suffix": "ಜೂನಿಯರ್", "initials": "ಎ. ಡ. ವ. ಬ. ಪ. ಡ. ಅ. ಕ. ಸ. ಮ."} {"name": "ವಿಜಯ ಲಕ್ಷ್ಮಿ ಹರೀಶ್ ಯಶ್", "given": "ವಿಜಯ", "middle": "ಲಕ್ಷ್ಮಿ ಹರೀಶ್", "family": "ಯಶ್", "initials": "ವ. ಲ. ಹ. ಯ."} {"name": "ಶೆಟ್ಟಿ ರಶ್ಮಿಕಾ", "order": "FAMILY_FIRST", "given": "ರಶ್ಮಿಕಾ", "family": "ಶೆಟ್ಟಿ", "initials": "ರ. ಶ."} {"name": "ಶೆಟ್ಟಿ, ರಶ್ಮಿಕಾ", "given": "ರಶ್ಮಿಕಾ", "family": "ಶೆಟ್ಟಿ", "initials": "ರ. ಶ."} @@ -2969,7 +2972,7 @@ {"name": "ಸ್ಟೋಬರ್, ಝಝಿಲಿಯಾ ಹಮಿಶ್", "given": "ಝಝಿಲಿಯಾ", "middle": "ಹಮಿಶ್", "family": "ಸ್ಟೋಬರ್", "initials": "ಝ. ಹ. ಸ."} {"name": "അശ്വതി നായർ", "given": "അശ്വതി", "family": "നായർ", "initials": "അ. ന."} {"name": "എയ്‌ഡ കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ വാൻ ബ്ര്യൂൾ എം.ഡി. ഡി.ഡി.എസ്", "given": "എയ്‌ഡ", "middle": "കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ വാൻ ബ്ര്യൂൾ എം.ഡി.", "family": "ഡി.ഡി.എസ്", "initials": "എ. ക. സ. മ. വ. ബ. എ. ഡ."} -{"name": "കറുവാപ്പറമ്പിൽ ശ്രീ. തോമസ് കുരുവിള അന്തോണി ജൂനിയർ, എംപി", "order": "FAMILY_FIRST", "given": "എംപി", "family": "കറുവാപ്പറമ്പിൽ ശ്രീ. തോമസ് കുരുവിള അന്തോണി ജൂനിയർ", "initials": "എ. ക. ശ. ത. ക. അ. ജ."} +{"name": "കറുവാപ്പറമ്പിൽ ശ്രീ. തോമസ് കുരുവിള അന്തോണി ജൂനിയർ, എംപി", "order": "FAMILY_FIRST", "given": "എംപി", "family": "കറുവാപ്പറമ്പിൽ ശ്രീ. തോമസ് കുരുവിള അന്തോണി", "suffix": "ജൂനിയർ", "initials": "എ. ക. ശ. ത. ക. അ."} {"name": "കറുവാപ്പറമ്പിൽ, തോമസ് കുരുവിള അന്തോണി", "given": "തോമസ്", "middle": "കുരുവിള അന്തോണി", "family": "കറുവാപ്പറമ്പിൽ", "initials": "ത. ക. അ. ക."} {"name": "കാത്തി മുള്ളർ", "given": "കാത്തി", "family": "മുള്ളർ", "initials": "ക. മ."} {"name": "ജോൺ ചാണ്ടി പടവീട്ടിൽ", "given": "ജോൺ", "middle": "ചാണ്ടി", "family": "പടവീട്ടിൽ", "initials": "ജ. ച. പ."} @@ -2983,7 +2986,7 @@ {"name": "ബ്ര്യൂൾ, എയ്‌ഡ കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ വാൻ", "given": "എയ്‌ഡ", "middle": "കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ വാൻ", "family": "ബ്ര്യൂൾ", "initials": "എ. ക. സ. മ. വ. ബ."} {"name": "മുള്ളർ കാത്തി", "order": "FAMILY_FIRST", "given": "കാത്തി", "family": "മുള്ളർ", "initials": "ക. മ."} {"name": "മുള്ളർ, കാത്തി", "given": "കാത്തി", "family": "മുള്ളർ", "initials": "ക. മ."} -{"name": "വാൻ ബ്ര്യൂൾ പ്രൊഫ. ഡോ. എയ്‌ഡ കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ ജൂനിയർ, എം.ഡി. ഡി.ഡി.എസ്", "order": "FAMILY_FIRST", "given": "എം.ഡി.", "middle": "ഡി.ഡി.എസ്", "family": "വാൻ ബ്ര്യൂൾ പ്രൊഫ. ഡോ. എയ്‌ഡ കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ ജൂനിയർ", "initials": "എ. ഡ. വ. ബ. പ. ഡ. എ. ക. സ. മ. ജ."} +{"name": "വാൻ ബ്ര്യൂൾ പ്രൊഫ. ഡോ. എയ്‌ഡ കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ ജൂനിയർ, എം.ഡി. ഡി.ഡി.എസ്", "order": "FAMILY_FIRST", "given": "എം.ഡി.", "middle": "ഡി.ഡി.എസ്", "family": "വാൻ ബ്ര്യൂൾ പ്രൊഫ. ഡോ. എയ്‌ഡ കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ", "suffix": "ജൂനിയർ", "initials": "എ. ഡ. വ. ബ. പ. ഡ. എ. ക. സ. മ."} {"name": "സസിലിയ ഹാമിഷ് സ്‌റ്റോബർ", "given": "സസിലിയ", "middle": "ഹാമിഷ്", "family": "സ്‌റ്റോബർ", "initials": "സ. ഹ. സ."} {"name": "സിൻബാദ്", "given": "സിൻബാദ്", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "സ."} {"name": "സിൻബാദ്", "order": "FAMILY_FIRST", "family": "സിൻബാദ്", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "സ."} @@ -3214,6 +3217,7 @@ {"name": "マイケル.", "given": "マイケル.", "ambiguities": ["GIVEN_OR_FAMILY"], "initials": "マ."} {"name": "マイケル·ジャクソン", "given": "マイケル", "family": "ジャクソン", "initials": "マ. ジ."} {"name": "マイケル・ジャクソン", "given": "マイケル", "family": "ジャクソン", "initials": "マ. ジ."} +{"name": "ロバート・ダウニー・ジュニア", "given": "ロバート", "family": "ダウニー", "suffix": "ジュニア", "initials": "ロ. ダ."} {"name": "一郎安藤", "family": "一郎安藤", "initials": "一."} {"name": "佐々木 太郎", "given": "太郎", "family": "佐々木", "initials": "太. 佐."} {"name": "佐藤 花子 \"旧姓・田中\" (旧姓 鈴木)", "given": "花子", "family": "佐藤", "nickname": "旧姓 田中", "maiden": "鈴木", "initials": "花. 佐."} @@ -3403,6 +3407,7 @@ {"name": "남궁민수", "given": "민수", "family": "남궁", "ambiguities": ["SEGMENTATION"], "initials": "민. 남."} {"name": "남궁민수 지훈", "given": "민수", "middle": "지훈", "family": "남궁", "ambiguities": ["SEGMENTATION"], "initials": "민. 지. 남."} {"name": "남궁민수, 지훈", "given": "지훈", "family": "남궁민수", "initials": "지. 남."} +{"name": "로버트 다우니 주니어", "given": "다우니", "family": "로버트", "suffix": "주니어", "initials": "다. 로."} {"name": "마이클·잭슨", "given": "마이클", "family": "잭슨", "initials": "마. 잭."} {"name": "마틴 킹, MA", "given": "틴", "middle": "킹", "family": "마", "suffix": "MA", "ambiguities": ["SUFFIX_OR_NAME"], "initials": "틴. 킹. 마."} {"name": "뮐러 케테", "order": "FAMILY_FIRST", "given": "케테", "family": "뮐러", "initials": "케. 뮐."}