From e76c05d55890588f0713804d0854473bbaddf31e Mon Sep 17 00:00:00 2001 From: Derek Gulbranson Date: Thu, 29 Oct 2026 17:34:57 -0700 Subject: [PATCH 1/6] Add ParsedName.generation and credentials, views splitting suffix by kind (3.0, 4b) A listed suffix word's kind is read from the reading index, so Jr and Sr read as a generation in Token.reading and Ambiguity.alternative alike through _vocab.suffix_kind. rules/R8, decisions/R8. Closes the 4a seam. Co-Authored-By: Claude Opus 5.5 --- AGENTS.md | 2 +- docs/design/AGENTS.md | 2 +- .../R8-generation-and-credentials-views.md | 21 + docs/design/decisions/README.md | 1 + .../decisions/suffix-field-composition.md | 4 +- docs/design/decisions/vocabulary-model.md | 1 + .../R8-generation-and-credentials-views.md | 43 + docs/design/rules/README.md | 1 + ...S-suffixes-generational-and-credentials.md | 2 +- docs/design/vocabulary-model-rfc.md | 2 +- docs/release_log.rst | 1 + docs/usage.rst | 15 + nameparser/_pipeline/_assemble.py | 6 +- nameparser/_pipeline/_vocab.py | 34 +- nameparser/_reading_index.py | 13 + nameparser/_render.py | 3 +- nameparser/_types.py | 51 +- tests/v2/pipeline/test_assemble.py | 48 +- tests/v2/rules_budget.json | 1 + tests/v2/rules_doc.py | 2 +- tests/v2/test_cases.py | 10 +- tests/v2/test_layering.py | 7 +- tests/v2/test_snapshot.py | 22 +- tests/v2/test_types.py | 49 + tools/differential/corpus_rules.jsonl | 4 + tools/differential/snapshot.jsonl | 960 +++++++++--------- tools/differential/snapshot.py | 30 +- 27 files changed, 811 insertions(+), 524 deletions(-) create mode 100644 docs/design/decisions/R8-generation-and-credentials-views.md create mode 100644 docs/design/rules/R8-generation-and-credentials-views.md diff --git a/AGENTS.md b/AGENTS.md index ce2d02d59..e0d94a3b0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -227,7 +227,7 @@ The `config/` SETS are frozen since 2.2 (#293): there is no `.add()`/`.remove()` The 2.0 rewrite landed as underscore-private modules beside the v1 code, which 2.0 and then 3.0 deleted. These conventions apply to all of it. The full design record (rationale, settled-decision logs, dated amendments) lives in untracked `docs/superpowers/specs/`; this section is the enforceable subset. **A commit that establishes or amends one of these conventions must update this section in the same commit** — grep-driven staleness sweeps miss paraphrased prose (see Workflow above), so write-time maintenance is the mechanism, audits are the backstop. - **Module layout**: every module is underscore-private (`_types.py`, `_lexicon.py`, `_policy.py`, `_locale.py`, `_render.py`, `_reading_index.py`, `_pipeline/`, `_parser.py`). The public import surface is exactly `nameparser`, `nameparser.locales` and the vocabulary data modules under `nameparser.config`; `nameparser/__init__.py` holds re-exports and `__all__` only — no logic. -- **Layering is enforced by `tests/v2/test_layering.py`** (exact-module matching; `if TYPE_CHECKING:` imports don't count): `_types` imports nothing internal at module level — its rendering delegates import `_render` at call time; `_lexicon` and `_policy` sit above `_types` independently (`_lexicon` may import `nameparser.config.*` DATA modules only, e.g. `config/maiden_markers.py`); `_reading_index` imports nothing internal at module level and the index, `config/_index.py`, at call time, since `tools/vocab/build.py` loads it by path; `_locale` sits on `_lexicon`+`_policy` (plus `_types` for the shared pickle mixin); `_render` imports `_types`, `_lexicon` (for `Lexicon.default()` and `_normalize`) and `_policy` (for the scripts that write no initials); `_pipeline/*` imports `_types`+`_lexicon`+`_policy` plus in-package `_pipeline` helpers, and `_assemble` also `_reading_index`, for `Reading.languages`; `_parser` sits on everything except `_render`, `_reading_index` at call time only, where a choice of languages is applied; `__main__` imports only the public package; locale pack modules (`locales/*.py`) import `_locale`/`_lexicon`/`_policy`/`_types` only (`_types` joined the list in #272 — `locales/ja.py`'s segmenter factory constructs a `Segmentation`), and the `locales/__init__` additionally lazy-imports its packs (PEP 562). Extend the test's `ALLOWED` table when adding a module. +- **Layering is enforced by `tests/v2/test_layering.py`** (exact-module matching; `if TYPE_CHECKING:` imports don't count): `_types` imports nothing internal at module level — its rendering delegates import `_render` at call time; `_lexicon` and `_policy` sit above `_types` independently (`_lexicon` may import `nameparser.config.*` DATA modules only, e.g. `config/maiden_markers.py`); `_reading_index` imports nothing internal at module level and the index, `config/_index.py`, at call time, since `tools/vocab/build.py` loads it by path; `_locale` sits on `_lexicon`+`_policy` (plus `_types` for the shared pickle mixin); `_render` imports `_types`, `_lexicon` (for `Lexicon.default()` and `_normalize`) and `_policy` (for the scripts that write no initials); `_pipeline/*` imports `_types`+`_lexicon`+`_policy` plus in-package `_pipeline` helpers, `_assemble` also `_reading_index`, for `Reading.languages`, and `_vocab` too, for a listed suffix word's kind (3.0's 4b); `_parser` sits on everything except `_render`, `_reading_index` at call time only, where a choice of languages is applied; `__main__` imports only the public package; locale pack modules (`locales/*.py`) import `_locale`/`_lexicon`/`_policy`/`_types` only (`_types` joined the list in #272 — `locales/ja.py`'s segmenter factory constructs a `Segmentation`), and the `locales/__init__` additionally lazy-imports its packs (PEP 562). Extend the test's `ALLOWED` table when adding a module. - **Canonical field order** — the seven roles in `Role` enum declaration order, defined once and derived everywhere (properties, `as_dict`, reprs, `comparison_key`). Never restate the order literally. `Role` is a `StrEnum`: members compare as their field-name strings, and `tokens_for()` coerces strings via `_coerce_enum`. - **Method organization**, fixed section order in every class: fields + `__post_init__` validation → alternative constructors → dunders (construction/equality → protocol → operators) → properties → public methods by concern (access → editing → comparison → rendering delegates) → private helpers last, except a helper serving exactly one section may sit at that section's head. - **Validation is eager and fail-loud**: every `raise` states the offending value, the expected form, and the fix. Exception taxonomy: wrong type — including wrong element type inside a collection, bare `str` where an iterable of strings is expected, or a `Mapping` where a plain iterable is expected — raises `TypeError`; well-typed but unacceptable values raise `ValueError`; failed enum lookups stay `ValueError` for any input (stdlib `EnumType` precedent). **When the message hands the reader code to paste, that code has to survive a type checker, and then RUN** — nameparser ships `py.typed`, and a placeholder can type-check and still raise: the 2.4 release sweep's first fix to the `capitalization_exceptions` hint offered `('key', 'Value')`, which passes mypy and fails #459's mask check, so `test_add_capitalization_exceptions_raises_pointing_at_replace` now executes the offered code. #337's segmenterless warning offered `Policy(segment_scripts=())`, an `arg-type` error, because these fields are annotated with what they STORE rather than everything the constructor accepts. Prefer the `frozenset()` / `()` spellings in messages and docstrings, and pin the offered spelling in a test — the warning tests matched on `ja_segmenter` and never checked the actionable half of the message. **A warning emitted in `Parser.__post_init__` needs `parser_for` to re-emit it from its own frame** (the `catch_warnings(record=True)` block at its return): `__post_init__`'s `stacklevel` is sized for direct `Parser(...)` construction, and through `parser_for`'s extra frame the default one-line rendering attributes the warning to the library's own `return Parser(...)` — the exact call the message tells the user to change becomes invisible. No single stacklevel serves both entry points; a new construction warning gets the re-emission for free, but a new CONSTRUCTION SITE for `Parser` inside this package needs its own re-emission or its callers get library-attributed warnings (#337 review). diff --git a/docs/design/AGENTS.md b/docs/design/AGENTS.md index a9dceb47e..b564254f3 100644 --- a/docs/design/AGENTS.md +++ b/docs/design/AGENTS.md @@ -34,7 +34,7 @@ Skip what the suite already enforces. `tests/v2/test_rules_doc.py`, `tests/v2/te 8. **Guard docstring vs. what the guard enforces**, especially when the promise spans two test modules. 9. **Prose is input to the doc parsers.** In a rule (tests/v2/rules_skeleton.py), every non-blank line inside a fence is an example and must parse; outside a fence, a line, label text or bullet text that parses as an example or opens with a quote or a bracket is refused, as is any line holding an arrow and an assertion (` → family=`) outside a backtick span, so an example cannot sit unrun in prose; so is a `Signal:` or `no-boundary:` line above the `---` footer, a second When, Tolerated or Then paragraph, a bullet marker other than `- ` (a numbered item included), a nested list in any marker or a heading in a bullet's continuation lines, a line opening a block-format rule (`X1. ` at the start of a line, inside a field included), and an unknown or repeated part of the pointer line; a column-0 line ends the rule only when it is a markdown heading (`#` and a space); a fence is a bare ``` line, and one carrying a language tag, or a `~~~` fence, is refused; a line opening `**Word:**`, the colon inside the bold, is a field label and is refused unless Word is one of the seven labels; a line opening with a label word (When, Tolerated, Then, Because, Except, Precedence, Accepted, or Rationale) and a colon in any other spelling is refused as a near miss; other bold text at the start of a line, such as `**Note**:` with the colon outside the bold, is read as the open prose field's prose, and after a bullet list it is a line outside any field and refused. Outside a rule, only a section's `## Name (X)` heading, each letter once, and its one `Background:` paragraph may stand: a subheading in a rule file, a misspelled rule heading or a fence in a section file is refused, glued to the Background or not (the glued check reads structure at the start of a line only), as is an example in a Background and a section heading with no Background. A comment's quoted values join the citation block above them. 10. **Re-run every capability claim.** Axis 1 recomputes numbers; this one recomputes CAN and CANNOT. A statement that the parser never or cannot produce some reading is measured by a parse run written now, never derived from a mechanism — most of all when it justifies building something. (#291 derived "a multi-word credential is unparseable" from "vocabulary is matched one token at a time" — which `given_name_titles` had been an exception to since 2026-07-19, a month before that arc, and `maiden_markers` is a second since #434 — and specified a vocabulary set, a matching unit, a predicate and a `Lexicon` field on it; `parse("John Smith, MD PhD").suffix` had been `'MD PhD'` since 1.4.0.) -11. **State the invariant that relates two DIFFERENT inputs.** Axes 1–10 compare a document to another document, to its own examples, or to the implementation, so every one of them can only find code that DISAGREES with a rule — none of them can find a rule that is simply wrong. When a rule implies that two spellings of the same name must parse alike, write that as an invariant over both inputs and run it: it consults no rule statement, so it is not blind that way. Distinct from an invariant over two VIEWS of one parse, like `test_the_family_partitions_into_particles_and_base` in tests/v2/test_cases.py — that one holds however wrong the rule is. (Two review rounds a month apart found real defects and missed the premise under them: #461 was backed out after the rule turned out wrong, #466 closed unmerged for the same reason, and in both, every reviewer checked the code against the rule and THE RULE was at fault. The worked invariant: the family-comma writing under the default order and the comma-less writing under FAMILY_FIRST must parse alike. Measured, it holds for the great majority of the particle vocabulary and fails exactly on the words that are also suffix vocabulary — recovering P6's contested-membership set from behavior, having read no rule. Composition, measurement and recompute recipe: decisions/two-input-invariants.) +11. **State the invariant that relates two DIFFERENT inputs.** Axes 1–10 compare a document to another document, to its own examples, or to the implementation, so every one of them can only find code that DISAGREES with a rule — none of them can find a rule that is simply wrong. When a rule implies that two spellings of the same name must parse alike, write that as an invariant over both inputs and run it: it consults no rule statement, so it is not blind that way. Distinct from an invariant over two VIEWS of one parse, like `test_the_family_and_the_suffix_partition_into_their_views` in tests/v2/test_cases.py — that one holds however wrong the rule is. (Two review rounds a month apart found real defects and missed the premise under them: #461 was backed out after the rule turned out wrong, #466 closed unmerged for the same reason, and in both, every reviewer checked the code against the rule and THE RULE was at fault. The worked invariant: the family-comma writing under the default order and the comma-less writing under FAMILY_FIRST must parse alike. Measured, it holds for the great majority of the particle vocabulary and fails exactly on the words that are also suffix vocabulary — recovering P6's contested-membership set from behavior, having read no rule. Composition, measurement and recompute recipe: decisions/two-input-invariants.) 12. **Name the signal each new clause reads.** For every clause the diff adds to a rule's statement — for every Except bullet, since each is a place where another reading takes over — say what in the written name it reads, and check it against the rule's `Signal:` line; a diff that moves tests/v2/rules_budget.json is where to look first. A signal the rule did not already read is a new rule wanting its own ID and a line in the hub's map ("One rule per piece of evidence" above), and a clause that restates another rule's condition instead of citing it is the same finding from the other side. This is a structural finding, not a style one: report it under the usual format, the consequence being the next split and its hand retargeting. (S2 reached seven rules' worth of clauses and C1 ten, one sound clause at a time, every review passing, until #682 and #728 split them after the fact.) Also: before reporting "N names move", report the size of the population that COULD move — a small count over a corpus blind to the shape is evidence about the corpus. For rules/P6 the population is the comma-bearing names that END in a particle — a small fraction of the comma-bearing names, which are themselves under a third of the corpus; decisions/P6 carries the dated measurement and the recompute. Do not restate a corpus count here. Axis 1 over this very sentence once caught it conflating the population with the movers, and the corrected figures that replaced it were superseded within the month as the corpus grew — a standing count in this file is wrong twice over, once for the class and once for the digits. diff --git a/docs/design/decisions/R8-generation-and-credentials-views.md b/docs/design/decisions/R8-generation-and-credentials-views.md new file mode 100644 index 000000000..bfec951eb --- /dev/null +++ b/docs/design/decisions/R8-generation-and-credentials-views.md @@ -0,0 +1,21 @@ +# R8 — the generation and credentials views + +## Standing + +- `ParsedName.generation` and `ParsedName.credentials` partition `suffix` by the reading each word took, a generation or an agnomen in the first and every other word in the second; they are views, not roles, so `suffix`, `as_dict()`, `replace()`'s fields and the repr are unchanged, item 4 of decisions/vocabulary-model's #754 output-model entry — 2026-10-29 #754, sub-phase 4b. +- A listed suffix word's kind is read from the reading index (`_reading_index.suffix_kind_of`, through `_vocab.suffix_kind`), since the compiled sets do not record it — 2026-10-29 #754, sub-phase 4b. + +Elsewhere: the field's composition and the 2026-08-16 decision not to split it, which this one supersedes for the views while keeping the field, decisions/suffix-field-composition. + +Open: whether `credentials` should leave the honorifics out, CLDR having no third field (the RFC's Phase 4, Left open). + +## Log + +- 2026-10-29 #754, sub-phase 4b (#326) — IMPLEMENTED item 4 of decisions/vocabulary-model's 2026-10-28 #754 entry. What the implementation decided, beyond that entry: + 1. **The kind of a listed suffix word comes from the reading index.** `jr` and `esq` compile into `suffix_words` with the same tags, so 4a read both as `post-nominal` and pinned the gap with strict xfails. `_vocab.suffix_kind` now asks `_reading_index.suffix_kind_of` for a word tagged `vocab:suffix-word`, a memo whose hit costs no frame, so `Token.reading` and `Ambiguity.alternative` move together: a lone `Jr` names a `generation` alternative where it named a `post-nominal` one, and a credential written as a word (`博士`) reads `credential`. The vocabulary's courtesy, honorific, professional honorific and status kinds have no reading kind of their own and stay `post-nominal`. `_vocab` imports `_reading_index` for it, which tests/v2/test_layering.py's table records. + 2. **The kind is read whatever the reading's default.** `st`, a Czech generation written `default = false`, reads `generation` when a caller's `Lexicon` lists it, while its `languages` name no file, since none holds it on. A pack turning such a reading on (phase 3's `cs`, 3f) then needs nothing more for the kind; a word only a caller's own `Lexicon` lists has no row and reads `post-nominal`. + 3. **Each word is placed by its own reading.** A `joined` mark is not only the second word of a split credential (`Ph.` `D.`, which takes the first word's reading) but every word of a suffix run written without commas (`Jr. III PhD`), so a view places each word by its reading and joins it to the word before with a space only where that word is in the same view. A connective goes with the word before it (`PhD and MD`). + 4. **A suffix word with no reading is a credential.** `replace()` and `Parser.revise()` write tokens with no `Token.reading` (4a), so `replace(suffix="Jr.")` reads credentials 'Jr.': nothing records what the word was read as, and the catch-all is the view that claims least. + 5. **The views stay out of `as_dict()`, `--json` and the repr**, as `family_base` and the other derived views do: `as_dict()` is the seven fields `replace()` takes back. They are `render()` keys and assertable fields of a rule's example lines. + 6. **The snapshot records them** (`tools/differential/snapshot.py`, a `RECORDED_LATER` pair): `generation` where the suffix holds one, and `credentials` beside it where the suffix holds both, so a row with neither is a suffix of credentials only, or none. No other key moved on recording. + - Measured 2026-10-29 on the 4b branch over the committed snapshot (`tools/differential/snapshot.jsonl`, 6,560 readings, rules/R8's own examples included): 1,067 rows hold a suffix, 481 of them a generation, 136 a generation and credentials both. Recompute: count rows with `suffix`, `generation` and `credentials` in the snapshot. Over `cldr_fields.jsonl`, 576 distinct (text, order) renderings carry CLDR's `generation` or `credentials`; 65 parse to exactly CLDR's suffix words, and all 65 split into CLDR's two fields. Recompute: parse each distinct text under its order (`givenFirst` as `GIVEN_FIRST`, `surnameFirst` as `FAMILY_FIRST`, any other order the default), keep those whose `suffix` words, commas removed, equal CLDR's `generation` and `credentials` words together, and compare each view's words with its field's. The RFC's 615 and 75 (2026-10-28) counted renderings, not distinct texts. diff --git a/docs/design/decisions/README.md b/docs/design/decisions/README.md index 378a9e435..a5343238d 100644 --- a/docs/design/decisions/README.md +++ b/docs/design/decisions/README.md @@ -126,6 +126,7 @@ Entry conventions: - [R5 — the case-repair gate](R5-case-repair-gate.md) - [R6 — the default rendering follows the written name](R6-default-rendering-follows-the-written-name.md) - [R7 — no initials in a script that writes none](R7-no-initials-in-a-script-that-writes-none.md) +- [R8 — the generation and credentials views](R8-generation-and-credentials-views.md) ## Construction & configuration diagnostics (D) diff --git a/docs/design/decisions/suffix-field-composition.md b/docs/design/decisions/suffix-field-composition.md index 6c93a6966..9fec70700 100644 --- a/docs/design/decisions/suffix-field-composition.md +++ b/docs/design/decisions/suffix-field-composition.md @@ -4,9 +4,9 @@ - `suffix` stays one field holding generational words, credentials and postnominal honorifics; the composition is recorded, with the command that re-counts it, instead of splitting the field — 2026-08-16 #326. -Elsewhere: generation and credential are separate kinds in the vocabulary, though they still compile into the one field, decisions/vocabulary-model's 2026-10-15/16 entry (item 3). +Elsewhere: generation and credential are separate kinds in the vocabulary, though they still compile into the one field, decisions/vocabulary-model's 2026-10-15/16 entry (item 3). The field stays one, and since 3.0 two views partition it by the reading each word took, `generation` and `credentials`, the honorifics in the second (#326, decisions/R8). -Open: [#326](https://github.com/derek73/python-nameparser/issues/326) — whether `suffix` splits into generation and credentials; whether the honorifics belong in `suffix` at all is deliberately undecided here. +Open: whether the honorifics belong in `suffix` at all is deliberately undecided here; whether `credentials` should leave them out is decisions/R8's. ## Log diff --git a/docs/design/decisions/vocabulary-model.md b/docs/design/decisions/vocabulary-model.md index 05e4cd050..c779c30e5 100644 --- a/docs/design/decisions/vocabulary-model.md +++ b/docs/design/decisions/vocabulary-model.md @@ -312,3 +312,4 @@ Open: #913 (the title words phase 2j left, read as titles though borne as names) 1. **Chained choices compose one after the other.** `parser_for(EN, base=parser_for(PT))` reads `Maria do Carmo` family `Carmo` and `John Smith DO` family `DO`: `en` drops `pt`'s particle and `pt` had dropped `en`'s credential. The way to choose both is one call, `parser_for(PT, EN)`, which keeps both readings (`do Carmo`, suffix `DO`). 2. **A choice drops what it removes from the base, whoever put it there.** `parser_for(EN, base=Parser(lexicon=Lexicon.empty().add(particles={'do', 'van'})))` keeps only `van`: the delta removes `do` from `particles`, the caller's listing included, and leaves every entry it does not touch. Weighed against: (b) a `Parser.languages` field recording the choice, so a base's choice unions with the packs' (a new public name, safe for pickles, `Parser`'s guard honoring `ADDED_IN`), deferred rather than declined; (c) a `Lexicon` field recording it, which every older `Lexicon`, `Parser` and pack pickle would refuse, `Lexicon`'s guard not honoring `ADDED_IN`. Open: (b), with the configure-by-reading method names (the 2026-10-28 #754 `Lexicon` surface entry), and with it whether `Reading.languages` follows the choice (the phase 3b entry above). +- **2026-10-29 #754, sub-phase 4b — `generation` AND `credentials` LAND AS VIEWS PARTITIONING `suffix`, AND A LISTED SUFFIX WORD'S KIND IS READ FROM THE READING INDEX; NO FIELD OF ANY PARSE MOVES.** Carries out item 4 of the 2026-10-28 #754 output-model entry and closes 4a's `Jr`/`Sr` seam: `_vocab.suffix_kind` asks the reading index for the kind of a word tagged `vocab:suffix-word`, so `Token.reading` and `Ambiguity.alternative` read `Jr` as a generation through the one predicate. What the implementation decided, the measurement and its recipe are in decisions/R8's 2026-10-29 entry, and the rule is rules/R8. diff --git a/docs/design/rules/R8-generation-and-credentials-views.md b/docs/design/rules/R8-generation-and-credentials-views.md new file mode 100644 index 000000000..7b1061806 --- /dev/null +++ b/docs/design/rules/R8-generation-and-credentials-views.md @@ -0,0 +1,43 @@ +# R8 — the generation and credentials views + +**When:** the suffix of a parsed name is read by what each of its words is, as in "Smith, John, Jr., MD, Esq.". + +**Then:** the suffix splits into two views that partition it, the generation holding its words read as a generation or an agnomen and the credentials holding every other word, each joining its words in written order as the suffix joins them. + +**Because:** a generation numbers the bearer among relatives of the same name while a credential is earned, and CLDR's person-name fields keep the two apart and format them differently. A caller wanting one had to re-read the suffix against vocabulary they would have had to rebuild (#326). Both are views, so the suffix field itself does not change. + +``` +"Smith, John, Jr., MD, Esq." → generation="Jr." +"Smith, John, Jr., MD, Esq." → credentials="MD, Esq." +"Smith, John, Jr., MD, Esq." → suffix="Jr., MD, Esq." +"Dr. Juan Q. Xavier de la Vega III" → generation="III" +"Pedro Alves Filho" → generation="Filho" +"John Smith PhD" → credentials="PhD" +"John Smith PhD" → generation="" +"John Smith" → generation="" · boundary +"John Smith" → credentials="" +``` + +**Except:** + +- **A word of the suffix vocabulary that is neither a generation nor a credential** (a courtesy, an honorific, a status) is in the credentials, CLDR's catch-all, since CLDR has no third field; its reading's kind, a post-nominal word, tells it apart for a caller who needs it. + ``` + "John Smith Esq." → credentials="Esq." + "王小明先生" → credentials="先生" + ``` +- **A word written in a run without commas** joins the word before it with a space where both are in the same view, and opens an entry of its own where they are not, so the two kinds of word in one run come apart; a connective goes with the word before it. + ``` + "John Smith Jr. III PhD" → generation="Jr. III" + "John Smith Jr. III PhD" → credentials="PhD" + "John Smith Ph. D. Jr." → credentials="Ph. D." + "John Smith, PhD and MD Jr." → credentials="PhD and MD" + ``` + +**Accepted:** + +- A suffix word with no reading, one that `replace()` or `Parser.revise()` wrote, is in the credentials whatever it is, since nothing records what it was read as. +- A listed word's kind is the shipped vocabulary's, read whatever the reading's default, so a word only a caller's own `Lexicon` lists is in the credentials, a generation word included. + +--- +**Signal:** none in the name: the reading each suffix word took +**history:** decisions/R8 · **implemented:** nameparser/_types.py, nameparser/_pipeline/_vocab.py diff --git a/docs/design/rules/README.md b/docs/design/rules/README.md index 618500845..2647f0ad0 100644 --- a/docs/design/rules/README.md +++ b/docs/design/rules/README.md @@ -222,6 +222,7 @@ Terms the rules use without defining them each time, each with the rule that def - [R5 — the case-repair gate](R5-case-repair-gate.md) - [R6 — the default rendering follows the written name](R6-default-rendering-follows-the-written-name.md) - [R7 — no initials in a script that writes none](R7-no-initials-in-a-script-that-writes-none.md) +- [R8 — the generation and credentials views](R8-generation-and-credentials-views.md) ## [Construction & configuration diagnostics (D)](D-construction-and-configuration-diagnostics.md) diff --git a/docs/design/rules/S-suffixes-generational-and-credentials.md b/docs/design/rules/S-suffixes-generational-and-credentials.md index 6560e242e..350e90719 100644 --- a/docs/design/rules/S-suffixes-generational-and-credentials.md +++ b/docs/design/rules/S-suffixes-generational-and-credentials.md @@ -1,4 +1,4 @@ ## Suffixes: generational & credentials (S) -Background: what follows a name is one of two different things — generational suffixes (Jr., III), which attach to the name itself, and credentials (PhD, MD, MBA), which are earned attachments. The suffix sets match one written word at a time: a multi-word entry there can never match anything and is warned about at configuration. Only three sets are exempt from that rule -- given_name_titles, maiden_markers since #434, and title_phrases since #894 -- and none is a suffix set, so within the suffix vocabulary the one-word rule is absolute. That limit is on STORAGE, not on the shape a name may have: adjacent suffix tokens are reassembled after matching (`_vocab.is_wholly_suffix`), so a multi-word credential is reachable as its component words -- `John Smith, MD PhD` has read suffix `MD PhD` since 1.4.0 -- and a caller reaches an unshipped one by adding the words it is made of rather than the phrase (#433). The eight multi-word entries that shipped dead for years span the suffix sets and the titles alike and are the Excluded story in decisions/vocabulary-exclusions. CLDR personNames keeps them as separate fields (`generation`, `credentials`) and formats them differently; this library currently reports both in one `suffix` field, a merge #326 examines. The vocabulary is largely split already: a generational word list and a credential acronym list, plus a short list of acronyms that are also ordinary names (MA, BA) and so are AMBIGUOUS as bare words. +Background: what follows a name is one of two different things — generational suffixes (Jr., III), which attach to the name itself, and credentials (PhD, MD, MBA), which are earned attachments. The suffix sets match one written word at a time: a multi-word entry there can never match anything and is warned about at configuration. Only three sets are exempt from that rule -- given_name_titles, maiden_markers since #434, and title_phrases since #894 -- and none is a suffix set, so within the suffix vocabulary the one-word rule is absolute. That limit is on STORAGE, not on the shape a name may have: adjacent suffix tokens are reassembled after matching (`_vocab.is_wholly_suffix`), so a multi-word credential is reachable as its component words -- `John Smith, MD PhD` has read suffix `MD PhD` since 1.4.0 -- and a caller reaches an unshipped one by adding the words it is made of rather than the phrase (#433). The eight multi-word entries that shipped dead for years span the suffix sets and the titles alike and are the Excluded story in decisions/vocabulary-exclusions. CLDR personNames keeps them as separate fields (`generation`, `credentials`) and formats them differently; this library reports both in one `suffix` field, and since 3.0 two views partition it by the reading each word took (R8, #326). The vocabulary is largely split already: a generational word list and a credential acronym list, plus a short list of acronyms that are also ordinary names (MA, BA) and so are AMBIGUOUS as bare words. diff --git a/docs/design/vocabulary-model-rfc.md b/docs/design/vocabulary-model-rfc.md index 4490b88d8..966ad374f 100644 --- a/docs/design/vocabulary-model-rfc.md +++ b/docs/design/vocabulary-model-rfc.md @@ -386,7 +386,7 @@ Each sub-phase is one PR, measured on its own base as phase 2's and phase 3's ar | Sub-phase | What | Needs | |---|---|---| | 4a | `Token.reading` and `ReadingKind.PATRONYMIC`, kind and source read at assemble from each token's final role and the tags the deciding stages left; `Reading.languages` once 3a's index exists. Landed (decisions/vocabulary-model's 2026-10-29 #754, sub-phase 4a and 4a's follow-up entries) | — (neutral); 3a for `languages` | -| 4b | `generation` and `credentials` (#326); a listed suffix word's kind read from 3a's index, which 4a could not split (`Jr` and `Esq.` both read `post-nominal` there) | 4a (neutral); 3a for the kind | +| 4b | `generation` and `credentials` (#326); a listed suffix word's kind read from 3a's index, which 4a could not split (`Jr` and `Esq.` both read `post-nominal` there). Landed (decisions/R8's 2026-10-29 entry) | 4a (neutral); 3a for the kind | | 4c | `patronymic`: the vocabulary's patronymic particles, and the RU and TR_AZ rules writing the reading | 4a (neutral) | | 4d | `surname2`: O6's stable tag | — (neutral) | | 4e | the render defaults and `ParsedName.order` | — | diff --git a/docs/release_log.rst b/docs/release_log.rst index 93a2db718..2e241a6b0 100644 --- a/docs/release_log.rst +++ b/docs/release_log.rst @@ -7,6 +7,7 @@ Release Log **Additions** - **Add Locale.languages, a choice of languages for the default vocabulary.** ``parser_for(Locale(code="pt", lexicon=Lexicon.empty(), languages=frozenset({"pt"}))).parse("ANA SILVA E SOUZA")`` gives family ``SILVA E SOUZA``, where the default reads family ``SOUZA``, the ``E`` an initial: a chosen language's reading of a word it has a vocabulary reading of wins, and the other languages' vocabulary readings of that word leave, while its readings as a name and the readings shared by every language stay, so under ``pt`` ``John Smith DO`` reads family ``DO``. A pack choosing no language parses as before. See :doc:`locales`. :issue:`753` + - **Add ParsedName.generation and ParsedName.credentials, the suffix split by kind.** ``parse("Smith, John, Jr., MD, Esq.")`` gives generation ``Jr.`` and credentials ``MD, Esq.``, where 1.4.0 through 2.8.0 gave only suffix ``Jr., MD, Esq.``, which is unchanged. They are views like ``family_base``: render keys, not fields of ``as_dict()``. An honorific after a name (``Esq.``, ``さん``) is a credential, and a suffix written by ``replace()`` is all credentials. ``Token.reading`` reads ``Jr.`` and ``Sr.`` as a generation. :issue:`326`, :issue:`754` - **Add Token.reading, the reading the parse took for each word.** ``parse("John Smith PhD Jones").tokens[-1].reading`` is ``Reading('credential' as 'suffix', 'position')``, the reading 2.7's ``Ambiguity.alternative`` gave only for the other side of a fork, and ``ReadingKind`` gains ``patronymic``. The field is not compared, and a ``ParsedName`` pickled by 2.x loads with no readings. :issue:`754` - **Add Reading.languages, the language files that list a word the way it was read.** ``parse("Dr. Juan de la Vega III").tokens[2].reading.languages`` is ``('es', 'fr', 'it', 'nl', 'pt')`` for the particle ``de``, and ``Ambiguity.alternative`` names its files too; a reading by shape or position names none. It is not compared, and a ``Reading`` pickled by 2.7 or 2.8 loads with none. The first parse in a process that meets a listed word loads the reading index once: about 1 ms, or about 16 ms where Python writes no bytecode cache. :issue:`754`, :issue:`753` diff --git a/docs/usage.rst b/docs/usage.rst index 7223c0063..5851b851a 100644 --- a/docs/usage.rst +++ b/docs/usage.rst @@ -720,6 +720,21 @@ is the problem the split exists to solve: >>> [n.family for n in sorted(names, key=lambda n: n.family.lower())] ['de la Vega', 'Smith', 'van Gogh'] +``generation`` and ``credentials`` split the suffix the way a name +form's "Jr., III" and "PhD, MD" boxes do: a generation numbers the +bearer among relatives of the same name, and every other word after +the name, an honorific such as ``Esq.`` included, is a credential. +Each joins its words as ``suffix`` does, and ``suffix`` itself is +unchanged: + +.. doctest:: + + >>> suffixed = parse("Smith, John, Jr., MD, Esq.") + >>> suffixed.generation, suffixed.credentials, suffixed.suffix + ('Jr.', 'MD, Esq.', 'Jr., MD, Esq.') + >>> suffixed.render("{given} {family} {generation}") + 'John Smith Jr.' + Dicts and strings ------------------ diff --git a/nameparser/_pipeline/_assemble.py b/nameparser/_pipeline/_assemble.py index b5ee09568..fdbb3140e 100644 --- a/nameparser/_pipeline/_assemble.py +++ b/nameparser/_pipeline/_assemble.py @@ -67,7 +67,8 @@ def _kinds_of(*categories: str) -> frozenset[str]: #: The vocabulary kinds (_reading_index.CATEGORY's keys) whose rows #: hold a reading of each kind. A suffix reading takes the word's #: suffix rows whatever their finer kind, since a word has one suffix -#: kind (the build's check 4) and the parse does not yet read it (4b). +#: kind (the build's check 4), which `_vocab.suffix_kind` has already +#: read the reading's kind by (4b). #: A name reading's rows depend on its field (`_NAME_KINDS`). An #: initial and a patronymic are read by shape or rule, never from a #: file. @@ -303,7 +304,8 @@ def assemble(state: ParseState) -> ParsedName: # later (P1's fold, P6's attachment, the policy folds) needs # no reading of its own to keep in step. Per token, measured # 2026-10-29: no frame for an untagged non-suffix word, the - # commonest; one for a listed or shaped suffix (`suffix_kind`) + # commonest; one for a listed or shaped suffix (`suffix_kind`, + # whose index lookup for a listed word is a memo) # and for a tagged name word that reaches `name_source` or a # family word glued to the next (`_normalize`); three for a # suffix word nothing tags or lists (`suffix_kind`, then diff --git a/nameparser/_pipeline/_vocab.py b/nameparser/_pipeline/_vocab.py index e0d319213..2b760d720 100644 --- a/nameparser/_pipeline/_vocab.py +++ b/nameparser/_pipeline/_vocab.py @@ -43,7 +43,9 @@ builds one, and the tags they read are this module's vocabulary. Layering: imports _lexicon, _policy, and _pipeline._state (WorkToken, -comma_bucket, PendingReading -- read-only, never a whole ParseState). +comma_bucket, PendingReading -- read-only, never a whole ParseState), +and _reading_index for the one fact no compiled set records, the kind +of a listed suffix word (suffix_kind, 3.0's 4b). """ from __future__ import annotations @@ -58,6 +60,7 @@ ) from nameparser._policy import (CapsSuffixes, Policy, Script, _JA_SCRIPTS, _NO_INITIALS, _SCRIPT_RANGES, _script_matcher) +from nameparser._reading_index import suffix_kind_of from nameparser._pipeline._state import ( AGNOMEN_TAG, AMBIGUOUS_ACRONYM_TAG, AMBIGUOUS_WORD_TAG, COMMA_CHARS, Deferred, @@ -2165,8 +2168,8 @@ def resolve_script_set(scripts: Iterable[Script]) -> Script | None: def suffix_reading(token: WorkToken) -> PendingReading: """The suffix reading of a word a decision read as a name: a generation or agnomen by its listed word, a numeral by its shape - unless listed, another listed post-nominal word as a suffix, and - otherwise a credential, listed or shaped.""" + unless listed, another listed suffix word by its vocabulary kind, + and otherwise a credential, listed or shaped.""" kind, source = suffix_kind(token.text, token.tags) return PendingReading(kind, source, Role.SUFFIX) @@ -2186,12 +2189,35 @@ def suffix_kind(text: str, return (ReadingKind.GENERATION, ReadingSource.VOCABULARY if listed else ReadingSource.SHAPE) if "vocab:suffix-word" in tags: - return ReadingKind.POST_NOMINAL, ReadingSource.VOCABULARY + return _listed_word_kind(text), ReadingSource.VOCABULARY return (ReadingKind.CREDENTIAL, ReadingSource.SHAPE if SHAPE_ACRONYM_TAG in tags else ReadingSource.VOCABULARY) +#: The suffix kinds of the vocabulary a parse names a listed suffix +#: word by; the word kinds with no reading kind of their own (a +#: courtesy, an honorific, a status) read as a post-nominal word. +_LISTED_WORD_KINDS = {"generation": ReadingKind.GENERATION, + "agnomen": ReadingKind.AGNOMEN, + "credential": ReadingKind.CREDENTIAL} + + +# rules/R8: "A listed word's kind is the shipped vocabulary's, read +# whatever the reading's default" -- the kind the views partition the +# suffix by (decisions/R8, #326). A memo, C-level on a hit, so a suffix +# word read before costs no frame; bounded since its key is the +# caller's text. +@functools.lru_cache(maxsize=4096) +def _listed_word_kind(text: str) -> ReadingKind: + """The kind of a listed suffix word, which the compiled sets do not + record (`jr` and `esq` both compile into `suffix_words`): read from + the shipped files' reading index (3.0's 4b, #326), so a word only a + caller's `Lexicon` lists reads as a post-nominal word.""" + kind = suffix_kind_of(_normalize(text)) + return _LISTED_WORD_KINDS.get(kind or "", ReadingKind.POST_NOMINAL) + + def name_reading(token: WorkToken, role: Role | Deferred) -> PendingReading: """The name reading of a word a decision read as something else, landing in `role`: an initial where the word is one letter or diff --git a/nameparser/_reading_index.py b/nameparser/_reading_index.py index 621a07b3e..084ceb82b 100644 --- a/nameparser/_reading_index.py +++ b/nameparser/_reading_index.py @@ -366,6 +366,19 @@ def languages_of(text: str, kinds: frozenset[str]) -> tuple[str, ...]: return tuple(out) +def suffix_kind_of(text: str) -> str | None: + """The kind of `text`'s suffix reading (a key of :data:`CATEGORY` + whose category is ``suffix``), on by default or not; None for a + word no file holds as a suffix. A word has one suffix kind in every + file (the build's check 4), so the first row says it. `text` is + normalized as :func:`readings_of` takes it. What the parse reads a + listed suffix word's kind by (`_vocab.suffix_kind`, 3.0's 4b).""" + for _tag, kind, _pairs in _by_text().get(text, ()): + if CATEGORY[kind] == "suffix": + return kind + return None + + class CompileError(ValueError): """The readings cannot compile: a fact about the data, which the build reports as a vocabulary error (exit 2) where any other diff --git a/nameparser/_render.py b/nameparser/_render.py index 34d435d8d..0b7910781 100644 --- a/nameparser/_render.py +++ b/nameparser/_render.py @@ -36,7 +36,8 @@ #: str.format keys render() accepts: the seven role fields in canonical #: order (derived from Role -- never restated) plus the derived views. -_DERIVED_VIEWS = ("family_base", "family_particles", "surnames", "given_names") +_DERIVED_VIEWS = ("family_base", "family_particles", "surnames", "given_names", + "generation", "credentials") _RENDER_KEYS = tuple(r.value for r in Role) + _DERIVED_VIEWS #: str.format keys initials() accepts: the three name-bearing roles. diff --git a/nameparser/_types.py b/nameparser/_types.py index cece4d997..7b5ebaf5d 100644 --- a/nameparser/_types.py +++ b/nameparser/_types.py @@ -883,7 +883,8 @@ class ReadingKind(StrEnum): #: A post-nominal credential or other acronym suffix ("MA", "X.Y.Z."). CREDENTIAL = "credential" - #: A generational suffix: a roman numeral, or a word such as "fils". + #: A generational suffix: a roman numeral, or a word such as "Jr." + #: or "fils". GENERATION = "generation" #: An agnomen, a family word that is also a suffix ("Filho", "Neto"). AGNOMEN = "agnomen" @@ -908,6 +909,11 @@ class ReadingKind(StrEnum): PATRONYMIC = "patronymic" +#: The reading kinds :attr:`ParsedName.generation` holds; every other +#: suffix word is in :attr:`ParsedName.credentials` (#326). +_GENERATION_KINDS = frozenset({ReadingKind.GENERATION, ReadingKind.AGNOMEN}) + + class ReadingSource(StrEnum): """Where a :class:`Reading` comes from. A StrEnum; new sources may be added in minor releases.""" @@ -1360,10 +1366,53 @@ def family_base(self) -> str: def surnames(self) -> str: return self._text_for(Role.MIDDLE, Role.FAMILY) + @property + # rules/R8: "the suffix splits into two views that partition it" + # (history: decisions/R8, #326) + def generation(self) -> str: + """The suffix words read as a generation or an agnomen ("Jr.", + "III", "Filho"), joined as :attr:`suffix` joins them; ``''`` + for a name with none.""" + return self._suffix_view(True) + + @property + def credentials(self) -> str: + """The rest of the suffix: credentials and every other + post-nominal word ("PhD", "Esq.", "さん"), joined as + :attr:`suffix` joins them; ``''`` for a name with none. A + suffix word with no :attr:`Token.reading` (one :meth:`replace` + or Parser.revise wrote) is counted here.""" + return self._suffix_view(False) + @property def given_names(self) -> str: return self._text_for(Role.GIVEN, Role.MIDDLE) + def _suffix_view(self, generation: bool) -> str: + # the `generation` / `credentials` partition of `suffix`, each + # word placed by the reading it took ('D.' after 'Ph.' takes + # the credential's), a `joined` word attaching with a space as + # in `suffix` where the word before it is in the same view + # ('Jr. III PhD' gives 'Jr. III' and 'PhD'), and a connective + # going with the word it follows ('PhD and MD') + parts: list[str] = [] + before: bool | None = None + for tok in self.tokens: + if tok.role is not Role.SUFFIX: + continue + kind = tok.reading.kind if tok.reading is not None else None + if kind is ReadingKind.CONJUNCTION and before is not None: + keep = before + else: + keep = (kind in _GENERATION_KINDS) is generation + if keep: + if before and "joined" in tok.tags: + parts[-1] += " " + tok.text + else: + parts.append(tok.text) + before = keep + return ", ".join(parts) + # -- structured access ---------------------------------------------- def tokens_for(self, role: Role | str) -> tuple[Token, ...]: diff --git a/tests/v2/pipeline/test_assemble.py b/tests/v2/pipeline/test_assemble.py index 739b72342..0ee87de50 100644 --- a/tests/v2/pipeline/test_assemble.py +++ b/tests/v2/pipeline/test_assemble.py @@ -392,26 +392,19 @@ def test_a_token_replace_or_revise_builds_has_no_reading() -> None: t.reading for t in pn.tokens_for(Role.GIVEN)] -#: The suffix words the compiled sets do not split by kind: `jr` and -#: `esq` both compile into `suffix_words` and carry the same tags, so -#: `_vocab.suffix_kind` reads both as a post-nominal word, which is -#: what `Ambiguity.alternative` already says of such a word -#: (`Rinpoche`). The generation rows are the gap 4b closes by reading a -#: listed word's kind from phase 3's reading index (3a); they are -#: strict, so the fix has to remove the marks. -_SPLIT_BY_KIND_LATER = pytest.mark.xfail( - strict=True, - reason="4b (#754): a listed suffix word's kind comes from 3a's " - "reading index; today Jr and Sr read post-nominal") - - +#: A listed suffix word reads as its vocabulary kind (3.0's 4b): `jr` +#: and `esq` compile into the same set with the same tags, and the +#: reading index tells them apart; a credential written as a word +#: (`博士`) is a credential, and a kind with no reading kind of its own +#: (a courtesy, an honorific) a post-nominal word. @pytest.mark.parametrize("text,word,kind", [ - pytest.param("John Smith Jr.", "Jr.", "generation", - marks=_SPLIT_BY_KIND_LATER), - pytest.param("John Smith Sr.", "Sr.", "generation", - marks=_SPLIT_BY_KIND_LATER), + ("John Smith Jr.", "Jr.", "generation"), + ("John Smith Sr.", "Sr.", "generation"), ("John Smith III", "III", "generation"), + ("Pedro Alves Filho", "Filho", "agnomen"), ("John Smith Esq.", "Esq.", "post-nominal"), + ("王小明先生", "先生", "post-nominal"), + ("王小明 博士", "博士", "credential"), ("John Smith PhD", "PhD", "credential"), ]) def test_a_suffix_word_reads_as_its_vocabulary_kind( @@ -421,6 +414,21 @@ def test_a_suffix_word_reads_as_its_vocabulary_kind( assert tok.reading.kind.value == kind +@pytest.mark.parametrize("word,kind", [ + ("Jr", "generation"), ("Junior", "generation"), ("Esq", "post-nominal"), +]) +def test_a_suffix_words_reading_and_alternative_name_one_kind( + word: str, kind: str) -> None: + # a lone suffix word reads as a name and names the suffix reading + # it did not take; behind a name it takes that reading. One + # predicate (`_vocab.suffix_kind`) names both + (amb,) = parse(word).ambiguities + assert amb.alternative is not None + assert amb.alternative.kind.value == kind + (tok,) = parse(f"John Smith {word}").tokens_for(Role.SUFFIX) + assert tok.reading is not None and tok.reading.kind is amb.alternative.kind + + # -- Reading.languages (3.0, 4a's follow-up): the files holding it ------ #: (name, word, languages): the files the reading index holds the @@ -515,12 +523,14 @@ def test_a_callers_whole_word_names_no_file_of_its_parts( def test_a_reading_from_a_callers_own_vocabulary_names_no_file() -> None: # a word no file holds, and one a file holds only off by default - # (`st`, a Czech generation written `default = false`) + # (`st`, a Czech generation written `default = false`): its kind is + # the word's, read whatever the reading's default (4b), so a pack + # turning it on reads it alike, but no file holds it on lex = Lexicon.default().add(titles={"zzq"}, suffix_words={"st"}) pn = Parser(lexicon=lex).parse("Zzq John Smith St") readings = {t.text: t.reading for t in pn.tokens} assert readings["Zzq"] == Reading("title", "title", "vocabulary") # type: ignore[arg-type] - assert readings["St"] == Reading("post-nominal", "suffix", "vocabulary") # type: ignore[arg-type] + assert readings["St"] == Reading("generation", "suffix", "vocabulary") # type: ignore[arg-type] assert readings["Zzq"] is not None and readings["Zzq"].languages == () assert readings["St"] is not None and readings["St"].languages == () diff --git a/tests/v2/rules_budget.json b/tests/v2/rules_budget.json index 88fa7dbf7..eb9d90552 100644 --- a/tests/v2/rules_budget.json +++ b/tests/v2/rules_budget.json @@ -56,6 +56,7 @@ "R5": {"words": 250, "then_words": 154, "because_sentences": 2, "except": 0, "precedence": 0, "accepted": 0, "accepted_words": 0}, "R6": {"words": 400, "then_words": 265, "because_sentences": 2, "except": 1, "precedence": 0, "accepted": 5, "accepted_words": 289}, "R7": {"words": 142, "then_words": 30, "because_sentences": 2, "except": 0, "precedence": 1, "accepted": 2, "accepted_words": 74}, + "R8": {"words": 219, "then_words": 40, "because_sentences": 3, "except": 2, "precedence": 0, "accepted": 2, "accepted_words": 57}, "S1": {"words": 306, "then_words": 26, "because_sentences": 1, "except": 2, "precedence": 3, "accepted": 0, "accepted_words": 0}, "S2": {"words": 657, "then_words": 119, "because_sentences": 1, "except": 0, "precedence": 7, "accepted": 3, "accepted_words": 222}, "S3": {"words": 960, "then_words": 398, "because_sentences": 3, "except": 4, "precedence": 5, "accepted": 6, "accepted_words": 343}, diff --git a/tests/v2/rules_doc.py b/tests/v2/rules_doc.py index b3fa423da..8ccb1462b 100644 --- a/tests/v2/rules_doc.py +++ b/tests/v2/rules_doc.py @@ -64,7 +64,7 @@ ASSERTABLE_FIELDS = frozenset({ "title", "given", "middle", "family", "suffix", "nickname", "maiden", "family_base", "family_particles", "surnames", "given_names", - "initials", "capitalized", "capitalized_forced", "str", + "generation", "credentials", "initials", "capitalized", "capitalized_forced", "str", "ambiguities", "pieces", "warns", "raises"}) diff --git a/tests/v2/test_cases.py b/tests/v2/test_cases.py index 608dc1d31..61dc129ac 100644 --- a/tests/v2/test_cases.py +++ b/tests/v2/test_cases.py @@ -70,7 +70,7 @@ def _swept(case_id: str, @pytest.mark.parametrize("case,order", _SWEPT_ROWS, ids=_SWEPT_IDS) -def test_the_family_partitions_into_particles_and_base( +def test_the_family_and_the_suffix_partition_into_their_views( case: Case, order: tuple[Role, Role, Role] | None) -> None: """rules/R2's invariant: a particle needs a base to attach to, so a family made only of particles is a family whose words are not @@ -84,8 +84,16 @@ def test_the_family_partitions_into_particles_and_base( strings, because the family renders in written order while the two views render particles first ("Vega, de la" is family 'Vega de la', particles 'de la', base 'Vega'). + + rules/R8's views partition the suffix the same way, its words + exactly the generation's plus the credentials', and join this + walk rather than parsing the grid again. """ pn = _swept(case.id, order) + assert sorted(pn.suffix.replace(",", " ").split()) == sorted( + (pn.generation + " " + pn.credentials).replace(",", " ").split()), ( + f"{case.text!r}: suffix={pn.suffix!r} is not partitioned by " + f"generation={pn.generation!r} + credentials={pn.credentials!r}") if not pn.family: return assert pn.family_base, ( diff --git a/tests/v2/test_layering.py b/tests/v2/test_layering.py index ecc7f9b6a..5deb1a46b 100644 --- a/tests/v2/test_layering.py +++ b/tests/v2/test_layering.py @@ -85,8 +85,13 @@ # reads WorkToken.role/span and comma_bucket, never a whole # ParseState. Widening this past _state is the tell that a text- # level predicate has grown a dependency on a stage. + # _reading_index joined in 3.0's 4b for a listed suffix word's + # kind, a fact about the word's text no compiled set records + # (`_vocab.suffix_kind`), and it imports nothing internal at + # module level. "_pipeline/_vocab.py": ("nameparser._lexicon", "nameparser._policy", - "nameparser._pipeline._state"), + "nameparser._pipeline._state", + "nameparser._reading_index"), "_pipeline/_extract.py": _PIPELINE_STAGE_ALLOWED, "_pipeline/_tokenize.py": _PIPELINE_STAGE_ALLOWED, "_pipeline/_script_segment.py": _PIPELINE_STAGE_ALLOWED, diff --git a/tests/v2/test_snapshot.py b/tests/v2/test_snapshot.py index c520a8032..e825f23da 100644 --- a/tests/v2/test_snapshot.py +++ b/tests/v2/test_snapshot.py @@ -76,7 +76,7 @@ def test_a_snapshot_predating_the_case_views_is_not_compared_on_them() -> None: for k, r in new.items()} # a headerless snapshot records no alternative either assert snapshot.unrecorded_views(None, keys, old, new) == ( - *snapshot.CASE_VIEWS, "alternatives") + *snapshot.CASE_VIEWS, "alternatives", *snapshot.SUFFIX_VIEWS) assert not snapshot.grouped(old, new) # A snapshot that records a view on one row, or only the plain # view, still compares both: a name repair leaves alone records none. @@ -84,7 +84,7 @@ def test_a_snapshot_predating_the_case_views_is_not_compared_on_them() -> None: new = {snapshot.key(r): dict(r) for r in rows} current = {k: dict(r) for k, r in new.items()} assert snapshot.unrecorded_views(None, keys, current, new) == ( - "alternatives",) + "alternatives", *snapshot.SUFFIX_VIEWS) assert new == current assert not any("capitalized_force" in r for r in current.values()) @@ -103,7 +103,7 @@ def test_a_snapshot_predating_the_alternatives_is_not_compared_on_them( old = {k: {f: v for f, v in r.items() if f != "alternatives"} for k, r in new.items()} assert snapshot.unrecorded_views(None, keys, old, new) == ( - "alternatives",) + "alternatives", *snapshot.SUFFIX_VIEWS) assert not snapshot.grouped(old, new) rows = snapshot.read([("JOHN SMITH MA", None), ("Jack MA", None)]) new = {snapshot.key(r): dict(r) for r in rows} @@ -135,10 +135,24 @@ def test_a_snapshot_whose_names_report_nothing_still_records_alternatives( # from both sides rather than reporting each as lost case_only = frozenset(snapshot.CASE_VIEWS) assert snapshot.unrecorded_views(snapshot.recorded(text), case_only, - old, new) == ("alternatives",) + old, new) == ("alternatives", + *snapshot.SUFFIX_VIEWS) assert not snapshot.grouped(old, new) +def test_a_row_records_the_suffix_views_where_the_suffix_holds_a_generation( + ) -> None: + # `generation` where there is one, `credentials` beside it where + # the suffix holds both; a row with neither has a suffix of + # credentials only, or none (rules/R8) + plain, creds, gen, both = snapshot.read([ + ("John Smith", None), ("John Smith PhD", None), + ("John Smith Jr.", None), ("John Smith Jr., PhD", None)]) + assert not set(snapshot.SUFFIX_VIEWS) & (set(plain) | set(creds)) + assert (gen["generation"], "credentials" in gen) == ("Jr.", False) + assert (both["generation"], both["credentials"]) == ("Jr.", "PhD") + + def test_a_lost_alternative_shows_beside_an_identical_one() -> None: # Each report's alternative is recorded in report order, so losing # one of two identical ones moves the row (#902's review); a set of diff --git a/tests/v2/test_types.py b/tests/v2/test_types.py index 1a01233c1..ade183ffa 100644 --- a/tests/v2/test_types.py +++ b/tests/v2/test_types.py @@ -301,6 +301,55 @@ def test_derived_views_filter_on_stable_particle_tag() -> None: assert pn.given_names == "Juan" # given + middle +# -- the suffix's generation and credentials views (rules/R8, #326) -- + +@pytest.mark.parametrize("text,generation,credentials", [ + # the empty path: a name with no suffix, and a suffix of one kind + ("John Smith", "", ""), + ("John Smith PhD", "", "PhD"), + ("John Smith Jr.", "Jr.", ""), + # comma-joined as the suffix is, each view in written order + ("Smith, John, Jr., MD, Esq.", "Jr.", "MD, Esq."), + ("John Smith, PhD, Jr., III", "Jr., III", "PhD"), + # a run written without commas comes apart by kind; a split + # credential stays whole, and a connective goes with the word + # before it + ("John Smith Jr. III PhD", "Jr. III", "PhD"), + ("John Smith Ph. D. Jr.", "Jr.", "Ph. D."), + ("John Smith, PhD and MD Jr.", "Jr.", "PhD and MD"), + ("Doe, Jane, and Jr.", "Jr.", "and"), + # an agnomen is a generation; an honorific, a credential + ("Pedro Alves Filho", "Filho", ""), + ("王小明先生", "", "先生"), +]) +def test_the_suffix_views_partition_it_by_reading( + text: str, generation: str, credentials: str) -> None: + pn = parse(text) + assert (pn.generation, pn.credentials) == (generation, credentials) + + +def test_a_suffix_word_with_no_reading_is_a_credential() -> None: + # replace() records no reading, so nothing says what the word was + # read as (rules/R8's Accepted) + pn = parse("John Smith Jr.").replace(suffix="Jr. PhD") + assert pn.suffix == "Jr., PhD" + assert (pn.generation, pn.credentials) == ("", "Jr., PhD") + # a field it did not touch keeps its readings, and so its views + kept = parse("John Smith Jr., PhD").replace(given="Jack") + assert (kept.generation, kept.credentials) == ("Jr.", "PhD") + + +def test_the_suffix_views_are_render_keys_and_not_fields() -> None: + pn = parse("Smith, John, Jr., MD") + assert pn.render("{family} {generation} ({credentials})") \ + == "Smith Jr. (MD)" + # views, like family_base: as_dict and replace() take the seven + # roles only + assert "generation" not in pn.as_dict() + with pytest.raises(TypeError): + pn.replace(generation="Sr.") + + def test_tokens_for_preserves_order() -> None: pn = _delavega() assert [t.text for t in pn.tokens_for(Role.FAMILY)] == ["de", "la", "Vega"] diff --git a/tools/differential/corpus_rules.jsonl b/tools/differential/corpus_rules.jsonl index 2bc3355f9..d32add012 100644 --- a/tools/differential/corpus_rules.jsonl +++ b/tools/differential/corpus_rules.jsonl @@ -426,6 +426,7 @@ "John Smith J. R." "John Smith J.u.n.i.o.r." "John Smith Jr." +"John Smith Jr. III PhD" "John Smith Jr. Prof." "John Smith Jr., AD RA" "John Smith Jr., AD Sr. and Mr." @@ -453,6 +454,7 @@ "John Smith Mc V" "John Smith Msc.Ed." "John Smith Ph. D. Jones" +"John Smith Ph. D. Jr." "John Smith PhD" "John Smith PhD (MA)" "John Smith PhD (Ma)" @@ -554,6 +556,7 @@ "John Smith, PhD MEng" "John Smith, PhD X.Y." "John Smith, PhD XYZ" +"John Smith, PhD and MD Jr." "John Smith, PhD vd DO" "John Smith, PhD-Md" "John Smith, Pharm D" @@ -872,6 +875,7 @@ "Smith, John van der Berg Prof." "Smith, John, Bob (MA)" "Smith, John, Jr." +"Smith, John, Jr., MD, Esq." "Smith, John, MD - PhD" "Smith, John, MD - née Jones Smith" "Smith, John, PhD - and MD" diff --git a/tools/differential/snapshot.jsonl b/tools/differential/snapshot.jsonl index 639f707ca..b78d43122 100644 --- a/tools/differential/snapshot.jsonl +++ b/tools/differential/snapshot.jsonl @@ -1,10 +1,10 @@ -{"recorded": ["capitalized", "capitalized_force", "alternatives"]} +{"recorded": ["capitalized", "capitalized_force", "alternatives", "generation", "credentials"]} {"name": ""} {"name": "\"Rick\" Edmonds", "family": "Edmonds", "nickname": "Rick", "initials": "E."} {"name": "'Smitty' Dr. Jones", "title": "Dr.", "family": "Jones", "nickname": "Smitty", "initials": "J."} {"name": "'Smitty' John Jones", "given": "John", "family": "Jones", "nickname": "Smitty", "initials": "J. J."} {"name": "'Smitty' Jones", "family": "Jones", "nickname": "Smitty", "initials": "J."} -{"name": "'Smitty' Jones Jr.", "given": "Jones", "suffix": "Jr.", "nickname": "Smitty", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "J."} +{"name": "'Smitty' Jones Jr.", "given": "Jones", "suffix": "Jr.", "nickname": "Smitty", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "J.", "generation": "Jr."} {"name": "'Smitty' Sir John", "title": "Sir", "given": "John", "nickname": "Smitty", "initials": "J."} {"name": "(", "ambiguities": ["UNBALANCED_DELIMITER"]} {"name": "()"} @@ -24,8 +24,8 @@ {"name": ", John", "given": "John", "initials": "J."} {"name": ", John (Bob) Smith", "given": "John", "middle": "Smith", "nickname": "Bob", "initials": "J. S."} {"name": ", John Smith", "given": "John", "middle": "Smith", "initials": "J. S."} -{"name": ", John Smith Jr.", "given": "John", "middle": "Smith", "suffix": "Jr.", "initials": "J. S."} -{"name": ", Jr.", "suffix": "Jr."} +{"name": ", John Smith Jr.", "given": "John", "middle": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} +{"name": ", Jr.", "suffix": "Jr.", "generation": "Jr."} {"name": ", MA", "given": "MA", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "M.", "capitalized": "Ma"} {"name": ", MA Smith", "given": "MA", "middle": "Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "M. S.", "capitalized_force": "Ma Smith"} {"name": ", MD/PhD", "suffix": "MD/PhD"} @@ -36,8 +36,8 @@ {"name": "1 & 2, 3 4 5, Mr.", "title": "Mr.", "given": "3", "middle": "4 5", "family": "1 & 2", "initials": "3. 4. 5. 1. 2."} {"name": "1. née Smith", "given": "1.", "maiden": "Smith", "initials": "1."} {"name": "A. D.", "given": "A.", "family": "D.", "initials": "A. D."} -{"name": "A. R., Sr. Maria García Rosa de la Cruz Jr.", "title": "Sr.", "given": "Maria", "middle": "García Rosa de la Cruz", "family": "A. R.", "suffix": "Jr.", "initials": "M. G. R. C. A. R."} -{"name": "A. R., Sr. de la Cruz Maria García Rosa Jr.", "order": "FAMILY_FIRST", "title": "Sr.", "family": "A. R. de la Cruz Maria García Rosa", "suffix": "Jr.", "initials": "A. R. C. M. G. R."} +{"name": "A. R., Sr. Maria García Rosa de la Cruz Jr.", "title": "Sr.", "given": "Maria", "middle": "García Rosa de la Cruz", "family": "A. R.", "suffix": "Jr.", "initials": "M. G. R. C. A. R.", "generation": "Jr."} +{"name": "A. R., Sr. de la Cruz Maria García Rosa Jr.", "order": "FAMILY_FIRST", "title": "Sr.", "family": "A. R. de la Cruz Maria García Rosa", "suffix": "Jr.", "initials": "A. R. C. M. G. R.", "generation": "Jr."} {"name": "A.B. Vajpayee", "given": "A.B.", "family": "Vajpayee", "initials": "A. V."} {"name": "AHMAD IBN-ʿALĪ", "given": "AHMAD", "family": "IBN-ʿALĪ", "initials": "A. I.", "capitalized": "Ahmad ibn-ʿAlī"} {"name": "AKIME Fuseena", "order": "FAMILY_FIRST", "given": "Fuseena", "family": "AKIME", "initials": "F. A.", "capitalized_force": "Akime Fuseena"} @@ -121,7 +121,7 @@ {"name": "Akbar, Ahmad Albar bin", "order": "FAMILY_FIRST", "given": "Ahmad", "middle": "Albar", "family": "bin Akbar", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "A. A. A."} {"name": "Akintola Adeolu Adegboyega", "order": "FAMILY_FIRST", "given": "Adeolu", "middle": "Adegboyega", "family": "Akintola", "initials": "A. A. A."} {"name": "Akintola, Adeolu Adegboyega", "given": "Adeolu", "middle": "Adegboyega", "family": "Akintola", "initials": "A. A. A."} -{"name": "Al Arnold Gore, Jr.", "given": "Al", "middle": "Arnold", "family": "Gore", "suffix": "Jr.", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "A. A. G."} +{"name": "Al Arnold Gore, Jr.", "given": "Al", "middle": "Arnold", "family": "Gore", "suffix": "Jr.", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "A. A. G.", "generation": "Jr."} {"name": "Alan Ridout", "given": "Alan", "family": "Ridout", "initials": "A. R."} {"name": "Albert Bertomeu Font", "given": "Albert", "middle": "Bertomeu", "family": "Font", "initials": "A. B. F."} {"name": "Albert Bonet Marrugat", "given": "Albert", "middle": "Bonet", "family": "Marrugat", "initials": "A. B. M."} @@ -132,20 +132,20 @@ {"name": "Alberto Abello Vives", "given": "Alberto", "middle": "Abello", "family": "Vives", "initials": "A. A. V."} {"name": "Alberto García Ulecia", "given": "Alberto", "middle": "García", "family": "Ulecia", "initials": "A. G. U."} {"name": "Alberto Ortega Martín", "given": "Alberto", "middle": "Ortega", "family": "Martín", "initials": "A. O. M."} -{"name": "Albrecht IV.", "given": "Albrecht", "suffix": "IV.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "A."} +{"name": "Albrecht IV.", "given": "Albrecht", "suffix": "IV.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "A.", "generation": "IV."} {"name": "Albrecht von Alvensleben", "given": "Albrecht", "family": "von Alvensleben", "initials": "A. A."} {"name": "Aldephonse Alexandre Félix du Jardin", "given": "Aldephonse", "middle": "Alexandre Félix", "family": "du Jardin", "initials": "A. A. F. J."} {"name": "Alex Ben Johnson", "given": "Alex", "middle": "Ben", "family": "Johnson", "initials": "A. B. J."} {"name": "Alex van Johnson", "given": "Alex", "family": "van Johnson", "initials": "A. J."} {"name": "Alexander Parra Uribe", "given": "Alexander", "middle": "Parra", "family": "Uribe", "initials": "A. P. U."} -{"name": "Alexandre Dumas fils", "given": "Alexandre", "family": "Dumas", "suffix": "fils", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "A. D."} +{"name": "Alexandre Dumas fils", "given": "Alexandre", "family": "Dumas", "suffix": "fils", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "A. D.", "generation": "fils"} {"name": "Alexandru Ioan Popa", "given": "Alexandru", "middle": "Ioan", "family": "Popa", "initials": "A. I. P."} {"name": "Alexis", "given": "Alexis", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "A."} {"name": "Alfonso Reyes Echandía", "given": "Alfonso", "middle": "Reyes", "family": "Echandía", "initials": "A. R. E."} {"name": "Alfonsus Antonius de Sarasa", "given": "Alfonsus", "middle": "Antonius", "family": "de Sarasa", "initials": "A. A. S."} {"name": "Alfɔns MANƉELA Rolanɖ", "given": "Alfɔns", "middle": "MANƉELA", "family": "Rolanɖ", "initials": "A. M. R.", "capitalized_force": "Alfɔns Manɖela Rolanɖ"} {"name": "Ali Ahmad Vali oglu", "given": "Ali", "middle": "Ahmad Vali", "family": "oglu", "initials": "A. A. V. o.", "capitalized_force": "Ali Ahmad Vali Oglu"} -{"name": "Ali Ahmad Vali oglu Jr.", "given": "Ali", "middle": "Ahmad Vali", "family": "oglu", "suffix": "Jr.", "initials": "A. A. V. o.", "capitalized_force": "Ali Ahmad Vali Oglu Jr."} +{"name": "Ali Ahmad Vali oglu Jr.", "given": "Ali", "middle": "Ahmad Vali", "family": "oglu", "suffix": "Jr.", "initials": "A. A. V. o.", "capitalized_force": "Ali Ahmad Vali Oglu Jr.", "generation": "Jr."} {"name": "Ali Ahmad oglu", "given": "Ali", "middle": "Ahmad", "family": "oglu", "initials": "A. A. o.", "capitalized_force": "Ali Ahmad Oglu"} {"name": "Ali Amina", "order": "FAMILY_FIRST", "given": "Amina", "family": "Ali", "initials": "A. A."} {"name": "Ali Juma Hamisi", "given": "Ali", "middle": "Juma", "family": "Hamisi", "initials": "A. J. H."} @@ -164,10 +164,10 @@ {"name": "Alquen, Gunter d'", "given": "Gunter", "family": "d' Alquen", "initials": "G. A."} {"name": "Alvensleben, Albrecht von", "given": "Albrecht", "family": "von Alvensleben", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "A. A."} {"name": "Alves, Pedro Fils", "given": "Pedro", "middle": "Fils", "family": "Alves", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "P. F. A."} -{"name": "Alves, Pedro Neto", "given": "Pedro", "family": "Alves", "suffix": "Neto", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (declared)"], "initials": "P. A."} +{"name": "Alves, Pedro Neto", "given": "Pedro", "family": "Alves", "suffix": "Neto", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (declared)"], "initials": "P. A.", "generation": "Neto"} {"name": "Alzon, Emmanuel d'", "given": "Emmanuel", "family": "d' Alzon", "initials": "E. A."} {"name": "Amadi John Chinedu", "order": "FAMILY_FIRST", "given": "John", "middle": "Chinedu", "family": "Amadi", "initials": "J. C. A."} -{"name": "Amadi Maazị Christopher Chukwudike Jr, MP", "order": "FAMILY_FIRST", "given": "Maazị", "middle": "Christopher Chukwudike", "family": "Amadi", "suffix": "Jr, MP", "initials": "M. C. C. A."} +{"name": "Amadi Maazị Christopher Chukwudike Jr, MP", "order": "FAMILY_FIRST", "given": "Maazị", "middle": "Christopher Chukwudike", "family": "Amadi", "suffix": "Jr, MP", "initials": "M. C. C. A.", "generation": "Jr", "credentials": "MP"} {"name": "Amadi, Christopher Chukwudike", "given": "Christopher", "middle": "Chukwudike", "family": "Amadi", "initials": "C. C. A."} {"name": "Amadi, John Chinedu", "given": "John", "middle": "Chinedu", "family": "Amadi", "initials": "J. C. A."} {"name": "Amado Aguirre Santiago", "given": "Amado", "middle": "Aguirre", "family": "Santiago", "initials": "A. A. S."} @@ -221,7 +221,7 @@ {"name": "Andrew Perkins (Mgr.)", "title": "Mgr.", "given": "Andrew", "family": "Perkins", "initials": "A. P."} {"name": "Andrew Perkins (XYZ)", "given": "Andrew", "family": "Perkins", "nickname": "XYZ", "initials": "A. P.", "capitalized_force": "Andrew \"Xyz\" Perkins"} {"name": "Andrew Perkins «MBA»", "given": "Andrew", "family": "Perkins", "suffix": "MBA", "initials": "A. P."} -{"name": "Andrew Perkins, Jr., Col. (Ret)", "title": "Col.", "given": "Andrew", "family": "Perkins", "suffix": "Jr., Ret", "initials": "A. P."} +{"name": "Andrew Perkins, Jr., Col. (Ret)", "title": "Col.", "given": "Andrew", "family": "Perkins", "suffix": "Jr., Ret", "initials": "A. P.", "generation": "Jr.", "credentials": "Ret"} {"name": "Andrews, M.D.", "family": "Andrews", "suffix": "M.D.", "initials": "A."} {"name": "Andrés David Padilla Mejía", "given": "Andrés", "middle": "David Padilla", "family": "Mejía", "initials": "A. D. P. M."} {"name": "Ane Miren Urrestaratzu", "given": "Ane", "middle": "Miren", "family": "Urrestaratzu", "initials": "A. M. U."} @@ -267,8 +267,8 @@ {"name": "Antonio Moreno Casamitjana", "given": "Antonio", "middle": "Moreno", "family": "Casamitjana", "initials": "A. M. C."} {"name": "Antonio Parra Cabrera", "given": "Antonio", "middle": "Parra", "family": "Cabrera", "initials": "A. P. C."} {"name": "Antonio París Sanz de Santamaría", "given": "Antonio", "middle": "París Sanz", "family": "de Santamaría", "initials": "A. P. S. S."} -{"name": "Antonio Pavlović mlađi", "given": "Antonio", "family": "Pavlović", "suffix": "mlađi", "initials": "A. P.", "capitalized_force": "Antonio Pavlović Mlađi"} -{"name": "Antonio Pavlović mlađi Jones", "given": "Antonio", "family": "Pavlović", "suffix": "mlađi Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "A. P.", "capitalized_force": "Antonio Pavlović Mlađi Jones"} +{"name": "Antonio Pavlović mlađi", "given": "Antonio", "family": "Pavlović", "suffix": "mlađi", "initials": "A. P.", "capitalized_force": "Antonio Pavlović Mlađi", "generation": "mlađi"} +{"name": "Antonio Pavlović mlađi Jones", "given": "Antonio", "family": "Pavlović", "suffix": "mlađi Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "A. P.", "capitalized_force": "Antonio Pavlović Mlađi Jones", "generation": "mlađi", "credentials": "Jones"} {"name": "Antonio da Sangallo", "given": "Antonio", "family": "da Sangallo", "initials": "A. S."} {"name": "Antonio dos Santos Cabral", "given": "Antonio", "family": "dos Santos Cabral", "initials": "A. S. C."} {"name": "Antonio ‌Negri", "given": "Antonio", "family": "‌Negri", "initials": "A. ‌."} @@ -325,7 +325,7 @@ {"name": "Bahadur, Ram B.K.", "given": "Ram", "middle": "B.K.", "family": "Bahadur", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)"], "initials": "R. B. B."} {"name": "Bailey, Liberty Hyde", "given": "Liberty", "middle": "Hyde", "family": "Bailey", "initials": "L. H. B."} {"name": "Baker (Johnson), Jenny", "given": "Jenny", "family": "Baker", "nickname": "Johnson", "initials": "J. B."} -{"name": "Baker (Jr.), Jenny", "given": "Jenny", "family": "Baker", "suffix": "Jr.", "initials": "J. B."} +{"name": "Baker (Jr.), Jenny", "given": "Jenny", "family": "Baker", "suffix": "Jr.", "initials": "J. B.", "generation": "Jr."} {"name": "Bakker Irene", "order": "FAMILY_FIRST", "given": "Irene", "family": "Bakker", "initials": "I. B."} {"name": "Bakker, Irene", "given": "Irene", "family": "Bakker", "initials": "I. B."} {"name": "Balari i Jovany, Josep", "given": "Josep", "family": "Balari i Jovany", "initials": "J. B. J."} @@ -366,7 +366,7 @@ {"name": "Benjamin [Ben] Franklin", "given": "Benjamin", "middle": "[Ben]", "family": "Franklin", "initials": "B. [. F."} {"name": "Benjamín Castillo Plascencia", "given": "Benjamín", "middle": "Castillo", "family": "Plascencia", "initials": "B. C. P."} {"name": "Benno Hans Meyer", "given": "Benno", "middle": "Hans", "family": "Meyer", "initials": "B. H. M."} -{"name": "Berg Jan de Jr.", "given": "Berg", "middle": "Jan", "family": "de", "suffix": "Jr.", "initials": "B. J. d.", "capitalized_force": "Berg Jan De Jr."} +{"name": "Berg Jan de Jr.", "given": "Berg", "middle": "Jan", "family": "de", "suffix": "Jr.", "initials": "B. J. d.", "capitalized_force": "Berg Jan De Jr.", "generation": "Jr."} {"name": "Berg, Cornelia Margarita Sofia Aletta van den", "given": "Cornelia", "middle": "Margarita Sofia Aletta", "family": "van den Berg", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "C. M. S. A. B."} {"name": "Berg, Jan mc", "given": "Jan", "family": "mc Berg", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. B."} {"name": "Berg, Jan van der", "given": "Jan", "family": "van der Berg", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "J. B."} @@ -395,7 +395,7 @@ {"name": "Beyoncé Knowles", "given": "Beyoncé", "family": "Knowles", "initials": "B. K."} {"name": "Bharati Lalit", "order": "FAMILY_FIRST", "given": "Lalit", "family": "Bharati", "initials": "L. B."} {"name": "Bharati Lalit Mohan", "order": "FAMILY_FIRST", "given": "Lalit", "middle": "Mohan", "family": "Bharati", "initials": "L. M. B."} -{"name": "Bharati Shree Lalit Kumaar Jr, MP", "order": "FAMILY_FIRST", "given": "Shree", "middle": "Lalit Kumaar", "family": "Bharati", "suffix": "Jr, MP", "initials": "S. L. K. B."} +{"name": "Bharati Shree Lalit Kumaar Jr, MP", "order": "FAMILY_FIRST", "given": "Shree", "middle": "Lalit Kumaar", "family": "Bharati", "suffix": "Jr, MP", "initials": "S. L. K. B.", "generation": "Jr", "credentials": "MP"} {"name": "Bharati, Lalit", "given": "Lalit", "family": "Bharati", "initials": "L. B."} {"name": "Bharati, Lalit Kumaar", "given": "Lalit", "middle": "Kumaar", "family": "Bharati", "initials": "L. K. B."} {"name": "Bharati, Lalit Mohan", "given": "Lalit", "middle": "Mohan", "family": "Bharati", "initials": "L. M. B."} @@ -418,7 +418,7 @@ {"name": "Boluwatife", "given": "Boluwatife", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "B."} {"name": "Boluwatife", "order": "FAMILY_FIRST", "family": "Boluwatife", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "B."} {"name": "Bonafini, Hebe de", "given": "Hebe", "family": "de Bonafini", "initials": "H. B."} -{"name": "Bonifatius VIII.", "given": "Bonifatius", "suffix": "VIII.", "ambiguities": ["GIVEN_OR_FAMILY", "SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)", "GIVEN_OR_FAMILY: name as family (position)"], "initials": "B."} +{"name": "Bonifatius VIII.", "given": "Bonifatius", "suffix": "VIII.", "ambiguities": ["GIVEN_OR_FAMILY", "SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)", "GIVEN_OR_FAMILY: name as family (position)"], "initials": "B.", "generation": "VIII."} {"name": "Bonneville, Benjamin Louis Eulalie de", "given": "Benjamin", "middle": "Louis Eulalie", "family": "de Bonneville", "initials": "B. L. E. B."} {"name": "Bonvi", "given": "Bonvi", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "B."} {"name": "Borcke, Karl August Ferdinand von", "given": "Karl", "middle": "August Ferdinand", "family": "von Borcke", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "K. A. F. B."} @@ -438,7 +438,7 @@ {"name": "Bruhl, Ada Cornelia Cesar Martín von", "given": "Ada", "middle": "Cornelia Cesar Martín", "family": "von Bruhl", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "A. C. C. M. B."} {"name": "Brukalska, Barbara", "given": "Barbara", "family": "Brukalska", "initials": "B. B."} {"name": "Brundridge, Contessa A", "given": "Contessa", "middle": "A", "family": "Brundridge", "initials": "C. A. B."} -{"name": "Bruno III.", "given": "Bruno", "suffix": "III.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "B."} +{"name": "Bruno III.", "given": "Bruno", "suffix": "III.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "B.", "generation": "III."} {"name": "Brynjólfur Bjarnason", "given": "Brynjólfur", "family": "Bjarnason", "initials": "B. B."} {"name": "Brühl, Ada Cornelia César Martín von", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "A. C. C. M. B."} {"name": "Brühl, Ada Cornelia César Martín von (Prof. Dr., M.D. DDS.)", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "suffix": "M.D. DDS.", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "A. C. C. M. B."} @@ -498,10 +498,10 @@ {"name": "Carlos Zabala", "given": "Carlos", "family": "Zabala", "initials": "C. Z."} {"name": "Carmen Díaz Vda. de Mora", "given": "Carmen", "middle": "Díaz Vda.", "family": "de Mora", "initials": "C. D. V. M."} {"name": "Carnarvon, George Edward Stanhope Molyneux Herbert of", "given": "George", "middle": "Edward Stanhope Molyneux Herbert of", "family": "Carnarvon", "initials": "G. E. S. M. H. C."} -{"name": "Carod i", "given": "Carod", "suffix": "i", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "C.", "capitalized_force": "Carod I"} +{"name": "Carod i", "given": "Carod", "suffix": "i", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "C.", "capitalized_force": "Carod I", "generation": "i"} {"name": "Carod i Rovira", "given": "Carod", "middle": "i", "family": "Rovira", "initials": "C. i. R."} {"name": "Carod i Rovira, Josep", "given": "Josep", "family": "Carod i Rovira", "initials": "J. C. R."} -{"name": "Carod y de Rovira i", "given": "Carod", "middle": "y", "family": "de Rovira", "suffix": "i", "initials": "C. y. R.", "capitalized_force": "Carod y de Rovira I"} +{"name": "Carod y de Rovira i", "given": "Carod", "middle": "y", "family": "de Rovira", "suffix": "i", "initials": "C. y. R.", "capitalized_force": "Carod y de Rovira I", "generation": "i"} {"name": "Carolina", "given": "Carolina", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "C."} {"name": "Carolina", "order": "FAMILY_FIRST", "family": "Carolina", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "C."} {"name": "Carpentier, Pieter de", "given": "Pieter", "family": "de Carpentier", "initials": "P. C."} @@ -519,7 +519,7 @@ {"name": "Cetto, August von", "given": "August", "family": "von Cetto", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "A. C."} {"name": "Chancellor Jane Smith", "given": "Chancellor", "middle": "Jane", "family": "Smith", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "C. J. S."} {"name": "Chancellor Smith", "given": "Chancellor", "family": "Smith", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "C. S."} -{"name": "Chang, Andy C I", "given": "Andy", "middle": "C", "family": "Chang", "suffix": "I", "initials": "A. C. C."} +{"name": "Chang, Andy C I", "given": "Andy", "middle": "C", "family": "Chang", "suffix": "I", "initials": "A. C. C.", "generation": "I"} {"name": "Charles Claude de La Billarderie d'Angiviller", "given": "Charles", "middle": "Claude", "family": "de La Billarderie d'Angiviller", "initials": "C. C. B. d.", "capitalized_force": "Charles Claude de la Billarderie D'Angiviller"} {"name": "Charles Wilkins", "given": "Charles", "family": "Wilkins", "initials": "C. W."} {"name": "Charles van der van der Berg", "given": "Charles", "family": "van der van der Berg", "initials": "C. B."} @@ -535,7 +535,7 @@ {"name": "Chief Justice John Roberts", "title": "Chief Justice", "given": "John", "family": "Roberts", "initials": "J. R."} {"name": "Chief Keef", "title": "Chief", "family": "Keef", "initials": "K."} {"name": "Chikamatsu, Monzaemon", "given": "Monzaemon", "family": "Chikamatsu", "initials": "M. C."} -{"name": "Christian Ulrich II.", "given": "Christian", "family": "Ulrich", "suffix": "II.", "initials": "C. U."} +{"name": "Christian Ulrich II.", "given": "Christian", "family": "Ulrich", "suffix": "II.", "initials": "C. U.", "generation": "II."} {"name": "Christopher Hans Jacobsen", "given": "Christopher", "middle": "Hans", "family": "Jacobsen", "initials": "C. H. J."} {"name": "Ciro di Pèrs", "given": "Ciro", "family": "di Pèrs", "initials": "C. P."} {"name": "Clara Brugada Molina", "given": "Clara", "middle": "Brugada", "family": "Molina", "initials": "C. B. M."} @@ -651,23 +651,23 @@ {"name": "Dionisio Guillin Mercado", "given": "Dionisio", "middle": "Guillin", "family": "Mercado", "initials": "D. G. M."} {"name": "Diponegoro", "given": "Diponegoro", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "D."} {"name": "Djuanda", "given": "Djuanda", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "D."} -{"name": "Dl Dr. Daniel Ionescu Dragoș Ioan Ardelean Jr.", "given": "Dl", "middle": "Dr. Daniel Ionescu Dragoș Ioan", "family": "Ardelean", "suffix": "Jr.", "initials": "D. D. D. I. D. I. A."} +{"name": "Dl Dr. Daniel Ionescu Dragoș Ioan Ardelean Jr.", "given": "Dl", "middle": "Dr. Daniel Ionescu Dragoș Ioan", "family": "Ardelean", "suffix": "Jr.", "initials": "D. D. D. I. D. I. A.", "generation": "Jr."} {"name": "Do Quang Minh", "given": "Do", "middle": "Quang", "family": "Minh", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "D. Q. M."} {"name": "Doctor, Jane E.", "given": "Jane", "middle": "E.", "family": "Doctor", "initials": "J. E. D."} {"name": "Doe Jane Mrs", "given": "Doe", "middle": "Jane", "family": "Mrs", "initials": "D. J. M."} -{"name": "Doe nee Smith Jr. Prof., Jane", "given": "Jane", "family": "Doe Prof.", "suffix": "Jr.", "maiden": "Smith", "initials": "J. D. P."} +{"name": "Doe nee Smith Jr. Prof., Jane", "given": "Jane", "family": "Doe Prof.", "suffix": "Jr.", "maiden": "Smith", "initials": "J. D. P.", "generation": "Jr."} {"name": "Doe nee Smith, Jane", "given": "Jane", "family": "Doe", "maiden": "Smith", "initials": "J. D."} {"name": "Doe, Dr. John", "title": "Dr.", "given": "John", "family": "Doe", "initials": "J. D."} {"name": "Doe, Dr. John A.", "title": "Dr.", "given": "John", "middle": "A.", "family": "Doe", "initials": "J. A. D."} -{"name": "Doe, Dr. John A. III", "title": "Dr.", "given": "John", "middle": "A.", "family": "Doe", "suffix": "III", "initials": "J. A. D."} -{"name": "Doe, Dr. John A. Jr.", "title": "Dr.", "given": "John", "middle": "A.", "family": "Doe", "suffix": "Jr.", "initials": "J. A. D."} +{"name": "Doe, Dr. John A. III", "title": "Dr.", "given": "John", "middle": "A.", "family": "Doe", "suffix": "III", "initials": "J. A. D.", "generation": "III"} +{"name": "Doe, Dr. John A. Jr.", "title": "Dr.", "given": "John", "middle": "A.", "family": "Doe", "suffix": "Jr.", "initials": "J. A. D.", "generation": "Jr."} {"name": "Doe, Dr. John A. Kenneth", "title": "Dr.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "initials": "J. A. K. D."} -{"name": "Doe, Dr. John A. Kenneth III", "title": "Dr.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "III", "initials": "J. A. K. D."} -{"name": "Doe, Dr. John A. Kenneth Jr.", "title": "Dr.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "Jr.", "initials": "J. A. K. D."} -{"name": "Doe, Dr. John III", "title": "Dr.", "given": "John", "family": "Doe", "suffix": "III", "initials": "J. D."} +{"name": "Doe, Dr. John A. Kenneth III", "title": "Dr.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "III", "initials": "J. A. K. D.", "generation": "III"} +{"name": "Doe, Dr. John A. Kenneth Jr.", "title": "Dr.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "Jr.", "initials": "J. A. K. D.", "generation": "Jr."} +{"name": "Doe, Dr. John III", "title": "Dr.", "given": "John", "family": "Doe", "suffix": "III", "initials": "J. D.", "generation": "III"} {"name": "Doe, Dr. John MA", "title": "Dr.", "given": "John", "family": "Doe", "suffix": "MA", "initials": "J. D."} {"name": "Doe, Dr. John P., CLU, CFP, LUTC", "title": "Dr.", "given": "John", "middle": "P.", "family": "Doe", "suffix": "CLU, CFP, LUTC", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. P. D.", "capitalized_force": "Dr. John P. Doe CLU, CFP, Lutc"} -{"name": "Doe, Dr. John, Jr.", "title": "Dr.", "given": "John", "family": "Doe", "suffix": "Jr.", "initials": "J. D."} +{"name": "Doe, Dr. John, Jr.", "title": "Dr.", "given": "John", "family": "Doe", "suffix": "Jr.", "initials": "J. D.", "generation": "Jr."} {"name": "Doe, Dr. MA", "title": "Dr.", "family": "Doe", "suffix": "MA", "initials": "D."} {"name": "Doe, Dr. MA Smith", "title": "Dr.", "given": "MA", "middle": "Smith", "family": "Doe", "initials": "M. S. D.", "capitalized_force": "Dr. Ma Smith Doe"} {"name": "Doe, Dr. nee Smith MA", "title": "Dr.", "given": "nee", "middle": "Smith", "family": "Doe", "suffix": "MA", "initials": "n. S. D.", "capitalized_force": "Dr. Nee Smith Doe MA"} @@ -697,26 +697,26 @@ {"name": "Doe, Jane nee Smith ma", "given": "Jane", "middle": "nee Smith", "family": "Doe", "suffix": "ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (declared)"], "initials": "J. n. S. D.", "capitalized_force": "Jane Nee Smith Doe MA"} {"name": "Doe, Jane nee Smith ma do", "given": "Jane", "middle": "nee Smith ma", "family": "do Doe", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "J. n. S. m. D.", "capitalized_force": "Jane Nee Smith Ma do Doe"} {"name": "Doe, Jane van Mrs", "title": "Mrs", "given": "Jane", "family": "van Doe", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "J. D."} -{"name": "Doe, Jane, and Jr.", "given": "Jane", "family": "Doe", "suffix": "and Jr.", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. D."} +{"name": "Doe, Jane, and Jr.", "given": "Jane", "family": "Doe", "suffix": "and Jr.", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. D.", "generation": "Jr.", "credentials": "and"} {"name": "Doe, John", "given": "John", "family": "Doe", "initials": "J. D."} {"name": "Doe, John A.", "given": "John", "middle": "A.", "family": "Doe", "initials": "J. A. D."} -{"name": "Doe, John A. III", "given": "John", "middle": "A.", "family": "Doe", "suffix": "III", "initials": "J. A. D."} +{"name": "Doe, John A. III", "given": "John", "middle": "A.", "family": "Doe", "suffix": "III", "initials": "J. A. D.", "generation": "III"} {"name": "Doe, John A. Kenneth", "given": "John", "middle": "A. Kenneth", "family": "Doe", "initials": "J. A. K. D."} -{"name": "Doe, John A. Kenneth III", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "III", "initials": "J. A. K. D."} -{"name": "Doe, John A. Kenneth, Jr.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "Jr.", "initials": "J. A. K. D."} -{"name": "Doe, John A., III", "given": "John", "middle": "A.", "family": "Doe", "suffix": "III", "initials": "J. A. D."} -{"name": "Doe, John A., Jr.", "given": "John", "middle": "A.", "family": "Doe", "suffix": "Jr.", "initials": "J. A. D."} +{"name": "Doe, John A. Kenneth III", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "III", "initials": "J. A. K. D.", "generation": "III"} +{"name": "Doe, John A. Kenneth, Jr.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "Jr.", "initials": "J. A. K. D.", "generation": "Jr."} +{"name": "Doe, John A., III", "given": "John", "middle": "A.", "family": "Doe", "suffix": "III", "initials": "J. A. D.", "generation": "III"} +{"name": "Doe, John A., Jr.", "given": "John", "middle": "A.", "family": "Doe", "suffix": "Jr.", "initials": "J. A. D.", "generation": "Jr."} {"name": "Doe, John BA", "given": "John", "family": "Doe", "suffix": "BA", "initials": "J. D."} {"name": "Doe, John DO", "given": "John", "family": "Doe", "suffix": "DO", "initials": "J. D."} {"name": "Doe, John DO Ed", "given": "John", "middle": "DO Ed", "family": "Doe", "initials": "J. E. D.", "capitalized_force": "John do Ed Doe"} {"name": "Doe, John Do", "given": "John", "family": "Do Doe", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "J. D.", "capitalized_force": "John do Doe"} {"name": "Doe, John Ed", "given": "John", "middle": "Ed", "family": "Doe", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. E. D."} {"name": "Doe, John Goodman", "given": "John", "middle": "Goodman", "family": "Doe", "initials": "J. G. D."} -{"name": "Doe, John III", "given": "John", "family": "Doe", "suffix": "III", "initials": "J. D."} -{"name": "Doe, John Jr Mr", "title": "Mr", "given": "John", "family": "Doe", "suffix": "Jr", "initials": "J. D."} +{"name": "Doe, John III", "given": "John", "family": "Doe", "suffix": "III", "initials": "J. D.", "generation": "III"} +{"name": "Doe, John Jr Mr", "title": "Mr", "given": "John", "family": "Doe", "suffix": "Jr", "initials": "J. D.", "generation": "Jr"} {"name": "Doe, John MA", "given": "John", "family": "Doe", "suffix": "MA", "initials": "J. D."} {"name": "Doe, John MA JD", "given": "John", "family": "Doe", "suffix": "MA JD", "initials": "J. D."} -{"name": "Doe, John MA Jr", "given": "John", "family": "Doe", "suffix": "MA Jr", "initials": "J. D."} +{"name": "Doe, John MA Jr", "given": "John", "family": "Doe", "suffix": "MA Jr", "initials": "J. D.", "generation": "Jr", "credentials": "MA"} {"name": "Doe, John MA Ma", "given": "John", "family": "Doe", "suffix": "MA Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (declared)"], "initials": "J. D.", "capitalized_force": "John Doe MA MA"} {"name": "Doe, John MA PhD", "given": "John", "family": "Doe", "suffix": "MA PhD", "initials": "J. D."} {"name": "Doe, John MA Smith", "given": "John", "family": "Doe", "suffix": "MA Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (position)"], "initials": "J. D."} @@ -725,25 +725,25 @@ {"name": "Doe, John Ma", "given": "John", "middle": "Ma", "family": "Doe", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. M. D."} {"name": "Doe, John Ma Smith", "given": "John", "middle": "Ma Smith", "family": "Doe", "initials": "J. M. S. D."} {"name": "Doe, John Master", "given": "John", "middle": "Master", "family": "Doe", "initials": "J. M. D."} -{"name": "Doe, John Mr Jr", "title": "Mr", "given": "John", "family": "Doe", "suffix": "Jr", "initials": "J. D."} +{"name": "Doe, John Mr Jr", "title": "Mr", "given": "John", "family": "Doe", "suffix": "Jr", "initials": "J. D.", "generation": "Jr"} {"name": "Doe, John Msc.Ed.", "given": "John", "family": "Doe", "suffix": "Msc.Ed.", "initials": "J. D."} {"name": "Doe, John PhD MA", "given": "John", "family": "Doe", "suffix": "PhD MA", "initials": "J. D."} {"name": "Doe, John Pope", "given": "John", "middle": "Pope", "family": "Doe", "initials": "J. P. D."} {"name": "Doe, John Q. MA", "given": "John", "middle": "Q.", "family": "Doe", "suffix": "MA", "initials": "J. Q. D."} {"name": "Doe, John X.Y.Z.", "given": "John", "family": "Doe", "suffix": "X.Y.Z.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (position)"], "initials": "J. D."} -{"name": "Doe, John jr., MD", "given": "John", "family": "Doe", "suffix": "jr., MD", "initials": "J. D.", "capitalized_force": "John Doe Jr., MD"} +{"name": "Doe, John jr., MD", "given": "John", "family": "Doe", "suffix": "jr., MD", "initials": "J. D.", "capitalized_force": "John Doe Jr., MD", "generation": "jr.", "credentials": "MD"} {"name": "Doe, John ma Ma", "given": "John", "middle": "ma Ma", "family": "Doe", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. m. M. D.", "capitalized_force": "John Ma Ma Doe"} {"name": "Doe, John ma do", "given": "John", "middle": "ma", "family": "do Doe", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "J. m. D.", "capitalized_force": "John Ma do Doe"} {"name": "Doe, John van DO", "given": "John", "family": "van DO Doe", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "J. D.", "capitalized_force": "John van do Doe"} {"name": "Doe, John van Ma", "given": "John", "middle": "van Ma", "family": "Doe", "initials": "J. M. D."} -{"name": "Doe, John, Jr.", "given": "John", "family": "Doe", "suffix": "Jr.", "initials": "J. D."} +{"name": "Doe, John, Jr.", "given": "John", "family": "Doe", "suffix": "Jr.", "initials": "J. D.", "generation": "Jr."} {"name": "Doe, John, MD PhD - FACS Fellow", "given": "John", "family": "Doe", "suffix": "MD PhD, FACS Fellow", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. D."} -{"name": "Doe, John,, Jr.", "given": "John", "family": "Doe", "suffix": "Jr.", "initials": "J. D."} -{"name": "Doe, John,, Jr.,, III", "given": "John", "family": "Doe", "suffix": "Jr., III", "initials": "J. D."} +{"name": "Doe, John,, Jr.", "given": "John", "family": "Doe", "suffix": "Jr.", "initials": "J. D.", "generation": "Jr."} +{"name": "Doe, John,, Jr.,, III", "given": "John", "family": "Doe", "suffix": "Jr., III", "initials": "J. D.", "generation": "Jr., III"} {"name": "Doe, John. A. Kenneth", "title": "John.", "given": "A.", "middle": "Kenneth", "family": "Doe", "initials": "A. K. D."} -{"name": "Doe, John. A. Kenneth III", "title": "John.", "given": "A.", "middle": "Kenneth", "family": "Doe", "suffix": "III", "initials": "A. K. D."} -{"name": "Doe, John. A. Kenneth, Jr.", "title": "John.", "given": "A.", "middle": "Kenneth", "family": "Doe", "suffix": "Jr.", "initials": "A. K. D."} -{"name": "Doe, Lt. Gen. John A. Kenneth IV", "title": "Lt. Gen.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "IV", "initials": "J. A. K. D."} +{"name": "Doe, John. A. Kenneth III", "title": "John.", "given": "A.", "middle": "Kenneth", "family": "Doe", "suffix": "III", "initials": "A. K. D.", "generation": "III"} +{"name": "Doe, John. A. Kenneth, Jr.", "title": "John.", "given": "A.", "middle": "Kenneth", "family": "Doe", "suffix": "Jr.", "initials": "A. K. D.", "generation": "Jr."} +{"name": "Doe, Lt. Gen. John A. Kenneth IV", "title": "Lt. Gen.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "IV", "initials": "J. A. K. D.", "generation": "IV"} {"name": "Doe, Lt.Gov. John", "title": "Lt.Gov.", "given": "John", "family": "Doe", "initials": "J. D."} {"name": "Doe, MA", "family": "Doe", "suffix": "MA", "initials": "D."} {"name": "Doe, MA PhD", "family": "Doe", "suffix": "MA PhD", "initials": "D."} @@ -754,14 +754,14 @@ {"name": "Doe, Mr. MA PhD", "title": "Mr.", "family": "Doe", "suffix": "MA PhD", "initials": "D."} {"name": "Doe, Mrs", "title": "Mrs", "family": "Doe", "initials": "D."} {"name": "Doe, PhD Jones", "family": "Doe", "suffix": "PhD Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "D."} -{"name": "Doe, Rev. John A. Jr.", "title": "Rev.", "given": "John", "middle": "A.", "family": "Doe", "suffix": "Jr.", "initials": "J. A. D."} -{"name": "Doe, Rev. John A., V, Jr.", "title": "Rev.", "given": "John", "middle": "A.", "family": "Doe", "suffix": "V, Jr.", "initials": "J. A. D."} -{"name": "Doe, Rev. John V, Jr.", "title": "Rev.", "given": "John", "middle": "V", "family": "Doe", "suffix": "Jr.", "initials": "J. V. D."} +{"name": "Doe, Rev. John A. Jr.", "title": "Rev.", "given": "John", "middle": "A.", "family": "Doe", "suffix": "Jr.", "initials": "J. A. D.", "generation": "Jr."} +{"name": "Doe, Rev. John A., V, Jr.", "title": "Rev.", "given": "John", "middle": "A.", "family": "Doe", "suffix": "V, Jr.", "initials": "J. A. D.", "generation": "V, Jr."} +{"name": "Doe, Rev. John V, Jr.", "title": "Rev.", "given": "John", "middle": "V", "family": "Doe", "suffix": "Jr.", "initials": "J. V. D.", "generation": "Jr."} {"name": "Doe, abdul Mrs", "title": "Mrs", "given": "abdul", "family": "Doe", "initials": "a. D.", "capitalized_force": "Mrs Abdul Doe"} -{"name": "Doe,, Jr.", "family": "Doe", "suffix": "Jr.", "initials": "D."} +{"name": "Doe,, Jr.", "family": "Doe", "suffix": "Jr.", "initials": "D.", "generation": "Jr."} {"name": "Doe-Ray, Dr. John P., CLU, CFP, LUTC", "title": "Dr.", "given": "John", "middle": "P.", "family": "Doe-Ray", "suffix": "CLU, CFP, LUTC", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. P. D.", "capitalized_force": "Dr. John P. Doe-Ray CLU, CFP, Lutc"} -{"name": "Doe-Ray, Hon. Barrington P. Jr.", "title": "Hon.", "given": "Barrington", "middle": "P.", "family": "Doe-Ray", "suffix": "Jr.", "initials": "B. P. D."} -{"name": "Doe-Ray, Hon. Barrington P. Jr., CFP, LUTC", "title": "Hon.", "given": "Barrington", "middle": "P.", "family": "Doe-Ray", "suffix": "Jr., CFP, LUTC", "ambiguities": ["COMMA_STRUCTURE"], "initials": "B. P. D.", "capitalized_force": "Hon. Barrington P. Doe-Ray Jr., CFP, Lutc"} +{"name": "Doe-Ray, Hon. Barrington P. Jr.", "title": "Hon.", "given": "Barrington", "middle": "P.", "family": "Doe-Ray", "suffix": "Jr.", "initials": "B. P. D.", "generation": "Jr."} +{"name": "Doe-Ray, Hon. Barrington P. Jr., CFP, LUTC", "title": "Hon.", "given": "Barrington", "middle": "P.", "family": "Doe-Ray", "suffix": "Jr., CFP, LUTC", "ambiguities": ["COMMA_STRUCTURE"], "initials": "B. P. D.", "capitalized_force": "Hon. Barrington P. Doe-Ray Jr., CFP, Lutc", "generation": "Jr.", "credentials": "CFP, LUTC"} {"name": "Domingo Santa María González", "given": "Domingo", "family": "Santa María González", "initials": "D. M. G.", "capitalized_force": "Domingo santa María González"} {"name": "Domingo de Iriarte", "given": "Domingo", "family": "de Iriarte", "initials": "D. I."} {"name": "Domènech Estapà, Josep", "given": "Josep", "family": "Domènech Estapà", "initials": "J. D. E."} @@ -771,73 +771,73 @@ {"name": "Donna Jean Godchaux", "given": "Donna", "middle": "Jean", "family": "Godchaux", "initials": "D. J. G."} {"name": "Donovan McNabb-Smith", "given": "Donovan", "family": "McNabb-Smith", "initials": "D. M."} {"name": "Dr John Smith", "title": "Dr", "given": "John", "family": "Smith", "initials": "J. S."} -{"name": "Dr Jr", "given": "Dr", "suffix": "Jr", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "D."} -{"name": "Dr King Jr", "title": "Dr", "family": "King", "suffix": "Jr", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "K."} -{"name": "Dr Martin Luther King, Jr.", "title": "Dr", "given": "Martin", "middle": "Luther", "family": "King", "suffix": "Jr.", "initials": "M. L. K."} -{"name": "Dr Pope Jr", "title": "Dr", "family": "Pope", "suffix": "Jr", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "P."} +{"name": "Dr Jr", "given": "Dr", "suffix": "Jr", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "D.", "generation": "Jr"} +{"name": "Dr King Jr", "title": "Dr", "family": "King", "suffix": "Jr", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "K.", "generation": "Jr"} +{"name": "Dr Martin Luther King, Jr.", "title": "Dr", "given": "Martin", "middle": "Luther", "family": "King", "suffix": "Jr.", "initials": "M. L. K.", "generation": "Jr."} +{"name": "Dr Pope Jr", "title": "Dr", "family": "Pope", "suffix": "Jr", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "P.", "generation": "Jr"} {"name": "Dr Smith V", "title": "Dr", "given": "Smith", "family": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "S. V."} -{"name": "Dr 田中さん, V.", "title": "Dr", "family": "田中", "suffix": "さん, V."} -{"name": "Dr 김민준, Jr.", "title": "Dr", "given": "민준", "family": "김", "suffix": "Jr."} +{"name": "Dr 田中さん, V.", "title": "Dr", "family": "田中", "suffix": "さん, V.", "generation": "V.", "credentials": "さん"} +{"name": "Dr 김민준, Jr.", "title": "Dr", "given": "민준", "family": "김", "suffix": "Jr.", "generation": "Jr."} {"name": "Dr 김민준, MA", "title": "Dr", "given": "민준", "family": "김", "suffix": "MA"} -{"name": "Dr 김민준씨, Jr.", "title": "Dr", "given": "민준", "family": "김", "suffix": "씨, Jr."} -{"name": "Dr 김민준씨, V.", "title": "Dr", "given": "민준", "family": "김", "suffix": "씨, V."} +{"name": "Dr 김민준씨, Jr.", "title": "Dr", "given": "민준", "family": "김", "suffix": "씨, Jr.", "generation": "Jr.", "credentials": "씨"} +{"name": "Dr 김민준씨, V.", "title": "Dr", "given": "민준", "family": "김", "suffix": "씨, V.", "generation": "V.", "credentials": "씨"} {"name": "Dr.", "title": "Dr."} {"name": "Dr. (MA)", "title": "Dr.", "nickname": "MA", "ambiguities": ["SUFFIX_OR_NICKNAME"], "alternatives": ["SUFFIX_OR_NICKNAME: credential as suffix (vocabulary)"], "capitalized_force": "Dr. \"Ma\""} {"name": "Dr. Abdul Salam Hassan, MD", "title": "Dr.", "given": "Abdul Salam", "family": "Hassan", "suffix": "MD", "initials": "A. S. H."} {"name": "Dr. Ana García López", "title": "Dr.", "given": "Ana", "middle": "García", "family": "López", "initials": "A. G. L."} -{"name": "Dr. Ardelean Dl Daniel Ionescu Dragoș Ioan Jr.", "order": "FAMILY_FIRST", "title": "Dr.", "given": "Dl", "middle": "Daniel Ionescu Dragoș Ioan", "family": "Ardelean", "suffix": "Jr.", "initials": "D. D. I. D. I. A."} +{"name": "Dr. Ardelean Dl Daniel Ionescu Dragoș Ioan Jr.", "order": "FAMILY_FIRST", "title": "Dr.", "given": "Dl", "middle": "Daniel Ionescu Dragoș Ioan", "family": "Ardelean", "suffix": "Jr.", "initials": "D. D. I. D. I. A.", "generation": "Jr."} {"name": "Dr. Do Van Johnson, MD", "title": "Dr.", "given": "Do", "family": "Van Johnson", "suffix": "MD", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "D. J.", "capitalized_force": "Dr. Do van Johnson, MD"} {"name": "Dr. Freiherr von Berg, Ed", "title": "Dr.", "given": "Ed", "family": "Freiherr von Berg", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "E. B.", "capitalized_force": "Dr. Ed freiherr von Berg"} {"name": "Dr. Jason", "title": "Dr.", "family": "Jason", "initials": "J."} {"name": "Dr. Jason Ross Jay", "title": "Dr.", "given": "Jason", "middle": "Ross", "family": "Jay", "initials": "J. R. J."} {"name": "Dr. John A. Doe", "title": "Dr.", "given": "John", "middle": "A.", "family": "Doe", "initials": "J. A. D."} -{"name": "Dr. John A. Doe III", "title": "Dr.", "given": "John", "middle": "A.", "family": "Doe", "suffix": "III", "initials": "J. A. D."} -{"name": "Dr. John A. Doe, Jr.", "title": "Dr.", "given": "John", "middle": "A.", "family": "Doe", "suffix": "Jr.", "initials": "J. A. D."} +{"name": "Dr. John A. Doe III", "title": "Dr.", "given": "John", "middle": "A.", "family": "Doe", "suffix": "III", "initials": "J. A. D.", "generation": "III"} +{"name": "Dr. John A. Doe, Jr.", "title": "Dr.", "given": "John", "middle": "A.", "family": "Doe", "suffix": "Jr.", "initials": "J. A. D.", "generation": "Jr."} {"name": "Dr. John A. Kenneth Doe", "title": "Dr.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "initials": "J. A. K. D."} -{"name": "Dr. John A. Kenneth Doe III", "title": "Dr.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "III", "initials": "J. A. K. D."} -{"name": "Dr. John A. Kenneth Doe, Jr.", "title": "Dr.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "Jr.", "initials": "J. A. K. D."} +{"name": "Dr. John A. Kenneth Doe III", "title": "Dr.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "III", "initials": "J. A. K. D.", "generation": "III"} +{"name": "Dr. John A. Kenneth Doe, Jr.", "title": "Dr.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "Jr.", "initials": "J. A. K. D.", "generation": "Jr."} {"name": "Dr. John Doe", "title": "Dr.", "given": "John", "family": "Doe", "initials": "J. D."} -{"name": "Dr. John Doe III", "title": "Dr.", "given": "John", "family": "Doe", "suffix": "III", "initials": "J. D."} -{"name": "Dr. John Doe, Jr.", "title": "Dr.", "given": "John", "family": "Doe", "suffix": "Jr.", "initials": "J. D."} +{"name": "Dr. John Doe III", "title": "Dr.", "given": "John", "family": "Doe", "suffix": "III", "initials": "J. D.", "generation": "III"} +{"name": "Dr. John Doe, Jr.", "title": "Dr.", "given": "John", "family": "Doe", "suffix": "Jr.", "initials": "J. D.", "generation": "Jr."} {"name": "Dr. John P. Doe-Ray, CLU", "title": "Dr.", "given": "John", "middle": "P.", "family": "Doe-Ray", "suffix": "CLU", "initials": "J. P. D."} {"name": "Dr. John P. Doe-Ray, CLU, CFP, LUTC", "title": "Dr.", "given": "John", "middle": "P.", "family": "Doe-Ray", "suffix": "CLU, CFP, LUTC", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. P. D.", "capitalized_force": "Dr. John P. Doe-Ray, CLU, CFP, Lutc"} {"name": "Dr. John Smith", "title": "Dr.", "given": "John", "family": "Smith", "initials": "J. S."} {"name": "Dr. John Smith Prof.", "title": "Dr. Prof.", "given": "John", "family": "Smith", "initials": "J. S."} {"name": "Dr. John van der Berg", "title": "Dr.", "given": "John", "family": "van der Berg", "initials": "J. B."} {"name": "Dr. Jr née Jones", "title": "Dr.", "given": "Jr", "middle": "née", "family": "Jones", "initials": "J. n. J.", "capitalized_force": "Dr. Jr Née Jones"} -{"name": "Dr. Jr., John", "given": "John", "family": "Dr.", "suffix": "Jr.", "initials": "J. D."} +{"name": "Dr. Jr., John", "given": "John", "family": "Dr.", "suffix": "Jr.", "initials": "J. D.", "generation": "Jr."} {"name": "Dr. Juan Q. Velasquez y Garcia", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "initials": "J. Q. V. G."} -{"name": "Dr. Juan Q. Velasquez y Garcia III", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. Q. V. G."} -{"name": "Dr. Juan Q. Velasquez y Garcia, Jr.", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. Q. V. G."} +{"name": "Dr. Juan Q. Velasquez y Garcia III", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. Q. V. G.", "generation": "III"} +{"name": "Dr. Juan Q. Velasquez y Garcia, Jr.", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. Q. V. G.", "generation": "Jr."} {"name": "Dr. Juan Q. Xavier Velasquez y Garcia", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "initials": "J. Q. X. V. G."} -{"name": "Dr. Juan Q. Xavier Velasquez y Garcia III", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. Q. X. V. G."} -{"name": "Dr. Juan Q. Xavier Velasquez y Garcia, Jr.", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. Q. X. V. G."} +{"name": "Dr. Juan Q. Xavier Velasquez y Garcia III", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. Q. X. V. G.", "generation": "III"} +{"name": "Dr. Juan Q. Xavier Velasquez y Garcia, Jr.", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. Q. X. V. G.", "generation": "Jr."} {"name": "Dr. Juan Q. Xavier de la Vega", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "initials": "J. Q. X. V."} -{"name": "Dr. Juan Q. Xavier de la Vega III", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "suffix": "III", "initials": "J. Q. X. V."} -{"name": "Dr. Juan Q. Xavier de la Vega, Jr.", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "suffix": "Jr.", "initials": "J. Q. X. V."} -{"name": "Dr. Juan Q. Xavier de la dos Vega III", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la dos Vega", "suffix": "III", "initials": "J. Q. X. V."} -{"name": "Dr. Juan Q. Xavier de la dos Vega, III", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la dos Vega", "suffix": "III", "initials": "J. Q. X. V."} +{"name": "Dr. Juan Q. Xavier de la Vega III", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "suffix": "III", "initials": "J. Q. X. V.", "generation": "III"} +{"name": "Dr. Juan Q. Xavier de la Vega, Jr.", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "suffix": "Jr.", "initials": "J. Q. X. V.", "generation": "Jr."} +{"name": "Dr. Juan Q. Xavier de la dos Vega III", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la dos Vega", "suffix": "III", "initials": "J. Q. X. V.", "generation": "III"} +{"name": "Dr. Juan Q. Xavier de la dos Vega, III", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la dos Vega", "suffix": "III", "initials": "J. Q. X. V.", "generation": "III"} {"name": "Dr. Juan Q. de la Vega", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "de la Vega", "initials": "J. Q. V."} -{"name": "Dr. Juan Q. de la Vega III", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "de la Vega", "suffix": "III", "initials": "J. Q. V."} -{"name": "Dr. Juan Q. de la Vega, Jr.", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "de la Vega", "suffix": "Jr.", "initials": "J. Q. V."} +{"name": "Dr. Juan Q. de la Vega III", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "de la Vega", "suffix": "III", "initials": "J. Q. V.", "generation": "III"} +{"name": "Dr. Juan Q. de la Vega, Jr.", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "de la Vega", "suffix": "Jr.", "initials": "J. Q. V.", "generation": "Jr."} {"name": "Dr. Juan Velasquez y Garcia", "title": "Dr.", "given": "Juan", "family": "Velasquez y Garcia", "initials": "J. V. G."} -{"name": "Dr. Juan Velasquez y Garcia III", "title": "Dr.", "given": "Juan", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. V. G."} -{"name": "Dr. Juan Velasquez y Garcia, Jr.", "title": "Dr.", "given": "Juan", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. V. G."} +{"name": "Dr. Juan Velasquez y Garcia III", "title": "Dr.", "given": "Juan", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. V. G.", "generation": "III"} +{"name": "Dr. Juan Velasquez y Garcia, Jr.", "title": "Dr.", "given": "Juan", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. V. G.", "generation": "Jr."} {"name": "Dr. Juan de la Vega", "title": "Dr.", "given": "Juan", "family": "de la Vega", "initials": "J. V."} -{"name": "Dr. Juan de la Vega III", "title": "Dr.", "given": "Juan", "family": "de la Vega", "suffix": "III", "initials": "J. V."} -{"name": "Dr. Juan de la Vega, Jr.", "title": "Dr.", "given": "Juan", "family": "de la Vega", "suffix": "Jr.", "initials": "J. V."} +{"name": "Dr. Juan de la Vega III", "title": "Dr.", "given": "Juan", "family": "de la Vega", "suffix": "III", "initials": "J. V.", "generation": "III"} +{"name": "Dr. Juan de la Vega, Jr.", "title": "Dr.", "given": "Juan", "family": "de la Vega", "suffix": "Jr.", "initials": "J. V.", "generation": "Jr."} {"name": "Dr. King", "title": "Dr.", "family": "King", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "K."} -{"name": "Dr. Martin Luther King Jr.", "title": "Dr.", "given": "Martin", "middle": "Luther", "family": "King", "suffix": "Jr.", "initials": "M. L. K."} +{"name": "Dr. Martin Luther King Jr.", "title": "Dr.", "given": "Martin", "middle": "Luther", "family": "King", "suffix": "Jr.", "initials": "M. L. K.", "generation": "Jr."} {"name": "Dr. Mazen Elrouqi", "title": "Dr.", "given": "Mazen", "family": "Elrouqi", "initials": "M. E."} {"name": "Dr. Mc Donald, John", "title": "Dr.", "given": "John", "family": "Mc Donald", "initials": "J. D.", "capitalized_force": "Dr. John mc Donald"} -{"name": "Dr. Paul Vinzent von Fischer jr. MdB", "title": "Dr.", "given": "Paul", "middle": "Vinzent", "family": "von Fischer", "suffix": "jr. MdB", "initials": "P. V. F.", "capitalized_force": "Dr. Paul Vinzent von Fischer Jr. MDB"} +{"name": "Dr. Paul Vinzent von Fischer jr. MdB", "title": "Dr.", "given": "Paul", "middle": "Vinzent", "family": "von Fischer", "suffix": "jr. MdB", "initials": "P. V. F.", "capitalized_force": "Dr. Paul Vinzent von Fischer Jr. MDB", "generation": "jr.", "credentials": "MdB"} {"name": "Dr. Pope", "title": "Dr.", "family": "Pope", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "P."} {"name": "Dr. Pope MD", "title": "Dr.", "family": "Pope", "suffix": "MD", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "P."} {"name": "Dr. Pope, John", "title": "Dr.", "given": "John", "family": "Pope", "initials": "J. P."} {"name": "Dr. Sir John", "title": "Dr. Sir", "given": "John", "initials": "J."} {"name": "Dr. Smith", "title": "Dr.", "family": "Smith", "initials": "S."} -{"name": "Dr. Smith II, Sir", "title": "Dr. Sir", "family": "Smith", "suffix": "II", "initials": "S."} -{"name": "Dr. Smith Jr., AD", "title": "Dr.", "family": "Smith", "suffix": "Jr., AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "S."} +{"name": "Dr. Smith II, Sir", "title": "Dr. Sir", "family": "Smith", "suffix": "II", "initials": "S.", "generation": "II"} +{"name": "Dr. Smith Jr., AD", "title": "Dr.", "family": "Smith", "suffix": "Jr., AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "S.", "generation": "Jr.", "credentials": "AD"} {"name": "Dr. Smith Sir.", "title": "Dr. Sir.", "family": "Smith", "initials": "S."} {"name": "Dr. Smith V, AD", "title": "Dr.", "given": "AD", "family": "Smith V", "initials": "A. S. V.", "capitalized_force": "Dr. Ad Smith V"} {"name": "Dr. Smith and Bishop", "title": "Dr.", "family": "Smith and Bishop", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "S. B."} @@ -845,7 +845,7 @@ {"name": "Dr. Smith, John", "title": "Dr.", "given": "John", "family": "Smith", "initials": "J. S."} {"name": "Dr. St. Pierre, Ed", "title": "Dr.", "given": "Ed", "family": "St. Pierre", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "E. P.", "capitalized_force": "Dr. Ed st. Pierre"} {"name": "Dr. Van Johnson", "title": "Dr.", "given": "Van", "family": "Johnson", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "V. J."} -{"name": "Dr. Wang Xiaoming Jr.", "title": "Dr.", "given": "Wang", "family": "Xiaoming", "suffix": "Jr.", "initials": "W. X."} +{"name": "Dr. Wang Xiaoming Jr.", "title": "Dr.", "given": "Wang", "family": "Xiaoming", "suffix": "Jr.", "initials": "W. X.", "generation": "Jr."} {"name": "Dr. Williams", "title": "Dr.", "family": "Williams", "initials": "W."} {"name": "Dr. abdul salam", "title": "Dr.", "given": "abdul", "family": "salam", "initials": "a. s.", "capitalized_force": "Dr. Abdul Salam"} {"name": "Dr. abdul salam ahmed salem", "title": "Dr.", "given": "abdul salam", "middle": "ahmed", "family": "salem", "initials": "a. s. a. s.", "capitalized_force": "Dr. Abdul Salam Ahmed Salem"} @@ -860,7 +860,7 @@ {"name": "Dr., John", "given": "John", "family": "Dr.", "initials": "J. D."} {"name": "Dr.philol. Laima Kristīne Eva Sofija van den Volfa Bērziņa-Kalniņa", "title": "Dr.philol.", "given": "Laima", "middle": "Kristīne Eva Sofija", "family": "van den Volfa Bērziņa-Kalniņa", "initials": "L. K. E. S. V. B.", "capitalized_force": "Dr.Philol. Laima Kristīne Eva Sofija van den Volfa Bērziņa-Kalniņa"} {"name": "Dra. Andréia da Silva", "title": "Dra.", "given": "Andréia", "family": "da Silva", "initials": "A. S."} -{"name": "Dra. Erika Cornelia Anna Isabelle von Brül Cabral de Melo II", "title": "Dra.", "given": "Erika", "middle": "Cornelia Anna Isabelle von Brül Cabral", "family": "de Melo", "suffix": "II", "initials": "E. C. A. I. B. C. M."} +{"name": "Dra. Erika Cornelia Anna Isabelle von Brül Cabral de Melo II", "title": "Dra.", "given": "Erika", "middle": "Cornelia Anna Isabelle von Brül Cabral", "family": "de Melo", "suffix": "II", "initials": "E. C. A. I. B. C. M.", "generation": "II"} {"name": "Drífa Viðar", "given": "Drífa", "family": "Viðar", "initials": "D. V."} {"name": "Duby-Blom, Gertrude", "given": "Gertrude", "family": "Duby-Blom", "initials": "G. D."} {"name": "Duke Ellington", "given": "Duke", "family": "Ellington", "initials": "D. E."} @@ -869,7 +869,7 @@ {"name": "Duke of Wellington", "given": "Duke of Wellington", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "D. W."} {"name": "Dumas fils", "given": "Dumas", "family": "fils", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "D. f.", "capitalized_force": "Dumas Fils"} {"name": "Dumas, Alexandre Fils", "given": "Alexandre", "middle": "Fils", "family": "Dumas", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "A. F. D."} -{"name": "Dumas, Alexandre fils", "given": "Alexandre", "family": "Dumas", "suffix": "fils", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (declared)"], "initials": "A. D."} +{"name": "Dumas, Alexandre fils", "given": "Alexandre", "family": "Dumas", "suffix": "fils", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (declared)"], "initials": "A. D.", "generation": "fils"} {"name": "Dumas, fils", "given": "fils", "family": "Dumas", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "f. D.", "capitalized_force": "Fils Dumas"} {"name": "Dumreicher, Johann von", "given": "Johann", "family": "von Dumreicher", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "J. D."} {"name": "Dut.ra Prof.ra Maria Giusepa Juana Teresa von Brühl González Domingo", "title": "Dut.ra Prof.ra", "given": "Maria", "middle": "Giusepa Juana Teresa", "family": "von Brühl González Domingo", "initials": "M. G. J. T. B. G. D.", "capitalized_force": "Dut.Ra Prof.Ra Maria Giusepa Juana Teresa von Brühl González Domingo"} @@ -882,7 +882,7 @@ {"name": "E Maria", "given": "E", "family": "Maria", "initials": "E. M."} {"name": "E SMITH JONES", "given": "E", "middle": "SMITH", "family": "JONES", "ambiguities": ["CONJUNCTION_OR_INITIAL"], "initials": "E. S. J.", "capitalized": "E Smith Jones"} {"name": "E.T. Smith", "given": "E.T.", "family": "Smith", "initials": "E. S."} -{"name": "E.T. Smith, II", "given": "E.T.", "family": "Smith", "suffix": "II", "initials": "E. S."} +{"name": "E.T. Smith, II", "given": "E.T.", "family": "Smith", "suffix": "II", "initials": "E. S.", "generation": "II"} {"name": "Earl Campbell", "given": "Earl", "family": "Campbell", "initials": "E. C."} {"name": "Ed, Royce", "given": "Royce", "family": "Ed", "initials": "R. E."} {"name": "Edda Garðarsdóttir", "given": "Edda", "family": "Garðarsdóttir", "initials": "E. G."} @@ -906,7 +906,7 @@ {"name": "Einar Arnórsson", "given": "Einar", "family": "Arnórsson", "initials": "E. A."} {"name": "Einar Benediktsson", "given": "Einar", "family": "Benediktsson", "initials": "E. B."} {"name": "Einar Jónsson", "given": "Einar", "family": "Jónsson", "initials": "E. J."} -{"name": "Eitel Friedrich II.", "given": "Eitel", "family": "Friedrich", "suffix": "II.", "initials": "E. F."} +{"name": "Eitel Friedrich II.", "given": "Eitel", "family": "Friedrich", "suffix": "II.", "initials": "E. F.", "generation": "II."} {"name": "Eiður Gunnarsson", "given": "Eiður", "family": "Gunnarsson", "initials": "E. G."} {"name": "El Dine", "given": "El", "family": "Dine", "initials": "E. D."} {"name": "Eladio Andino y del Solar", "given": "Eladio", "middle": "Andino y del", "family": "Solar", "initials": "E. A. S."} @@ -935,9 +935,9 @@ {"name": "Enrique Santos Montejo", "given": "Enrique", "middle": "Santos", "family": "Montejo", "initials": "E. S. M."} {"name": "Enver Pascha", "given": "Enver", "family": "Pascha", "initials": "E. P."} {"name": "Epaminondas Nunes de Ávila e Silva", "given": "Epaminondas", "middle": "Nunes", "family": "de Ávila e Silva", "initials": "E. N. Á. S."} -{"name": "Eric H. Holder Jr. Attorney General", "title": "Attorney General", "given": "Eric", "middle": "H.", "family": "Holder", "suffix": "Jr.", "initials": "E. H. H."} -{"name": "Eric H. Holder, Jr., Attorney General", "title": "Attorney General", "given": "Eric", "middle": "H.", "family": "Holder", "suffix": "Jr.", "initials": "E. H. H."} -{"name": "Eric H. Holder, Jr., Secretary of State", "title": "Secretary of State", "given": "Eric", "middle": "H.", "family": "Holder", "suffix": "Jr.", "ambiguities": ["COMMA_STRUCTURE"], "initials": "E. H. H."} +{"name": "Eric H. Holder Jr. Attorney General", "title": "Attorney General", "given": "Eric", "middle": "H.", "family": "Holder", "suffix": "Jr.", "initials": "E. H. H.", "generation": "Jr."} +{"name": "Eric H. Holder, Jr., Attorney General", "title": "Attorney General", "given": "Eric", "middle": "H.", "family": "Holder", "suffix": "Jr.", "initials": "E. H. H.", "generation": "Jr."} +{"name": "Eric H. Holder, Jr., Secretary of State", "title": "Secretary of State", "given": "Eric", "middle": "H.", "family": "Holder", "suffix": "Jr.", "ambiguities": ["COMMA_STRUCTURE"], "initials": "E. H. H.", "generation": "Jr."} {"name": "Eric de Bisschop", "given": "Eric", "family": "de Bisschop", "initials": "E. B."} {"name": "Ernst von Wildenbruch", "given": "Ernst", "family": "von Wildenbruch", "initials": "E. W."} {"name": "Escoto, Miguel d'", "given": "Miguel", "family": "d' Escoto", "initials": "M. E."} @@ -956,9 +956,9 @@ {"name": "Ever Peña Maldonado", "given": "Ever", "middle": "Peña", "family": "Maldonado", "initials": "E. P. M."} {"name": "Ewa Nowak", "given": "Ewa", "family": "Nowak", "initials": "E. N."} {"name": "Excm. Sr. Josep Antoni Carles Joan Lloret Palol", "title": "Excm. Sr.", "given": "Josep", "middle": "Antoni Carles Joan Lloret", "family": "Palol", "initials": "J. A. C. J. L. P."} -{"name": "Excm. Sr. Lloret Palol II, Josep Antoni Carles Joan", "order": "FAMILY_FIRST", "given": "Josep", "middle": "Antoni Carles Joan", "family": "Excm. Lloret Palol", "suffix": "Sr., II", "initials": "J. A. C. J. E. L. P."} +{"name": "Excm. Sr. Lloret Palol II, Josep Antoni Carles Joan", "order": "FAMILY_FIRST", "given": "Josep", "middle": "Antoni Carles Joan", "family": "Excm. Lloret Palol", "suffix": "Sr., II", "initials": "J. A. C. J. E. L. P.", "generation": "Sr., II"} {"name": "Excma. Dra. Maria da Graça César Martín van Dalen Hoogeveen", "title": "Excma. Dra.", "given": "Maria", "middle": "da Graça César Martín", "family": "van Dalen Hoogeveen", "initials": "M. G. C. M. D. H."} -{"name": "Excma. Dra. Van Dalen Hoogeveen II, Maria da Graça César Martín", "order": "FAMILY_FIRST", "given": "Maria", "middle": "da Graça César Martín", "family": "Excma. Dra. Van Dalen Hoogeveen", "suffix": "II", "initials": "M. G. C. M. E. D. D. H.", "capitalized_force": "Maria da Graça César Martín Excma. Dra. van Dalen Hoogeveen II"} +{"name": "Excma. Dra. Van Dalen Hoogeveen II, Maria da Graça César Martín", "order": "FAMILY_FIRST", "given": "Maria", "middle": "da Graça César Martín", "family": "Excma. Dra. Van Dalen Hoogeveen", "suffix": "II", "initials": "M. G. C. M. E. D. D. H.", "capitalized_force": "Maria da Graça César Martín Excma. Dra. van Dalen Hoogeveen II", "generation": "II"} {"name": "Eyck, Jan van", "given": "Jan", "family": "van Eyck", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "J. E."} {"name": "É. y É. Smith", "given": "É.", "middle": "y É.", "family": "Smith", "initials": "É. É. S."} {"name": "Ế Nguyen", "given": "Ế", "family": "Nguyen", "initials": "Ế. N."} @@ -1008,8 +1008,8 @@ {"name": "Fleksnes, Gregers Werle Marve Almar von", "given": "Gregers", "middle": "Werle Marve Almar", "family": "von Fleksnes", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "G. W. M. A. F."} {"name": "Flores Marco Antonio", "order": "FAMILY_FIRST", "given": "Marco", "middle": "Antonio", "family": "Flores", "initials": "M. A. F."} {"name": "Flores, Marco Antonio", "given": "Marco", "middle": "Antonio", "family": "Flores", "initials": "M. A. F."} -{"name": "Flávio Juvenal da Silva Jr", "given": "Flávio", "middle": "Juvenal", "family": "da Silva", "suffix": "Jr", "initials": "F. J. S."} -{"name": "Flávio Juvenal da Silva Junior", "given": "Flávio", "middle": "Juvenal", "family": "da Silva", "suffix": "Junior", "initials": "F. J. S."} +{"name": "Flávio Juvenal da Silva Jr", "given": "Flávio", "middle": "Juvenal", "family": "da Silva", "suffix": "Jr", "initials": "F. J. S.", "generation": "Jr"} +{"name": "Flávio Juvenal da Silva Junior", "given": "Flávio", "middle": "Juvenal", "family": "da Silva", "suffix": "Junior", "initials": "F. J. S.", "generation": "Junior"} {"name": "Foffa, Gian Carlo Ramun", "given": "Gian", "middle": "Carlo Ramun", "family": "Foffa", "initials": "G. C. R. F."} {"name": "Foffa, Gian Carlo Ramun", "order": "FAMILY_FIRST", "given": "Gian", "middle": "Carlo Ramun", "family": "Foffa", "initials": "G. C. R. F."} {"name": "Foldès, Peter", "given": "Peter", "family": "Foldès", "initials": "P. F."} @@ -1037,9 +1037,9 @@ {"name": "Francisco Posada Díaz", "given": "Francisco", "middle": "Posada", "family": "Díaz", "initials": "F. P. D."} {"name": "Francisco Santos Calderón", "given": "Francisco", "middle": "Santos", "family": "Calderón", "initials": "F. S. C."} {"name": "Franconetti y Aguilar, Silverio", "given": "Silverio", "family": "Franconetti y Aguilar", "initials": "S. F. A."} -{"name": "Franklin Washington, Jr. MD", "given": "Franklin", "family": "Washington", "suffix": "Jr. MD", "initials": "F. W."} +{"name": "Franklin Washington, Jr. MD", "given": "Franklin", "family": "Washington", "suffix": "Jr. MD", "initials": "F. W.", "generation": "Jr.", "credentials": "MD"} {"name": "Franklin, Benjamin (Ben)", "given": "Benjamin", "family": "Franklin", "nickname": "Ben", "initials": "B. F."} -{"name": "Franklin, Benjamin (Ben), Jr.", "given": "Benjamin", "family": "Franklin", "suffix": "Jr.", "nickname": "Ben", "initials": "B. F."} +{"name": "Franklin, Benjamin (Ben), Jr.", "given": "Benjamin", "family": "Franklin", "suffix": "Jr.", "nickname": "Ben", "initials": "B. F.", "generation": "Jr."} {"name": "Frantziscu", "given": "Frantziscu", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "F."} {"name": "Frantziscu", "order": "FAMILY_FIRST", "family": "Frantziscu", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "F."} {"name": "Franz I.", "given": "Franz", "family": "I.", "initials": "F. I."} @@ -1055,7 +1055,7 @@ {"name": "Freiherr von Richthofen V", "title": "Freiherr", "family": "von Richthofen V", "ambiguities": ["PARTICLE_OR_GIVEN", "SUFFIX_OR_NAME"], "alternatives": ["PARTICLE_OR_GIVEN: name as given (declared)", "SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "R. V."} {"name": "Freire Xiana", "order": "FAMILY_FIRST", "given": "Xiana", "family": "Freire", "initials": "X. F."} {"name": "Freire, Xiana", "given": "Xiana", "family": "Freire", "initials": "X. F."} -{"name": "Friedrich IV.", "given": "Friedrich", "suffix": "IV.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "F."} +{"name": "Friedrich IV.", "given": "Friedrich", "suffix": "IV.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "F.", "generation": "IV."} {"name": "Friedrich Ludwig von Waldburg-Truchsess", "given": "Friedrich", "middle": "Ludwig", "family": "von Waldburg-Truchsess", "initials": "F. L. W."} {"name": "Friedrich V.", "given": "Friedrich", "family": "V.", "initials": "F. V."} {"name": "Fritz Freiherr und von Bar", "given": "Fritz", "family": "Freiherr und von Bar", "initials": "F. u.", "capitalized_force": "Fritz freiherr und von bar"} @@ -1070,12 +1070,12 @@ {"name": "G. J. M.", "given": "G.", "middle": "J.", "family": "M.", "initials": "G. J. M."} {"name": "G. M.", "given": "G.", "family": "M.", "initials": "G. M."} {"name": "G. V. M.", "given": "G.", "middle": "V.", "family": "M.", "initials": "G. V. M."} -{"name": "GEORGE SHANAHAN IV", "given": "GEORGE", "family": "SHANAHAN", "suffix": "IV", "initials": "G. S.", "capitalized": "George Shanahan IV"} +{"name": "GEORGE SHANAHAN IV", "given": "GEORGE", "family": "SHANAHAN", "suffix": "IV", "initials": "G. S.", "capitalized": "George Shanahan IV", "generation": "IV"} {"name": "GOMINA MUSA Abɖu-Tɔyib", "order": "FAMILY_FIRST", "given": "MUSA", "middle": "Abɖu-Tɔyib", "family": "GOMINA", "initials": "M. A. G.", "capitalized_force": "Gomina Musa Abɖu-Tɔyib"} {"name": "GRACE SMITH", "given": "GRACE", "family": "SMITH", "initials": "G. S.", "capitalized": "Grace Smith"} {"name": "GREGORY HOUSE M.D.", "given": "GREGORY", "family": "HOUSE", "suffix": "M.D.", "initials": "G. H.", "capitalized": "Gregory House M.D."} {"name": "Gabriel García Márquez", "given": "Gabriel", "middle": "García", "family": "Márquez", "initials": "G. G. M."} -{"name": "Gabriel García Márquez Jr.", "given": "Gabriel", "middle": "García", "family": "Márquez", "suffix": "Jr.", "initials": "G. G. M."} +{"name": "Gabriel García Márquez Jr.", "given": "Gabriel", "middle": "García", "family": "Márquez", "suffix": "Jr.", "initials": "G. G. M.", "generation": "Jr."} {"name": "Gabriel García Márquez, PhD", "given": "Gabriel", "middle": "García", "family": "Márquez", "suffix": "PhD", "initials": "G. G. M."} {"name": "Gabriel Jaime Santamaría Montoya", "given": "Gabriel", "middle": "Jaime Santamaría", "family": "Montoya", "initials": "G. J. S. M."} {"name": "Gabriel Kolko", "given": "Gabriel", "family": "Kolko", "initials": "G. K."} @@ -1090,7 +1090,7 @@ {"name": "Garaikoetxea Urriza, Juan C.", "given": "Juan", "middle": "C.", "family": "Garaikoetxea Urriza", "initials": "J. C. G. U."} {"name": "Garcia", "given": "Garcia", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "G."} {"name": "Garcia Juan Carlos", "given": "Garcia", "middle": "Juan", "family": "Carlos", "initials": "G. J. C."} -{"name": "Garcia Lopez Jr., Juan", "given": "Juan", "family": "Garcia Lopez", "suffix": "Jr.", "initials": "J. G. L."} +{"name": "Garcia Lopez Jr., Juan", "given": "Juan", "family": "Garcia Lopez", "suffix": "Jr.", "initials": "J. G. L.", "generation": "Jr."} {"name": "Garcia de Jalon", "given": "Garcia", "family": "de Jalon", "initials": "G. J."} {"name": "Garcia y Lopez", "given": "Garcia", "middle": "y", "family": "Lopez", "initials": "G. y. L."} {"name": "Garcia-Roza, Luiz Alfredo", "given": "Luiz", "middle": "Alfredo", "family": "Garcia-Roza", "initials": "L. A. G."} @@ -1117,7 +1117,7 @@ {"name": "General Major John Smith", "title": "General", "given": "Major", "middle": "John", "family": "Smith", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "M. J. S."} {"name": "General of Minnesota", "title": "General of Minnesota"} {"name": "Geng, Biao", "given": "Biao", "family": "Geng", "initials": "B. G."} -{"name": "Georg VI.", "given": "Georg", "suffix": "VI.", "ambiguities": ["GIVEN_OR_FAMILY", "SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)", "GIVEN_OR_FAMILY: name as family (position)"], "initials": "G."} +{"name": "Georg VI.", "given": "Georg", "suffix": "VI.", "ambiguities": ["GIVEN_OR_FAMILY", "SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)", "GIVEN_OR_FAMILY: name as family (position)"], "initials": "G.", "generation": "VI."} {"name": "Georg von Hülsen-Haeseler", "given": "Georg", "family": "von Hülsen-Haeseler", "initials": "G. H."} {"name": "George D. Cummins", "given": "George", "middle": "D.", "family": "Cummins", "initials": "G. D. C."} {"name": "George Edward Stanhope Molyneux Herbert of Carnarvon", "given": "George", "middle": "Edward Stanhope Molyneux", "family": "Herbert of Carnarvon", "initials": "G. E. S. M. H. C."} @@ -1141,13 +1141,13 @@ {"name": "Giuanne Marcu Piras", "given": "Giuanne", "middle": "Marcu", "family": "Piras", "initials": "G. M. P."} {"name": "Giuliano de Medici", "given": "Giuliano", "family": "de Medici", "initials": "G. M."} {"name": "Give me a private config", "given": "Give", "middle": "me a private", "family": "config", "initials": "G. m. a. p. c.", "capitalized_force": "Give Me A Private Config"} -{"name": "Giáo sư, Tiến sĩ Ada Cornelia César Martín von Brühl Jr, MD DDS", "given": "Tiến", "middle": "sĩ Ada Cornelia César Martín von Brühl", "family": "Giáo sư", "suffix": "Jr, MD DDS", "initials": "T. s. A. C. C. M. B. G. s.", "capitalized_force": "Tiến Sĩ Ada Cornelia César Martín von Brühl Giáo Sư Jr, MD DDS"} +{"name": "Giáo sư, Tiến sĩ Ada Cornelia César Martín von Brühl Jr, MD DDS", "given": "Tiến", "middle": "sĩ Ada Cornelia César Martín von Brühl", "family": "Giáo sư", "suffix": "Jr, MD DDS", "initials": "T. s. A. C. C. M. B. G. s.", "capitalized_force": "Tiến Sĩ Ada Cornelia César Martín von Brühl Giáo Sư Jr, MD DDS", "generation": "Jr", "credentials": "MD DDS"} {"name": "Godchaux, Donna Jean", "given": "Donna", "middle": "Jean", "family": "Godchaux", "initials": "D. J. G."} {"name": "Goldschmidt, Neil Edward", "given": "Neil", "middle": "Edward", "family": "Goldschmidt", "initials": "N. E. G."} {"name": "González Gortázar, Fernando", "given": "Fernando", "family": "González Gortázar", "initials": "F. G. G."} {"name": "Gorter, Johannes de", "given": "Johannes", "family": "de Gorter", "initials": "J. G."} {"name": "Gottfried Huyn von Geleen und Amsterad", "given": "Gottfried", "middle": "Huyn", "family": "von Geleen und Amsterad", "initials": "G. H. G. A."} -{"name": "Gottfried IV.", "given": "Gottfried", "suffix": "IV.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "G."} +{"name": "Gottfried IV.", "given": "Gottfried", "suffix": "IV.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "G.", "generation": "IV."} {"name": "Goëß, Johann von", "given": "Johann", "family": "von Goëß", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "J. G."} {"name": "Grace Dean Smith", "given": "Grace", "middle": "Dean", "family": "Smith", "initials": "G. D. S."} {"name": "Grace Smith", "given": "Grace", "family": "Smith", "initials": "G. S."} @@ -1226,7 +1226,7 @@ {"name": "Harald", "order": "FAMILY_FIRST", "family": "Harald", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "H."} {"name": "Haraldur Sigurðsson", "given": "Haraldur", "family": "Sigurðsson", "initials": "H. S."} {"name": "Hardie Leannon DVM", "given": "Hardie", "family": "Leannon", "suffix": "DVM", "initials": "H. L."} -{"name": "Hardie Leannon V", "given": "Hardie", "family": "Leannon", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "H. L."} +{"name": "Hardie Leannon V", "given": "Hardie", "family": "Leannon", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "H. L.", "generation": "V"} {"name": "Haren, Willem van", "given": "Willem", "family": "van Haren", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "W. H."} {"name": "Harietta Keopuolani Nahi'ena'ena", "given": "Harietta", "middle": "Keopuolani", "family": "Nahi'ena'ena", "initials": "H. K. N.", "capitalized_force": "Harietta Keopuolani Nahi'Ena'Ena"} {"name": "Harms, Claus", "given": "Claus", "family": "Harms", "initials": "C. H."} @@ -1282,15 +1282,15 @@ {"name": "Hisham Ibrahim, CPA, CFA", "given": "Hisham", "family": "Ibrahim", "suffix": "CPA, CFA", "initials": "H. I."} {"name": "Hodan Farah Warsame", "given": "Hodan", "middle": "Farah", "family": "Warsame", "initials": "H. F. W."} {"name": "Hon Solo", "title": "Hon", "family": "Solo", "initials": "S."} -{"name": "Hon. Barrington P. Doe-Ray, Jr.", "title": "Hon.", "given": "Barrington", "middle": "P.", "family": "Doe-Ray", "suffix": "Jr.", "initials": "B. P. D."} +{"name": "Hon. Barrington P. Doe-Ray, Jr.", "title": "Hon.", "given": "Barrington", "middle": "P.", "family": "Doe-Ray", "suffix": "Jr.", "initials": "B. P. D.", "generation": "Jr."} {"name": "Hon. Charles J. Siragusa", "title": "Hon.", "given": "Charles", "middle": "J.", "family": "Siragusa", "initials": "C. J. S."} {"name": "Hon. Marian W. Payson", "title": "Hon.", "given": "Marian", "middle": "W.", "family": "Payson", "initials": "M. W. P."} {"name": "Hon. Wing Lau", "title": "Hon.", "given": "Wing", "family": "Lau", "initials": "W. L."} {"name": "Honorable Judge Susan Russ Walker", "title": "Honorable Judge", "given": "Susan", "middle": "Russ", "family": "Walker", "initials": "S. R. W."} {"name": "Honorable Judge Terry F. Moorer", "title": "Honorable Judge", "given": "Terry", "middle": "F.", "family": "Moorer", "initials": "T. F. M."} -{"name": "Honorable Judge W. Harold Albritton, III", "title": "Honorable Judge", "given": "W.", "middle": "Harold", "family": "Albritton", "suffix": "III", "initials": "W. H. A."} +{"name": "Honorable Judge W. Harold Albritton, III", "title": "Honorable Judge", "given": "W.", "middle": "Harold", "family": "Albritton", "suffix": "III", "initials": "W. H. A.", "generation": "III"} {"name": "Honorable Terry F. Moorer", "title": "Honorable", "given": "Terry", "middle": "F.", "family": "Moorer", "initials": "T. F. M."} -{"name": "Honorable W. Harold Albritton, III", "title": "Honorable", "given": "W.", "middle": "Harold", "family": "Albritton", "suffix": "III", "initials": "W. H. A."} +{"name": "Honorable W. Harold Albritton, III", "title": "Honorable", "given": "W.", "middle": "Harold", "family": "Albritton", "suffix": "III", "initials": "W. H. A.", "generation": "III"} {"name": "Hooghvorst, Emmanuel d'", "given": "Emmanuel", "family": "d' Hooghvorst", "initials": "E. H."} {"name": "Horacio Gómez Bolaños", "given": "Horacio", "middle": "Gómez", "family": "Bolaños", "initials": "H. G. B."} {"name": "Horst, Jakob", "given": "Jakob", "family": "Horst", "initials": "J. H."} @@ -1306,7 +1306,7 @@ {"name": "Hussein Mariam Geedi Hamish", "order": "FAMILY_FIRST", "given": "Mariam", "middle": "Geedi Hamish", "family": "Hussein", "initials": "M. G. H. H."} {"name": "Hussein Onn", "given": "Hussein", "family": "Onn", "initials": "H. O."} {"name": "Hussein, Mariam Geedi Hamish", "given": "Mariam", "middle": "Geedi Hamish", "family": "Hussein", "initials": "M. G. H. H."} -{"name": "Håkon III.", "given": "Håkon", "suffix": "III.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "H."} +{"name": "Håkon III.", "given": "Håkon", "suffix": "III.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "H.", "generation": "III."} {"name": "Héctor Quintana Suárez", "given": "Héctor", "middle": "Quintana", "family": "Suárez", "initials": "H. Q. S."} {"name": "Hülsen-Haeseler, Georg von", "given": "Georg", "family": "von Hülsen-Haeseler", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "G. H."} {"name": "I don", "given": "I", "family": "don", "initials": "I. d.", "capitalized_force": "I Don"} @@ -1356,7 +1356,7 @@ {"name": "Ismail, Syed Abd Aziz Syed A", "given": "Syed", "middle": "Aziz Syed A", "family": "Ismail", "suffix": "Abd", "initials": "S. A. S. A. I.", "capitalized_force": "Syed Aziz Syed A Ismail ABD"} {"name": "Isseu Awa", "given": "Isseu", "family": "Awa", "initials": "I. A."} {"name": "Iu Alavedra i Ferrer", "given": "Iu", "family": "Alavedra i Ferrer", "initials": "I. A. F."} -{"name": "Iustinus II.", "given": "Iustinus", "suffix": "II.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "I."} +{"name": "Iustinus II.", "given": "Iustinus", "suffix": "II.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "I.", "generation": "II."} {"name": "Ivan", "given": "Ivan", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "I."} {"name": "Ivan", "order": "FAMILY_FIRST", "family": "Ivan", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "I."} {"name": "Ivan Ivanov", "given": "Ivan", "family": "Ivanov", "initials": "I. I."} @@ -1376,8 +1376,8 @@ {"name": "J. None D.", "given": "J.", "middle": "None", "family": "D.", "initials": "J. N. D."} {"name": "J. S. V.", "given": "J.", "middle": "S.", "family": "V.", "initials": "J. S. V."} {"name": "J. Smith", "given": "J.", "family": "Smith", "initials": "J. S."} -{"name": "J. Smith Jr.", "given": "J.", "family": "Smith", "suffix": "Jr.", "initials": "J. S."} -{"name": "J. Smith Sr.", "given": "J.", "family": "Smith", "suffix": "Sr.", "initials": "J. S."} +{"name": "J. Smith Jr.", "given": "J.", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} +{"name": "J. Smith Sr.", "given": "J.", "family": "Smith", "suffix": "Sr.", "initials": "J. S.", "generation": "Sr."} {"name": "J. Smith, MD", "given": "J.", "family": "Smith", "suffix": "MD", "initials": "J. S."} {"name": "J. Smith, PhD", "given": "J.", "family": "Smith", "suffix": "PhD", "initials": "J. S."} {"name": "J. V.", "given": "J.", "family": "V.", "initials": "J. V."} @@ -1404,24 +1404,24 @@ {"name": "JOHN MA PHD", "given": "JOHN", "family": "MA", "suffix": "PHD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. M.", "capitalized": "John Ma PhD"} {"name": "JOHN NEE JONES SMITH MA PHD", "family": "JOHN", "suffix": "PHD", "maiden": "JONES SMITH MA", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J.", "capitalized": "John (Jones Smith Ma) PhD"} {"name": "JOHN PROF. MA", "title": "PROF.", "given": "JOHN", "family": "MA", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. M.", "capitalized": "Prof. John Ma"} -{"name": "JOHN QUINCY SMITH I", "given": "JOHN", "middle": "QUINCY", "family": "SMITH", "suffix": "I", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. Q. S.", "capitalized": "John Quincy Smith I"} +{"name": "JOHN QUINCY SMITH I", "given": "JOHN", "middle": "QUINCY", "family": "SMITH", "suffix": "I", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. Q. S.", "capitalized": "John Quincy Smith I", "generation": "I"} {"name": "JOHN SMITH", "given": "JOHN", "family": "SMITH", "initials": "J. S.", "capitalized": "John Smith"} {"name": "JOHN SMITH (M.A)", "given": "JOHN", "family": "SMITH", "suffix": "M.A", "initials": "J. S.", "capitalized": "John Smith M.A"} {"name": "JOHN SMITH (MA)", "given": "JOHN", "family": "SMITH", "nickname": "MA", "ambiguities": ["SUFFIX_OR_NICKNAME"], "alternatives": ["SUFFIX_OR_NICKNAME: credential as suffix (vocabulary)"], "initials": "J. S.", "capitalized": "John \"Ma\" Smith"} {"name": "JOHN SMITH (m.a) (MA)", "given": "JOHN", "family": "SMITH", "suffix": "m.a", "nickname": "MA", "ambiguities": ["SUFFIX_OR_NICKNAME"], "alternatives": ["SUFFIX_OR_NICKNAME: credential as suffix (vocabulary)"], "initials": "J. S.", "capitalized": "John \"Ma\" Smith M.A"} -{"name": "JOHN SMITH JR, AD", "given": "AD", "family": "JOHN SMITH", "suffix": "JR", "initials": "A. J. S.", "capitalized": "Ad John Smith Jr"} +{"name": "JOHN SMITH JR, AD", "given": "AD", "family": "JOHN SMITH", "suffix": "JR", "initials": "A. J. S.", "capitalized": "Ad John Smith Jr", "generation": "JR"} {"name": "JOHN SMITH MA", "given": "JOHN", "family": "SMITH", "suffix": "MA", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "J. S.", "capitalized": "John Smith MA"} {"name": "JOHN SMITH MA JONES", "given": "JOHN", "middle": "SMITH MA", "family": "JONES", "initials": "J. S. M. J.", "capitalized": "John Smith Ma Jones"} {"name": "JOHN SMITH NEE X X", "given": "JOHN", "family": "SMITH", "maiden": "X X", "initials": "J. S.", "capitalized": "John Smith (X X)"} {"name": "JOHN SMITH PH.D.", "given": "JOHN", "family": "SMITH", "suffix": "PH.D.", "initials": "J. S.", "capitalized": "John Smith Ph.D."} {"name": "JOHN SMITH SAM E.", "given": "JOHN", "family": "SMITH", "suffix": "SAM E.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S.", "capitalized": "John Smith SAM E."} -{"name": "JOHN SMITH VI", "given": "JOHN", "family": "SMITH", "suffix": "VI", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S.", "capitalized": "John Smith VI"} +{"name": "JOHN SMITH VI", "given": "JOHN", "family": "SMITH", "suffix": "VI", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S.", "capitalized": "John Smith VI", "generation": "VI"} {"name": "JOHN SMITH, FNP-BC", "given": "JOHN", "family": "SMITH", "suffix": "FNP-BC", "initials": "J. S.", "capitalized": "John Smith, FNP-BC"} {"name": "JOHN SMITH, MA", "given": "JOHN", "family": "SMITH", "suffix": "MA", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (declared)"], "initials": "J. S.", "capitalized": "John Smith, MA"} {"name": "JOHN SMITH, PU-PH", "given": "PU-PH", "family": "JOHN SMITH", "initials": "P. J. S.", "capitalized": "Pu-Ph John Smith"} {"name": "JOHN SMITH, VD MA", "given": "JOHN", "family": "SMITH", "suffix": "VD MA", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "capitalized": "John Smith, VD MA"} {"name": "JOHN V", "given": "JOHN", "family": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "J. V.", "capitalized": "John V"} -{"name": "JOSE DA SILVA FH", "given": "JOSE", "family": "DA SILVA", "suffix": "FH", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "J. S.", "capitalized": "Jose da Silva Fh"} +{"name": "JOSE DA SILVA FH", "given": "JOSE", "family": "DA SILVA", "suffix": "FH", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "J. S.", "capitalized": "Jose da Silva Fh", "generation": "FH"} {"name": "JOSE E MARIA SANTOS", "given": "JOSE", "middle": "E MARIA", "family": "SANTOS", "ambiguities": ["CONJUNCTION_OR_INITIAL"], "alternatives": ["CONJUNCTION_OR_INITIAL: conjunction as given (vocabulary)"], "initials": "J. E. M. S.", "capitalized": "Jose E Maria Santos"} {"name": "JOSE ORTEGA-Y-GASSET", "given": "JOSE", "family": "ORTEGA-Y-GASSET", "initials": "J. O.", "capitalized": "Jose Ortega-y-Gasset"} {"name": "JOSEP CAROD I ROVIRA", "given": "JOSEP", "middle": "CAROD I", "family": "ROVIRA", "ambiguities": ["CONJUNCTION_OR_INITIAL"], "alternatives": ["CONJUNCTION_OR_INITIAL: conjunction as family (vocabulary)"], "initials": "J. C. I. R.", "capitalized": "Josep Carod I Rovira"} @@ -1429,7 +1429,7 @@ {"name": "JOSÉ GARCÍA", "given": "JOSÉ", "family": "GARCÍA", "initials": "J. G.", "capitalized": "José García"} {"name": "JOSÉ GARCÍA", "given": "JOSÉ", "family": "GARCÍA", "initials": "J. G.", "capitalized": "José García"} {"name": "JUAN DELA CRUZ", "given": "JUAN", "family": "DELA CRUZ", "initials": "J. C.", "capitalized": "Juan dela Cruz"} -{"name": "JUAN GARCIA Jr.", "given": "JUAN", "family": "GARCIA", "suffix": "Jr.", "initials": "J. G.", "capitalized": "Juan Garcia Jr."} +{"name": "JUAN GARCIA Jr.", "given": "JUAN", "family": "GARCIA", "suffix": "Jr.", "initials": "J. G.", "capitalized": "Juan Garcia Jr.", "generation": "Jr."} {"name": "JUAN GARCIA Y LOPEZ", "given": "JUAN", "family": "GARCIA Y LOPEZ", "initials": "J. G. L.", "capitalized": "Juan Garcia y Lopez"} {"name": "JUAN Y GARCIA", "given": "JUAN", "middle": "Y", "family": "GARCIA", "initials": "J. Y. G.", "capitalized": "Juan y Garcia"} {"name": "Jaak Eerik Kask", "given": "Jaak", "middle": "Eerik", "family": "Kask", "initials": "J. E. K."} @@ -1444,7 +1444,7 @@ {"name": "Jack MA", "given": "Jack", "suffix": "MA", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "J."} {"name": "Jack MA.", "given": "Jack", "suffix": "MA.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "J."} {"name": "Jack Ma", "given": "Jack", "family": "Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. M."} -{"name": "Jack Ma Jr", "given": "Jack", "family": "Ma", "suffix": "Jr", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. M."} +{"name": "Jack Ma Jr", "given": "Jack", "family": "Ma", "suffix": "Jr", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. M.", "generation": "Jr"} {"name": "Jack Ma.", "given": "Jack", "family": "Ma.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. M."} {"name": "Jack PHARM D", "given": "Jack", "middle": "PHARM", "family": "D", "initials": "J. P. D.", "capitalized_force": "Jack Pharm D"} {"name": "Jack Wei Ma", "given": "Jack", "middle": "Wei", "family": "Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. W. M."} @@ -1485,23 +1485,23 @@ {"name": "Jane Doe (nee Smith Prof.)", "title": "Prof.", "given": "Jane", "family": "Doe", "maiden": "Smith", "initials": "J. D."} {"name": "Jane Doe (nee Smith) MA", "given": "Jane", "family": "Doe", "suffix": "MA", "maiden": "Smith", "initials": "J. D."} {"name": "Jane Doe Dr. Ph. D.", "title": "Dr.", "given": "Jane", "family": "Doe", "suffix": "Ph. D.", "initials": "J. D."} -{"name": "Jane Doe Jr. nee Smith", "given": "Jane", "family": "Doe", "suffix": "Jr. nee Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)", "SUFFIX_OR_NAME: name as family (position)"], "initials": "J. D.", "capitalized_force": "Jane Doe Jr. Nee Smith"} -{"name": "Jane Doe Jr. nee Smith Ma", "given": "Jane", "family": "Doe", "suffix": "Jr. nee Smith Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)", "SUFFIX_OR_NAME: name as family (position)", "SUFFIX_OR_NAME: name as family (declared)"], "initials": "J. D.", "capitalized_force": "Jane Doe Jr. Nee Smith MA"} +{"name": "Jane Doe Jr. nee Smith", "given": "Jane", "family": "Doe", "suffix": "Jr. nee Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)", "SUFFIX_OR_NAME: name as family (position)"], "initials": "J. D.", "capitalized_force": "Jane Doe Jr. Nee Smith", "generation": "Jr.", "credentials": "nee Smith"} +{"name": "Jane Doe Jr. nee Smith Ma", "given": "Jane", "family": "Doe", "suffix": "Jr. nee Smith Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)", "SUFFIX_OR_NAME: name as family (position)", "SUFFIX_OR_NAME: name as family (declared)"], "initials": "J. D.", "capitalized_force": "Jane Doe Jr. Nee Smith MA", "generation": "Jr.", "credentials": "nee Smith Ma"} {"name": "Jane Doe MA R.T.", "given": "Jane", "family": "Doe", "suffix": "MA R.T.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. D."} {"name": "Jane Doe Ma R.T.", "given": "Jane", "middle": "Doe Ma", "family": "R.T.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)"], "initials": "J. D. M. R."} {"name": "Jane Doe Mrs", "given": "Jane", "middle": "Doe", "family": "Mrs", "initials": "J. D. M."} {"name": "Jane Doe PhD nee Smith", "given": "Jane", "family": "Doe", "suffix": "PhD nee Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)", "SUFFIX_OR_NAME: name as family (position)"], "initials": "J. D.", "capitalized_force": "Jane Doe PhD Nee Smith"} -{"name": "Jane Doe de D Junior", "given": "Jane", "middle": "Doe", "family": "de D", "suffix": "Junior", "initials": "J. D. D."} +{"name": "Jane Doe de D Junior", "given": "Jane", "middle": "Doe", "family": "de D", "suffix": "Junior", "initials": "J. D. D.", "generation": "Junior"} {"name": "Jane Doe geb. Smith MA", "given": "Jane", "family": "Doe", "suffix": "MA", "maiden": "Smith", "initials": "J. D."} {"name": "Jane Doe nee MA", "given": "Jane", "family": "Doe", "maiden": "MA", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. D.", "capitalized_force": "Jane Doe (Ma)"} {"name": "Jane Doe nee MA PhD", "given": "Jane", "family": "Doe", "suffix": "PhD", "maiden": "MA", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. D.", "capitalized_force": "Jane Doe (Ma) PhD"} {"name": "Jane Doe nee MA Smith", "given": "Jane", "family": "Doe", "maiden": "MA Smith", "initials": "J. D.", "capitalized_force": "Jane Doe (Ma Smith)"} {"name": "Jane Doe nee Pope.", "given": "Jane", "family": "Doe", "maiden": "Pope.", "initials": "J. D."} {"name": "Jane Doe nee Prof. Dr.", "title": "Dr.", "given": "Jane", "family": "Doe", "maiden": "Prof.", "initials": "J. D."} -{"name": "Jane Doe nee Puig i", "given": "Jane", "family": "Doe", "suffix": "i", "maiden": "Puig", "initials": "J. D.", "capitalized_force": "Jane Doe (Puig) I"} -{"name": "Jane Doe nee Puig i III", "given": "Jane", "family": "Doe", "suffix": "i III", "maiden": "Puig", "initials": "J. D.", "capitalized_force": "Jane Doe (Puig) I III"} +{"name": "Jane Doe nee Puig i", "given": "Jane", "family": "Doe", "suffix": "i", "maiden": "Puig", "initials": "J. D.", "capitalized_force": "Jane Doe (Puig) I", "generation": "i"} +{"name": "Jane Doe nee Puig i III", "given": "Jane", "family": "Doe", "suffix": "i III", "maiden": "Puig", "initials": "J. D.", "capitalized_force": "Jane Doe (Puig) I III", "generation": "i III"} {"name": "Jane Doe nee Puig i Soler", "given": "Jane", "family": "Doe", "maiden": "Puig i Soler", "initials": "J. D."} -{"name": "Jane Doe nee Smith 2", "given": "Jane", "family": "Doe", "suffix": "2", "maiden": "Smith", "initials": "J. D."} +{"name": "Jane Doe nee Smith 2", "given": "Jane", "family": "Doe", "suffix": "2", "maiden": "Smith", "initials": "J. D.", "generation": "2"} {"name": "Jane Doe nee Smith B.K.", "given": "Jane", "family": "Doe", "maiden": "Smith B.K.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)"], "initials": "J. D."} {"name": "Jane Doe nee Smith DO DO", "given": "Jane", "family": "Doe", "suffix": "DO DO", "maiden": "Smith", "initials": "J. D."} {"name": "Jane Doe nee Smith MA", "given": "Jane", "family": "Doe", "suffix": "MA", "maiden": "Smith", "initials": "J. D."} @@ -1518,18 +1518,18 @@ {"name": "Jane Doe nee Smith PhD Smith", "given": "Jane", "family": "Doe", "suffix": "PhD Smith", "maiden": "Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as maiden (position)"], "initials": "J. D."} {"name": "Jane Doe nee Smith Prof.", "title": "Prof.", "given": "Jane", "family": "Doe", "maiden": "Smith", "initials": "J. D."} {"name": "Jane Doe nee Smith Prof. MA", "title": "Prof.", "given": "Jane", "family": "Doe", "suffix": "MA", "maiden": "Smith", "initials": "J. D."} -{"name": "Jane Doe nee Smith V", "given": "Jane", "family": "Doe", "suffix": "V", "maiden": "Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as maiden (shape)"], "initials": "J. D."} +{"name": "Jane Doe nee Smith V", "given": "Jane", "family": "Doe", "suffix": "V", "maiden": "Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as maiden (shape)"], "initials": "J. D.", "generation": "V"} {"name": "Jane Doe nee Smith V MA", "given": "Jane", "family": "Doe", "suffix": "MA", "maiden": "Smith V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "J. D."} {"name": "Jane Doe nee Smith V PhD", "given": "Jane", "family": "Doe", "suffix": "PhD", "maiden": "Smith V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "J. D."} -{"name": "Jane Doe nee Smith V Prof.", "title": "Prof.", "given": "Jane", "family": "Doe", "suffix": "V", "maiden": "Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as maiden (shape)"], "initials": "J. D."} -{"name": "Jane Doe nee Smith VI PhD", "given": "Jane", "family": "Doe", "suffix": "VI PhD", "maiden": "Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as maiden (position)"], "initials": "J. D."} -{"name": "Jane Doe nee Smith VI Prof.", "title": "Prof.", "given": "Jane", "family": "Doe", "suffix": "VI", "maiden": "Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as maiden (position)"], "initials": "J. D."} +{"name": "Jane Doe nee Smith V Prof.", "title": "Prof.", "given": "Jane", "family": "Doe", "suffix": "V", "maiden": "Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as maiden (shape)"], "initials": "J. D.", "generation": "V"} +{"name": "Jane Doe nee Smith VI PhD", "given": "Jane", "family": "Doe", "suffix": "VI PhD", "maiden": "Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as maiden (position)"], "initials": "J. D.", "generation": "VI", "credentials": "PhD"} +{"name": "Jane Doe nee Smith VI Prof.", "title": "Prof.", "given": "Jane", "family": "Doe", "suffix": "VI", "maiden": "Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as maiden (position)"], "initials": "J. D.", "generation": "VI"} {"name": "Jane Doe nee Smith X.Y.Z.", "given": "Jane", "family": "Doe", "suffix": "X.Y.Z.", "maiden": "Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as maiden (position)"], "initials": "J. D."} {"name": "Jane Doe nee Smith XYZ", "given": "Jane", "family": "Doe", "maiden": "Smith XYZ", "initials": "J. D.", "capitalized_force": "Jane Doe (Smith Xyz)"} {"name": "Jane Doe nee Smith do", "given": "Jane", "family": "Doe", "suffix": "do", "maiden": "Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as maiden (declared)"], "initials": "J. D.", "capitalized_force": "Jane Doe (Smith) DO"} {"name": "Jane Doe nee Smith ma jd", "given": "Jane", "family": "Doe", "suffix": "ma jd", "maiden": "Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as maiden (declared)", "SUFFIX_OR_NAME: name as maiden (declared)"], "initials": "J. D.", "capitalized_force": "Jane Doe (Smith) MA JD"} {"name": "Jane Doe nee Yo-Yo Ma", "given": "Jane", "family": "Doe", "maiden": "Yo-Yo Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. D."} -{"name": "Jane Doe née Jones Smith V", "given": "Jane", "family": "Doe", "suffix": "V", "maiden": "Jones Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as maiden (shape)"], "initials": "J. D."} +{"name": "Jane Doe née Jones Smith V", "given": "Jane", "family": "Doe", "suffix": "V", "maiden": "Jones Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as maiden (shape)"], "initials": "J. D.", "generation": "V"} {"name": "Jane Doe, MS LAc", "given": "Jane", "family": "Doe", "suffix": "MS LAc", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. D.", "capitalized_force": "Jane Doe, MS LAC"} {"name": "Jane Mac Beth", "given": "Jane", "family": "Mac Beth", "initials": "J. B.", "capitalized_force": "Jane mac Beth"} {"name": "Jane Smith", "given": "Jane", "family": "Smith", "initials": "J. S."} @@ -1537,7 +1537,7 @@ {"name": "Jane Smith (Nee)", "given": "Jane", "family": "Smith", "nickname": "Nee", "initials": "J. S."} {"name": "Jane Smith (Nee) (Jones)", "given": "Jane", "family": "Smith", "nickname": "Nee Jones", "initials": "J. S."} {"name": "Jane Smith (née Jones)", "given": "Jane", "family": "Smith", "maiden": "Jones", "initials": "J. S."} -{"name": "Jane Smith (née Jr.)", "given": "Jane", "middle": "Smith", "family": "née", "suffix": "Jr.", "initials": "J. S. n.", "capitalized_force": "Jane Smith Née Jr."} +{"name": "Jane Smith (née Jr.)", "given": "Jane", "middle": "Smith", "family": "née", "suffix": "Jr.", "initials": "J. S. n.", "capitalized_force": "Jane Smith Née Jr.", "generation": "Jr."} {"name": "Jane Smith (née PhD)", "given": "Jane", "family": "Smith", "maiden": "PhD", "initials": "J. S."} {"name": "Jane Smith (née V)", "given": "Jane", "family": "Smith", "maiden": "V", "initials": "J. S."} {"name": "Jane Smith (née)", "given": "Jane", "family": "Smith", "nickname": "née", "initials": "J. S.", "capitalized_force": "Jane \"Née\" Smith"} @@ -1551,7 +1551,7 @@ {"name": "Jane Smith, née Jones", "given": "née", "middle": "Jones", "family": "Jane Smith", "initials": "n. J. J. S.", "capitalized_force": "Née Jones Jane Smith"} {"name": "Jane and née Jones", "given": "Jane and née", "family": "Jones", "initials": "J. n. J.", "capitalized_force": "Jane and Née Jones"} {"name": "Jane de la née Jones", "given": "Jane", "family": "de la", "maiden": "Jones", "initials": "J. d. l.", "capitalized_force": "Jane De La (Jones)"} -{"name": "Jane nee Smith Jr., AD", "given": "AD", "family": "Jane", "suffix": "Jr.", "maiden": "Smith", "initials": "A. J.", "capitalized_force": "Ad Jane (Smith) Jr."} +{"name": "Jane nee Smith Jr., AD", "given": "AD", "family": "Jane", "suffix": "Jr.", "maiden": "Smith", "initials": "A. J.", "capitalized_force": "Ad Jane (Smith) Jr.", "generation": "Jr."} {"name": "Jane née Jones Smith", "family": "Jane", "maiden": "Jones Smith", "initials": "J."} {"name": "Jane née Jr y Jones", "given": "Jane", "middle": "née", "family": "Jr y Jones", "initials": "J. n. J. J.", "capitalized_force": "Jane Née Jr y Jones"} {"name": "Jane née and Jones Smith", "family": "Jane", "maiden": "and Jones Smith", "initials": "J."} @@ -1559,7 +1559,7 @@ {"name": "Jane van der Berg nee Smith Prof.", "title": "Prof.", "given": "Jane", "family": "van der Berg", "maiden": "Smith", "initials": "J. B."} {"name": "Jane van der Berg née", "given": "Jane", "family": "van der Berg née", "initials": "J. B. n.", "capitalized_force": "Jane van der Berg Née"} {"name": "Jane van der Berg née Jones", "given": "Jane", "family": "van der Berg", "maiden": "Jones", "initials": "J. B."} -{"name": "Jane van der Berg née Jr Jones", "given": "Jane", "family": "van der Berg née", "suffix": "Jr Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. B. n.", "capitalized_force": "Jane van der Berg Née Jr Jones"} +{"name": "Jane van der Berg née Jr Jones", "given": "Jane", "family": "van der Berg née", "suffix": "Jr Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. B. n.", "capitalized_force": "Jane van der Berg Née Jr Jones", "generation": "Jr", "credentials": "Jones"} {"name": "Jane van der Berg née PhD", "given": "Jane", "family": "van der Berg née", "suffix": "PhD", "initials": "J. B. n.", "capitalized_force": "Jane van der Berg Née PhD"} {"name": "Jane van der Berg née y Jones", "given": "Jane", "family": "van der Berg", "maiden": "y Jones", "initials": "J. B."} {"name": "Jane van der Berg 旧姓 Jones", "given": "Jane", "family": "van der Berg", "maiden": "Jones", "initials": "J. B."} @@ -1616,12 +1616,12 @@ {"name": "Jodocus van Winghe", "given": "Jodocus", "family": "van Winghe", "initials": "J. W."} {"name": "Joe Dentist D.D.S.", "given": "Joe", "family": "Dentist", "suffix": "D.D.S.", "initials": "J. D."} {"name": "Joe E. Smith", "given": "Joe", "middle": "E.", "family": "Smith", "initials": "J. E. S."} -{"name": "Joe Franklin Jr", "given": "Joe", "family": "Franklin", "suffix": "Jr", "initials": "J. F."} +{"name": "Joe Franklin Jr", "given": "Joe", "family": "Franklin", "suffix": "Jr", "initials": "J. F.", "generation": "Jr"} {"name": "Joe Smith", "given": "Joe", "family": "Smith", "initials": "J. S."} {"name": "Johan Harald Wallin", "given": "Johan", "middle": "Harald", "family": "Wallin", "initials": "J. H. W."} {"name": "Johann Adolf von Krosigk", "given": "Johann", "middle": "Adolf", "family": "von Krosigk", "initials": "J. A. K."} {"name": "Johann Friedrich d'Orville", "given": "Johann", "middle": "Friedrich", "family": "d'Orville", "initials": "J. F. d.", "capitalized_force": "Johann Friedrich D'Orville"} -{"name": "Johann II.", "given": "Johann", "suffix": "II.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "J."} +{"name": "Johann II.", "given": "Johann", "suffix": "II.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "J.", "generation": "II."} {"name": "Johann Klingenberg", "given": "Johann", "family": "Klingenberg", "initials": "J. K."} {"name": "Johann von Dumreicher", "given": "Johann", "family": "von Dumreicher", "initials": "J. D."} {"name": "Johann von Goëß", "given": "Johann", "family": "von Goëß", "initials": "J. G."} @@ -1636,49 +1636,49 @@ {"name": "John (Jack) Smith", "given": "John", "family": "Smith", "nickname": "Jack", "initials": "J. S."} {"name": "John . Smith", "given": "John", "middle": ".", "family": "Smith", "initials": "J. .. S."} {"name": "John A. Doe", "given": "John", "middle": "A.", "family": "Doe", "initials": "J. A. D."} -{"name": "John A. Doe III", "given": "John", "middle": "A.", "family": "Doe", "suffix": "III", "initials": "J. A. D."} -{"name": "John A. Doe, Jr", "given": "John", "middle": "A.", "family": "Doe", "suffix": "Jr", "initials": "J. A. D."} -{"name": "John A. Doe, Jr.", "given": "John", "middle": "A.", "family": "Doe", "suffix": "Jr.", "initials": "J. A. D."} +{"name": "John A. Doe III", "given": "John", "middle": "A.", "family": "Doe", "suffix": "III", "initials": "J. A. D.", "generation": "III"} +{"name": "John A. Doe, Jr", "given": "John", "middle": "A.", "family": "Doe", "suffix": "Jr", "initials": "J. A. D.", "generation": "Jr"} +{"name": "John A. Doe, Jr.", "given": "John", "middle": "A.", "family": "Doe", "suffix": "Jr.", "initials": "J. A. D.", "generation": "Jr."} {"name": "John A. Kenneth Doe", "given": "John", "middle": "A. Kenneth", "family": "Doe", "initials": "J. A. K. D."} -{"name": "John A. Kenneth Doe III", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "III", "initials": "J. A. K. D."} -{"name": "John A. Kenneth Doe, Jr.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "Jr.", "initials": "J. A. K. D."} +{"name": "John A. Kenneth Doe III", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "III", "initials": "J. A. K. D.", "generation": "III"} +{"name": "John A. Kenneth Doe, Jr.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "Jr.", "initials": "J. A. K. D.", "generation": "Jr."} {"name": "John An Smith", "given": "John", "middle": "An", "family": "Smith", "initials": "J. A. S."} {"name": "John Chinedu Amadi", "given": "John", "middle": "Chinedu", "family": "Amadi", "initials": "J. C. A."} {"name": "John Dean Smith", "given": "John", "middle": "Dean", "family": "Smith", "initials": "J. D. S."} {"name": "John Doctor Smith", "given": "John", "middle": "Doctor", "family": "Smith", "initials": "J. D. S."} {"name": "John Doe", "given": "John", "family": "Doe", "initials": "J. D."} -{"name": "John Doe III", "given": "John", "family": "Doe", "suffix": "III", "initials": "J. D."} +{"name": "John Doe III", "given": "John", "family": "Doe", "suffix": "III", "initials": "J. D.", "generation": "III"} {"name": "John Doe JD.CPA", "given": "John", "family": "Doe", "suffix": "JD.CPA", "initials": "J. D.", "capitalized_force": "John Doe Jd.Cpa"} {"name": "John Doe MD PhD", "given": "John", "family": "Doe", "suffix": "MD PhD", "initials": "J. D."} {"name": "John Doe Msc.Ed.", "given": "John", "family": "Doe", "suffix": "Msc.Ed.", "initials": "J. D."} {"name": "John Doe do", "given": "John", "family": "Doe", "suffix": "do", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "J. D.", "capitalized_force": "John Doe DO"} -{"name": "John Doe jr., MD", "given": "John", "family": "Doe", "suffix": "jr., MD", "initials": "J. D.", "capitalized_force": "John Doe Jr., MD"} +{"name": "John Doe jr., MD", "given": "John", "family": "Doe", "suffix": "jr., MD", "initials": "J. D.", "capitalized_force": "John Doe Jr., MD", "generation": "jr.", "credentials": "MD"} {"name": "John Doe, CLU, CFP, LUTC", "given": "John", "family": "Doe", "suffix": "CLU, CFP, LUTC", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. D.", "capitalized_force": "John Doe, CLU, CFP, Lutc"} -{"name": "John Doe, Jr.", "given": "John", "family": "Doe", "suffix": "Jr.", "initials": "J. D."} -{"name": "John Doe, Jr.,,", "given": "John", "family": "Doe", "suffix": "Jr.", "initials": "J. D."} +{"name": "John Doe, Jr.", "given": "John", "family": "Doe", "suffix": "Jr.", "initials": "J. D.", "generation": "Jr."} +{"name": "John Doe, Jr.,,", "given": "John", "family": "Doe", "suffix": "Jr.", "initials": "J. D.", "generation": "Jr."} {"name": "John Doe, MD - PhD - FACS", "given": "John", "family": "Doe", "suffix": "MD, PhD, FACS", "initials": "J. D."} {"name": "John Doe, MD - PhD, FACS", "given": "John", "family": "Doe", "suffix": "MD, PhD, FACS", "initials": "J. D."} {"name": "John Doe, MD, PhD", "given": "John", "family": "Doe", "suffix": "MD, PhD", "initials": "J. D."} {"name": "John Doe, MD-PhD-", "given": "MD-PhD-", "family": "John Doe", "initials": "M. J. D.", "capitalized_force": "Md-PhD- John Doe"} {"name": "John Doe, Msc.Ed.", "given": "John", "family": "Doe", "suffix": "Msc.Ed.", "initials": "J. D."} -{"name": "John Doe, Phd, Jr", "given": "John", "family": "Doe", "suffix": "Phd, Jr", "initials": "J. D.", "capitalized_force": "John Doe, PhD, Jr"} +{"name": "John Doe, Phd, Jr", "given": "John", "family": "Doe", "suffix": "Phd, Jr", "initials": "J. D.", "capitalized_force": "John Doe, PhD, Jr", "generation": "Jr", "credentials": "Phd"} {"name": "John E Smith", "given": "John", "middle": "E", "family": "Smith", "initials": "J. E. S."} -{"name": "John Edgar Casey Williams III", "given": "John", "middle": "Edgar Casey", "family": "Williams", "suffix": "III", "initials": "J. E. C. W."} +{"name": "John Edgar Casey Williams III", "given": "John", "middle": "Edgar Casey", "family": "Williams", "suffix": "III", "initials": "J. E. C. W.", "generation": "III"} {"name": "John F Kennedy", "given": "John", "middle": "F", "family": "Kennedy", "initials": "J. F. K."} {"name": "John Hamish Watson", "given": "John", "middle": "Hamish", "family": "Watson", "initials": "J. H. W."} {"name": "John Hámish Watson", "given": "John", "middle": "Hámish", "family": "Watson", "initials": "J. H. W."} {"name": "John I Smith", "given": "John", "middle": "I", "family": "Smith", "initials": "J. I. S."} -{"name": "John III", "given": "John", "suffix": "III", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "J."} -{"name": "John III, Dr.", "title": "Dr.", "family": "John", "suffix": "III", "initials": "J."} -{"name": "John III, Sir", "title": "Sir", "given": "John", "suffix": "III", "initials": "J."} -{"name": "John Ingram V", "given": "John", "family": "Ingram", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. I."} +{"name": "John III", "given": "John", "suffix": "III", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "J.", "generation": "III"} +{"name": "John III, Dr.", "title": "Dr.", "family": "John", "suffix": "III", "initials": "J.", "generation": "III"} +{"name": "John III, Sir", "title": "Sir", "given": "John", "suffix": "III", "initials": "J.", "generation": "III"} +{"name": "John Ingram V", "given": "John", "family": "Ingram", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. I.", "generation": "V"} {"name": "John J VI, AD", "given": "AD", "family": "John J VI", "initials": "A. J. J. V.", "capitalized_force": "Ad John J Vi"} -{"name": "John J. III", "given": "John", "family": "J.", "suffix": "III", "initials": "J. J."} +{"name": "John J. III", "given": "John", "family": "J.", "suffix": "III", "initials": "J. J.", "generation": "III"} {"name": "John J. V", "given": "John", "middle": "J.", "family": "V", "initials": "J. J. V."} {"name": "John J. VI", "given": "John", "middle": "J.", "family": "VI", "initials": "J. J. V.", "capitalized_force": "John J. Vi"} {"name": "John Jack Andrew Kennedy", "given": "John", "middle": "Jack Andrew", "family": "Kennedy", "initials": "J. J. A. K."} {"name": "John Jones (Google Docs)", "given": "John", "family": "Jones", "nickname": "Google Docs", "initials": "J. J."} -{"name": "John Jones (Google Docs), Jr. (Unknown)", "given": "John", "family": "Jones", "suffix": "Jr.", "nickname": "Google Docs Unknown", "initials": "J. J."} +{"name": "John Jones (Google Docs), Jr. (Unknown)", "given": "John", "family": "Jones", "suffix": "Jr.", "nickname": "Google Docs Unknown", "initials": "J. J.", "generation": "Jr."} {"name": "John Jones (Unknown)", "given": "John", "family": "Jones", "nickname": "Unknown", "initials": "J. J."} {"name": "John King", "given": "John", "family": "King", "initials": "J. K."} {"name": "John Leed", "given": "John", "family": "Leed", "initials": "J. L."} @@ -1691,7 +1691,7 @@ {"name": "John Pharm D", "given": "John", "middle": "Pharm", "family": "D", "initials": "J. P. D."} {"name": "John Prof. MA", "title": "Prof.", "family": "John", "suffix": "MA", "initials": "J."} {"name": "John Q. Smith", "given": "John", "middle": "Q.", "family": "Smith", "initials": "J. Q. S."} -{"name": "John Quincy Smith i", "given": "John", "middle": "Quincy", "family": "Smith", "suffix": "i", "initials": "J. Q. S.", "capitalized_force": "John Quincy Smith I"} +{"name": "John Quincy Smith i", "given": "John", "middle": "Quincy", "family": "Smith", "suffix": "i", "initials": "J. Q. S.", "capitalized_force": "John Quincy Smith I", "generation": "i"} {"name": "John Smith", "given": "John", "family": "Smith", "initials": "J. S."} {"name": "John Smith (Ed)", "given": "John", "family": "Smith", "nickname": "Ed", "ambiguities": ["SUFFIX_OR_NICKNAME"], "alternatives": ["SUFFIX_OR_NICKNAME: credential as suffix (vocabulary)"], "initials": "J. S."} {"name": "John Smith (M.A)", "given": "John", "family": "Smith", "suffix": "M.A", "initials": "J. S."} @@ -1708,7 +1708,7 @@ {"name": "John Smith (MBA PhD.)", "given": "John", "family": "Smith", "suffix": "MBA PhD.", "initials": "J. S."} {"name": "John Smith (Ma)", "given": "John", "family": "Smith", "nickname": "Ma", "ambiguities": ["SUFFIX_OR_NICKNAME"], "alternatives": ["SUFFIX_OR_NICKNAME: credential as suffix (vocabulary)"], "initials": "J. S."} {"name": "John Smith (PhD MBA)", "given": "John", "family": "Smith", "nickname": "PhD MBA", "initials": "J. S.", "capitalized_force": "John \"PhD Mba\" Smith"} -{"name": "John Smith ,Jr.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S."} +{"name": "John Smith ,Jr.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} {"name": "John Smith - Jones", "given": "John", "middle": "Smith -", "family": "Jones", "initials": "J. S. -. J."} {"name": "John Smith 1.4", "given": "John", "middle": "Smith", "family": "1.4", "initials": "J. S. 1."} {"name": "John Smith B.Tech.", "given": "John", "family": "Smith", "suffix": "B.Tech.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S.", "capitalized_force": "John Smith B.TECH."} @@ -1720,26 +1720,27 @@ {"name": "John Smith Esq", "given": "John", "family": "Smith", "suffix": "Esq", "initials": "J. S."} {"name": "John Smith Esq.", "given": "John", "family": "Smith", "suffix": "Esq.", "initials": "J. S."} {"name": "John Smith Esquire", "given": "John", "family": "Smith", "suffix": "Esquire", "initials": "J. S."} -{"name": "John Smith I", "given": "John", "family": "Smith", "suffix": "I", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. S."} -{"name": "John Smith II, AD", "given": "John", "family": "Smith", "suffix": "II, AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S."} -{"name": "John Smith III", "given": "John", "family": "Smith", "suffix": "III", "initials": "J. S."} -{"name": "John Smith III MD", "given": "John", "family": "Smith", "suffix": "III MD", "initials": "J. S."} -{"name": "John Smith Iii", "given": "John", "family": "Smith", "suffix": "Iii", "initials": "J. S.", "capitalized_force": "John Smith III"} +{"name": "John Smith I", "given": "John", "family": "Smith", "suffix": "I", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. S.", "generation": "I"} +{"name": "John Smith II, AD", "given": "John", "family": "Smith", "suffix": "II, AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "generation": "II", "credentials": "AD"} +{"name": "John Smith III", "given": "John", "family": "Smith", "suffix": "III", "initials": "J. S.", "generation": "III"} +{"name": "John Smith III MD", "given": "John", "family": "Smith", "suffix": "III MD", "initials": "J. S.", "generation": "III", "credentials": "MD"} +{"name": "John Smith Iii", "given": "John", "family": "Smith", "suffix": "Iii", "initials": "J. S.", "capitalized_force": "John Smith III", "generation": "Iii"} {"name": "John Smith J. R.", "given": "John", "middle": "Smith J.", "family": "R.", "initials": "J. S. J. R."} {"name": "John Smith J.u.n.i.o.r.", "given": "John", "family": "Smith", "suffix": "J.u.n.i.o.r.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S.", "capitalized_force": "John Smith J.U.N.I.O.R."} -{"name": "John Smith Jr", "given": "John", "family": "Smith", "suffix": "Jr", "initials": "J. S."} -{"name": "John Smith Jr.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S."} -{"name": "John Smith Jr. Prof.", "title": "Prof.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S."} -{"name": "John Smith Jr., AD RA", "given": "John", "family": "Smith", "suffix": "Jr., AD RA", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S."} -{"name": "John Smith Jr., AD Sr. and Mr.", "title": "Sr. and Mr.", "given": "John", "family": "Smith", "suffix": "Jr., AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S."} -{"name": "John Smith Jr., J.", "given": "J.", "family": "John Smith", "suffix": "Jr.", "initials": "J. J. S."} -{"name": "John Smith Jr., M.J.", "given": "M.J.", "family": "John Smith", "suffix": "Jr.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)"], "initials": "M. J. S."} -{"name": "John Smith Jr., MBChB PhD", "given": "John", "family": "Smith", "suffix": "Jr., MBChB PhD", "initials": "J. S."} -{"name": "John Smith Jr., MJ", "given": "John", "family": "Smith", "suffix": "Jr., MJ", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S."} -{"name": "John Smith Jr., Mr. and Mrs. AD", "title": "Mr. and Mrs.", "given": "John", "family": "Smith", "suffix": "Jr., AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S."} -{"name": "John Smith Jr., PhD", "given": "John", "family": "Smith", "suffix": "Jr., PhD", "initials": "J. S."} -{"name": "John Smith Jr., Sir AD", "title": "Sir", "given": "John", "family": "Smith", "suffix": "Jr., AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S."} -{"name": "John Smith Jr., þingmaður", "given": "John", "family": "Smith", "suffix": "Jr., þingmaður", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "capitalized_force": "John Smith Jr., Þingmaður"} +{"name": "John Smith Jr", "given": "John", "family": "Smith", "suffix": "Jr", "initials": "J. S.", "generation": "Jr"} +{"name": "John Smith Jr.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} +{"name": "John Smith Jr. III PhD", "given": "John", "family": "Smith", "suffix": "Jr. III PhD", "initials": "J. S.", "generation": "Jr. III", "credentials": "PhD"} +{"name": "John Smith Jr. Prof.", "title": "Prof.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} +{"name": "John Smith Jr., AD RA", "given": "John", "family": "Smith", "suffix": "Jr., AD RA", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "generation": "Jr.", "credentials": "AD RA"} +{"name": "John Smith Jr., AD Sr. and Mr.", "title": "Sr. and Mr.", "given": "John", "family": "Smith", "suffix": "Jr., AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "generation": "Jr.", "credentials": "AD"} +{"name": "John Smith Jr., J.", "given": "J.", "family": "John Smith", "suffix": "Jr.", "initials": "J. J. S.", "generation": "Jr."} +{"name": "John Smith Jr., M.J.", "given": "M.J.", "family": "John Smith", "suffix": "Jr.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)"], "initials": "M. J. S.", "generation": "Jr."} +{"name": "John Smith Jr., MBChB PhD", "given": "John", "family": "Smith", "suffix": "Jr., MBChB PhD", "initials": "J. S.", "generation": "Jr.", "credentials": "MBChB PhD"} +{"name": "John Smith Jr., MJ", "given": "John", "family": "Smith", "suffix": "Jr., MJ", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "generation": "Jr.", "credentials": "MJ"} +{"name": "John Smith Jr., Mr. and Mrs. AD", "title": "Mr. and Mrs.", "given": "John", "family": "Smith", "suffix": "Jr., AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "generation": "Jr.", "credentials": "AD"} +{"name": "John Smith Jr., PhD", "given": "John", "family": "Smith", "suffix": "Jr., PhD", "initials": "J. S.", "generation": "Jr.", "credentials": "PhD"} +{"name": "John Smith Jr., Sir AD", "title": "Sir", "given": "John", "family": "Smith", "suffix": "Jr., AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "generation": "Jr.", "credentials": "AD"} +{"name": "John Smith Jr., þingmaður", "given": "John", "family": "Smith", "suffix": "Jr., þingmaður", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "capitalized_force": "John Smith Jr., Þingmaður", "generation": "Jr.", "credentials": "þingmaður"} {"name": "John Smith K.C.", "given": "John", "middle": "Smith", "family": "K.C.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)"], "initials": "J. S. K."} {"name": "John Smith M. D.", "given": "John", "middle": "Smith M.", "family": "D.", "initials": "J. S. M. D."} {"name": "John Smith M.A.", "given": "John", "family": "Smith", "suffix": "M.A.", "initials": "J. S."} @@ -1756,12 +1757,13 @@ {"name": "John Smith Ma", "given": "John", "middle": "Smith", "family": "Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. S. M."} {"name": "John Smith Ma Jones", "given": "John", "middle": "Smith Ma", "family": "Jones", "initials": "J. S. M. J."} {"name": "John Smith Ma.", "given": "John", "middle": "Smith", "family": "Ma.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. S. M."} -{"name": "John Smith Mc V", "given": "John", "family": "Smith", "suffix": "Mc V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. S.", "capitalized_force": "John Smith MC V"} +{"name": "John Smith Mc V", "given": "John", "family": "Smith", "suffix": "Mc V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. S.", "capitalized_force": "John Smith MC V", "generation": "V", "credentials": "Mc"} {"name": "John Smith Mr.", "title": "Mr.", "given": "John", "family": "Smith", "initials": "J. S."} {"name": "John Smith Msc.Ed.", "given": "John", "family": "Smith", "suffix": "Msc.Ed.", "initials": "J. S."} {"name": "John Smith Ph.", "given": "John", "middle": "Smith", "family": "Ph.", "initials": "J. S. P."} {"name": "John Smith Ph. D.", "given": "John", "family": "Smith", "suffix": "Ph. D.", "initials": "J. S."} {"name": "John Smith Ph. D. Jones", "given": "John", "family": "Smith", "suffix": "Ph. D. Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S."} +{"name": "John Smith Ph. D. Jr.", "given": "John", "family": "Smith", "suffix": "Ph. D. Jr.", "initials": "J. S.", "generation": "Jr.", "credentials": "Ph. D."} {"name": "John Smith PhD", "given": "John", "family": "Smith", "suffix": "PhD", "initials": "J. S."} {"name": "John Smith PhD (MA)", "given": "John", "family": "Smith", "suffix": "PhD MA", "initials": "J. S."} {"name": "John Smith PhD (Ma)", "given": "John", "family": "Smith", "suffix": "PhD", "nickname": "Ma", "ambiguities": ["SUFFIX_OR_NICKNAME"], "alternatives": ["SUFFIX_OR_NICKNAME: credential as suffix (vocabulary)"], "initials": "J. S."} @@ -1776,36 +1778,36 @@ {"name": "John Smith Pharm. D.", "given": "John", "family": "Smith", "suffix": "Pharm. D.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S."} {"name": "John Smith Prof.", "title": "Prof.", "given": "John", "family": "Smith", "initials": "J. S."} {"name": "John Smith Prof. Dr.", "title": "Prof. Dr.", "given": "John", "family": "Smith", "initials": "J. S."} -{"name": "John Smith Prof. Jr.", "title": "Prof.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S."} +{"name": "John Smith Prof. Jr.", "title": "Prof.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} {"name": "John Smith Psy. D.", "given": "John", "family": "Smith", "suffix": "Psy. D.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S."} {"name": "John Smith Q.W.E.R.T.", "given": "John", "family": "Smith", "suffix": "Q.W.E.R.T.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S."} {"name": "John Smith R.A.I.", "given": "John", "family": "Smith", "suffix": "R.A.I.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S."} {"name": "John Smith RAI", "given": "John", "middle": "Smith", "family": "RAI", "initials": "J. S. R.", "capitalized_force": "John Smith Rai"} {"name": "John Smith Rev.", "title": "Rev.", "given": "John", "family": "Smith", "initials": "J. S."} {"name": "John Smith Sir", "given": "John", "middle": "Smith", "family": "Sir", "initials": "J. S. S."} -{"name": "John Smith V", "given": "John", "family": "Smith", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. S."} +{"name": "John Smith V", "given": "John", "family": "Smith", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. S.", "generation": "V"} {"name": "John Smith V Ph. D.", "given": "John", "middle": "Smith", "family": "V", "suffix": "Ph. D.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "J. S. V."} {"name": "John Smith V PhD", "given": "John", "middle": "Smith", "family": "V", "suffix": "PhD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "J. S. V."} {"name": "John Smith V Pharm D", "given": "John", "middle": "Smith", "family": "V", "suffix": "Pharm D", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)", "SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S. V."} -{"name": "John Smith V, AD", "given": "John", "family": "Smith", "suffix": "V, AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)", "SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. S."} -{"name": "John Smith V, M.J.", "given": "M.J.", "family": "John Smith", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)", "SUFFIX_OR_NAME: initial as family (shape)"], "initials": "M. J. S."} +{"name": "John Smith V, AD", "given": "John", "family": "Smith", "suffix": "V, AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)", "SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. S.", "generation": "V", "credentials": "AD"} +{"name": "John Smith V, M.J.", "given": "M.J.", "family": "John Smith", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)", "SUFFIX_OR_NAME: initial as family (shape)"], "initials": "M. J. S.", "generation": "V"} {"name": "John Smith V.", "given": "John", "middle": "Smith", "family": "V.", "initials": "J. S. V."} -{"name": "John Smith VI", "given": "John", "family": "Smith", "suffix": "VI", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S."} -{"name": "John Smith VI Jones", "given": "John", "family": "Smith", "suffix": "VI Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)", "SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S."} -{"name": "John Smith VI MD", "given": "John", "family": "Smith", "suffix": "VI MD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S."} -{"name": "John Smith VI, AD", "given": "John", "family": "Smith", "suffix": "VI, AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)", "SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S."} -{"name": "John Smith VI, M.J.", "given": "M.J.", "family": "John Smith", "suffix": "VI", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)", "SUFFIX_OR_NAME: name as family (position)"], "initials": "M. J. S."} +{"name": "John Smith VI", "given": "John", "family": "Smith", "suffix": "VI", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S.", "generation": "VI"} +{"name": "John Smith VI Jones", "given": "John", "family": "Smith", "suffix": "VI Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)", "SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S.", "generation": "VI", "credentials": "Jones"} +{"name": "John Smith VI MD", "given": "John", "family": "Smith", "suffix": "VI MD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S.", "generation": "VI", "credentials": "MD"} +{"name": "John Smith VI, AD", "given": "John", "family": "Smith", "suffix": "VI, AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)", "SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S.", "generation": "VI", "credentials": "AD"} +{"name": "John Smith VI, M.J.", "given": "M.J.", "family": "John Smith", "suffix": "VI", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)", "SUFFIX_OR_NAME: name as family (position)"], "initials": "M. J. S.", "generation": "VI"} {"name": "John Smith Vi", "given": "John", "middle": "Smith", "family": "Vi", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (shape)"], "initials": "J. S. V."} {"name": "John Smith Viii", "given": "John", "middle": "Smith", "family": "Viii", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (shape)"], "initials": "J. S. V."} {"name": "John Smith Wing.", "given": "John", "middle": "Smith", "family": "Wing.", "initials": "J. S. W."} -{"name": "John Smith Wing. Jr.", "title": "Wing.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S."} +{"name": "John Smith Wing. Jr.", "title": "Wing.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} {"name": "John Smith X.Y.Z.", "given": "John", "family": "Smith", "suffix": "X.Y.Z.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S."} {"name": "John Smith XI", "given": "John", "middle": "Smith", "family": "XI", "initials": "J. S. X.", "capitalized_force": "John Smith Xi"} {"name": "John Smith XI MD", "given": "John", "middle": "Smith", "family": "XI", "suffix": "MD", "initials": "J. S. X.", "capitalized_force": "John Smith Xi MD"} {"name": "John Smith XYZ", "given": "John", "middle": "Smith", "family": "XYZ", "initials": "J. S. X.", "capitalized_force": "John Smith Xyz"} {"name": "John Smith Xyz.", "given": "John", "middle": "Smith", "family": "Xyz.", "initials": "J. S. X."} {"name": "John Smith nee Jones R.A.I.", "given": "John", "family": "Smith", "suffix": "R.A.I.", "maiden": "Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as maiden (position)"], "initials": "J. S."} -{"name": "John Smith vi", "given": "John", "family": "Smith", "suffix": "vi", "initials": "J. S.", "capitalized_force": "John Smith VI"} +{"name": "John Smith vi", "given": "John", "family": "Smith", "suffix": "vi", "initials": "J. S.", "capitalized_force": "John Smith VI", "generation": "vi"} {"name": "John Smith «MA»", "given": "John", "family": "Smith", "suffix": "MA", "initials": "J. S."} {"name": "John Smith 「MA」", "given": "John", "family": "Smith", "suffix": "MA", "initials": "J. S."} {"name": "John Smith 博. 士.", "given": "John", "middle": "Smith 博.", "family": "士.", "initials": "J. S."} @@ -1824,14 +1826,14 @@ {"name": "John Smith, Ed", "given": "John", "family": "Smith", "suffix": "Ed", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (declared)"], "initials": "J. S.", "capitalized_force": "John Smith, ED"} {"name": "John Smith, Ed Ma", "given": "John", "family": "Smith", "suffix": "Ed Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (declared)"], "initials": "J. S.", "capitalized_force": "John Smith, ED MA"} {"name": "John Smith, Jones", "given": "Jones", "family": "John Smith", "initials": "J. J. S."} -{"name": "John Smith, Jr do", "given": "John", "family": "Smith", "suffix": "Jr do", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "capitalized_force": "John Smith, Jr DO"} -{"name": "John Smith, Jr vd", "given": "John", "family": "Smith", "suffix": "Jr vd", "initials": "J. S.", "capitalized_force": "John Smith, Jr VD"} -{"name": "John Smith, Jr.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S."} -{"name": "John Smith, Jr. Ph. D.", "given": "John", "family": "Smith", "suffix": "Jr. Ph. D.", "initials": "J. S."} -{"name": "John Smith, Jr., Dr., Prof.", "title": "Dr. Prof.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S."} -{"name": "John Smith, Jr., Lt.Gov.", "title": "Lt.Gov.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S."} -{"name": "John Smith, Jr., abdul Dr. Smith", "title": "Dr.", "given": "John", "family": "Smith", "suffix": "Jr., abdul Smith", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "capitalized_force": "Dr. John Smith, Jr., Abdul Smith"} -{"name": "John Smith, Jr., van der Berg Prof.", "title": "Prof.", "given": "John", "family": "Smith", "suffix": "Jr., van der Berg", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "capitalized_force": "Prof. John Smith, Jr., Van Der Berg"} +{"name": "John Smith, Jr do", "given": "John", "family": "Smith", "suffix": "Jr do", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "capitalized_force": "John Smith, Jr DO", "generation": "Jr", "credentials": "do"} +{"name": "John Smith, Jr vd", "given": "John", "family": "Smith", "suffix": "Jr vd", "initials": "J. S.", "capitalized_force": "John Smith, Jr VD", "generation": "Jr", "credentials": "vd"} +{"name": "John Smith, Jr.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} +{"name": "John Smith, Jr. Ph. D.", "given": "John", "family": "Smith", "suffix": "Jr. Ph. D.", "initials": "J. S.", "generation": "Jr.", "credentials": "Ph. D."} +{"name": "John Smith, Jr., Dr., Prof.", "title": "Dr. Prof.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} +{"name": "John Smith, Jr., Lt.Gov.", "title": "Lt.Gov.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} +{"name": "John Smith, Jr., abdul Dr. Smith", "title": "Dr.", "given": "John", "family": "Smith", "suffix": "Jr., abdul Smith", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "capitalized_force": "Dr. John Smith, Jr., Abdul Smith", "generation": "Jr.", "credentials": "abdul Smith"} +{"name": "John Smith, Jr., van der Berg Prof.", "title": "Prof.", "given": "John", "family": "Smith", "suffix": "Jr., van der Berg", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "capitalized_force": "Prof. John Smith, Jr., Van Der Berg", "generation": "Jr.", "credentials": "van der Berg"} {"name": "John Smith, LEED AP", "given": "John", "family": "Smith", "suffix": "LEED AP", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S."} {"name": "John Smith, M. D.", "given": "M.", "middle": "D.", "family": "John Smith", "initials": "M. D. J. S."} {"name": "John Smith, M.D./Ph.D.", "given": "John", "family": "Smith", "suffix": "M.D./Ph.D.", "initials": "J. S."} @@ -1851,7 +1853,7 @@ {"name": "John Smith, MD, Ms", "given": "John", "family": "Smith", "suffix": "MD, Ms", "initials": "J. S.", "capitalized_force": "John Smith, MD, MS"} {"name": "John Smith, MD, R.A.I.", "given": "John", "family": "Smith", "suffix": "MD, R.A.I.", "initials": "J. S."} {"name": "John Smith, MD, XYZ", "given": "John", "family": "Smith", "suffix": "MD, XYZ", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "capitalized_force": "John Smith, MD, Xyz"} -{"name": "John Smith, MD,, Jr.", "given": "John", "family": "Smith", "suffix": "MD, Jr.", "initials": "J. S."} +{"name": "John Smith, MD,, Jr.", "given": "John", "family": "Smith", "suffix": "MD, Jr.", "initials": "J. S.", "generation": "Jr.", "credentials": "MD"} {"name": "John Smith, MD- PhD", "given": "MD-", "family": "John Smith", "suffix": "PhD", "initials": "M. J. S.", "capitalized_force": "Md- John Smith PhD"} {"name": "John Smith, MD/ PhD", "given": "MD/", "family": "John Smith", "suffix": "PhD", "initials": "M. J. S.", "capitalized_force": "Md/ John Smith PhD"} {"name": "John Smith, MD/PhD", "given": "John", "family": "Smith", "suffix": "MD/PhD", "initials": "J. S."} @@ -1863,11 +1865,11 @@ {"name": "John Smith, Ma", "given": "John", "family": "Smith", "suffix": "Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (declared)"], "initials": "J. S.", "capitalized_force": "John Smith, MA"} {"name": "John Smith, Md-Rn", "given": "Md-Rn", "family": "John Smith", "initials": "M. J. S."} {"name": "John Smith, Mr.", "title": "Mr.", "given": "John", "family": "Smith", "initials": "J. S."} -{"name": "John Smith, Mr. Jr.", "title": "Mr.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S."} +{"name": "John Smith, Mr. Jr.", "title": "Mr.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} {"name": "John Smith, Mr. and Mrs.", "title": "Mr. and Mrs.", "given": "John", "family": "Smith", "initials": "J. S."} {"name": "John Smith, Ms Ma", "given": "John", "family": "Smith", "suffix": "Ms Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "capitalized_force": "John Smith, MS MA"} {"name": "John Smith, PU-PH", "given": "John", "family": "Smith", "suffix": "PU-PH", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S."} -{"name": "John Smith, PU/PH, Jr.", "given": "John", "family": "Smith", "suffix": "PU/PH, Jr.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S."} +{"name": "John Smith, PU/PH, Jr.", "given": "John", "family": "Smith", "suffix": "PU/PH, Jr.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "generation": "Jr.", "credentials": "PU/PH"} {"name": "John Smith, Ph. D.", "given": "John", "family": "Smith", "suffix": "Ph. D.", "initials": "J. S."} {"name": "John Smith, Ph. D. Jones", "given": "John", "family": "Smith", "suffix": "Ph. D. Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S."} {"name": "John Smith, Ph. D.; MD", "title": "Ph.", "given": "D.;", "family": "John Smith", "suffix": "MD", "initials": "D. J. S."} @@ -1879,6 +1881,7 @@ {"name": "John Smith, PhD Ma", "given": "John", "family": "Smith", "suffix": "PhD Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "capitalized_force": "John Smith, PhD MA"} {"name": "John Smith, PhD X.Y.", "given": "John", "family": "Smith", "suffix": "PhD X.Y.", "initials": "J. S."} {"name": "John Smith, PhD XYZ", "given": "John", "family": "Smith", "suffix": "PhD XYZ", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S."} +{"name": "John Smith, PhD and MD Jr.", "given": "John", "family": "Smith", "suffix": "PhD and MD Jr.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "generation": "Jr.", "credentials": "PhD and MD"} {"name": "John Smith, PhD vd DO", "given": "John", "family": "Smith", "suffix": "PhD vd DO", "initials": "J. S.", "capitalized_force": "John Smith, PhD VD DO"} {"name": "John Smith, PhD-Md", "given": "John", "family": "Smith", "suffix": "PhD-Md", "initials": "J. S.", "capitalized_force": "John Smith, PhD-MD"} {"name": "John Smith, Pharm D", "given": "John", "family": "Smith", "suffix": "Pharm D", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S."} @@ -1887,9 +1890,9 @@ {"name": "John Smith, Pu-Ph", "given": "Pu-Ph", "family": "John Smith", "initials": "P. J. S."} {"name": "John Smith, RA Jones", "title": "RA", "given": "Jones", "family": "John Smith", "initials": "J. J. S.", "capitalized_force": "Ra Jones John Smith"} {"name": "John Smith, RAI", "given": "John", "family": "Smith", "suffix": "RAI", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S."} -{"name": "John Smith, V Jr.", "given": "John", "family": "Smith", "suffix": "V Jr.", "initials": "J. S."} -{"name": "John Smith, V MD", "given": "John", "family": "Smith", "suffix": "V MD", "initials": "J. S."} -{"name": "John Smith, V.", "given": "John", "family": "Smith", "suffix": "V.", "initials": "J. S."} +{"name": "John Smith, V Jr.", "given": "John", "family": "Smith", "suffix": "V Jr.", "initials": "J. S.", "generation": "V Jr."} +{"name": "John Smith, V MD", "given": "John", "family": "Smith", "suffix": "V MD", "initials": "J. S.", "generation": "V", "credentials": "MD"} +{"name": "John Smith, V.", "given": "John", "family": "Smith", "suffix": "V.", "initials": "J. S.", "generation": "V."} {"name": "John Smith, V; MD", "given": "John", "family": "Smith", "suffix": "V; MD", "initials": "J. S."} {"name": "John Smith, Vice", "title": "Vice", "given": "John", "family": "Smith", "initials": "J. S."} {"name": "John Smith, X.Y. P.Q.", "given": "John", "family": "Smith", "suffix": "X.Y. P.Q.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S."} @@ -1902,22 +1905,22 @@ {"name": "John Smith, vd Ma", "given": "John", "family": "Smith", "suffix": "vd Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "capitalized_force": "John Smith, VD MA"} {"name": "John Smith-Jones", "given": "John", "family": "Smith-Jones", "initials": "J. S."} {"name": "John Smith-Jones, MD-PhD", "given": "John", "family": "Smith-Jones", "suffix": "MD-PhD", "initials": "J. S."} -{"name": "John Smith, Jr.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S."} +{"name": "John Smith, Jr.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} {"name": "John V", "given": "John", "family": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "J. V."} {"name": "John V, Dr.", "title": "Dr.", "given": "John", "family": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "J. V."} {"name": "John V. Smith", "given": "John", "middle": "V.", "family": "Smith", "initials": "J. V. S."} -{"name": "John W Ingram V", "given": "John", "middle": "W", "family": "Ingram", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. W. I."} +{"name": "John W Ingram V", "given": "John", "middle": "W", "family": "Ingram", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. W. I.", "generation": "V"} {"name": "John W. Ingram", "given": "John", "middle": "W.", "family": "Ingram", "initials": "J. W. I."} -{"name": "John W. Ingram V", "given": "John", "middle": "W.", "family": "Ingram", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. W. I."} -{"name": "John W. Ingram, V", "given": "John", "middle": "W.", "family": "Ingram", "suffix": "V", "initials": "J. W. I."} -{"name": "John W. Smith, I", "given": "John", "middle": "W.", "family": "Smith", "suffix": "I", "initials": "J. W. S."} +{"name": "John W. Ingram V", "given": "John", "middle": "W.", "family": "Ingram", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. W. I.", "generation": "V"} +{"name": "John W. Ingram, V", "given": "John", "middle": "W.", "family": "Ingram", "suffix": "V", "initials": "J. W. I.", "generation": "V"} +{"name": "John W. Smith, I", "given": "John", "middle": "W.", "family": "Smith", "suffix": "I", "initials": "J. W. S.", "generation": "I"} {"name": "John Williams", "given": "John", "family": "Williams", "initials": "J. W."} {"name": "John and Jane Aznar y Lopez", "given": "John and Jane", "family": "Aznar y Lopez", "initials": "J. J. A. L."} {"name": "John and Jane Smith", "given": "John and Jane", "family": "Smith", "initials": "J. J. S."} {"name": "John de Ma", "given": "John", "family": "de Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. M."} {"name": "John e Smith", "given": "John", "middle": "e", "family": "Smith", "initials": "J. e. S."} -{"name": "John e Smith III", "given": "John", "middle": "e", "family": "Smith", "suffix": "III", "initials": "J. e. S."} -{"name": "John e Smith, III", "given": "John", "middle": "e", "family": "Smith", "suffix": "III", "initials": "J. e. S."} +{"name": "John e Smith III", "given": "John", "middle": "e", "family": "Smith", "suffix": "III", "initials": "J. e. S.", "generation": "III"} +{"name": "John e Smith, III", "given": "John", "middle": "e", "family": "Smith", "suffix": "III", "initials": "J. e. S.", "generation": "III"} {"name": "John nee Prof. ba MA", "family": "John", "suffix": "MA", "maiden": "Prof. ba", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J.", "capitalized_force": "John (Prof. Ba) MA"} {"name": "John née Jones Smith Ma", "family": "John", "maiden": "Jones Smith Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J."} {"name": "John née Jones Smith V", "family": "John", "maiden": "Jones Smith V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "J."} @@ -1931,7 +1934,7 @@ {"name": "John van der Berg PhD", "given": "John", "family": "van der Berg", "suffix": "PhD", "initials": "J. B."} {"name": "John van der Berg Prof.", "title": "Prof.", "given": "John", "family": "van der Berg", "initials": "J. B."} {"name": "John van der Berg Smith", "given": "John", "family": "van der Berg Smith", "initials": "J. B. S."} -{"name": "John van der Berg V", "given": "John", "family": "van der Berg", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. B."} +{"name": "John van der Berg V", "given": "John", "family": "van der Berg", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. B.", "generation": "V"} {"name": "John van der Berg née Jones", "given": "John", "family": "van der Berg", "maiden": "Jones", "initials": "J. B."} {"name": "John van der J. V", "given": "John", "family": "van der J. V", "initials": "J. J. V."} {"name": "John von PhD Jones", "given": "John", "family": "von", "suffix": "PhD Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. v.", "capitalized_force": "John Von PhD Jones"} @@ -1977,16 +1980,16 @@ {"name": "Josep Balari i Jovany", "given": "Josep", "family": "Balari i Jovany", "initials": "J. B. J."} {"name": "Josep Campabadal i Calvet", "given": "Josep", "family": "Campabadal i Calvet", "initials": "J. C. C."} {"name": "Josep Carod I Rovira", "given": "Josep", "middle": "Carod I", "family": "Rovira", "initials": "J. C. I. R."} -{"name": "Josep Carod i", "given": "Josep", "family": "Carod", "suffix": "i", "initials": "J. C.", "capitalized_force": "Josep Carod I"} +{"name": "Josep Carod i", "given": "Josep", "family": "Carod", "suffix": "i", "initials": "J. C.", "capitalized_force": "Josep Carod I", "generation": "i"} {"name": "Josep Carod i Rovira", "given": "Josep", "family": "Carod i Rovira", "initials": "J. C. R."} -{"name": "Josep Carod i Rovira III", "given": "Josep", "family": "Carod i Rovira", "suffix": "III", "initials": "J. C. R."} +{"name": "Josep Carod i Rovira III", "given": "Josep", "family": "Carod i Rovira", "suffix": "III", "initials": "J. C. R.", "generation": "III"} {"name": "Josep Carod i de Rovira", "given": "Josep", "middle": "Carod i de", "family": "Rovira", "initials": "J. C. R."} {"name": "Josep Domènech Estapà", "given": "Josep", "middle": "Domènech", "family": "Estapà", "initials": "J. D. E."} {"name": "Josep Ibáñez i Senserrich", "given": "Josep", "family": "Ibáñez i Senserrich", "initials": "J. I. S."} {"name": "Josep Janés i Olivé", "given": "Josep", "family": "Janés i Olivé", "initials": "J. J. O."} -{"name": "Josep Lluis Carod i III", "given": "Josep", "middle": "Lluis", "family": "Carod", "suffix": "i III", "initials": "J. L. C.", "capitalized_force": "Josep Lluis Carod I III"} +{"name": "Josep Lluis Carod i III", "given": "Josep", "middle": "Lluis", "family": "Carod", "suffix": "i III", "initials": "J. L. C.", "capitalized_force": "Josep Lluis Carod I III", "generation": "i III"} {"name": "Josep Lluis Carod i Rovira", "given": "Josep", "middle": "Lluis", "family": "Carod i Rovira", "initials": "J. L. C. R."} -{"name": "Josep Lluis Carod i V", "given": "Josep", "middle": "Lluis", "family": "Carod", "suffix": "i V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. L. C.", "capitalized_force": "Josep Lluis Carod I V"} +{"name": "Josep Lluis Carod i V", "given": "Josep", "middle": "Lluis", "family": "Carod", "suffix": "i V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "J. L. C.", "capitalized_force": "Josep Lluis Carod I V", "generation": "i V"} {"name": "Josep Maria Tarridas i Barri", "given": "Josep", "middle": "Maria", "family": "Tarridas i Barri", "initials": "J. M. T. B."} {"name": "Josep Vergés i Vallmajor", "given": "Josep", "family": "Vergés i Vallmajor", "initials": "J. V. V."} {"name": "Josep i Rovira", "given": "Josep", "middle": "i", "family": "Rovira", "initials": "J. i. R."} @@ -2019,7 +2022,7 @@ {"name": "José Mataix Monllor", "given": "José", "middle": "Mataix", "family": "Monllor", "initials": "J. M. M."} {"name": "José Perianes Carro", "given": "José", "middle": "Perianes", "family": "Carro", "initials": "J. P. C."} {"name": "José Robles Pazos", "given": "José", "middle": "Robles", "family": "Pazos", "initials": "J. R. P."} -{"name": "José Silva Júnior", "given": "José", "family": "Silva", "suffix": "Júnior", "initials": "J. S."} +{"name": "José Silva Júnior", "given": "José", "family": "Silva", "suffix": "Júnior", "initials": "J. S.", "generation": "Júnior"} {"name": "José Vilató Ruiz", "given": "José", "middle": "Vilató", "family": "Ruiz", "initials": "J. V. R."} {"name": "Jovan Dragan Popović", "given": "Jovan", "middle": "Dragan", "family": "Popović", "initials": "J. D. P."} {"name": "Joybert, Marc de", "given": "Marc", "family": "de Joybert", "initials": "M. J."} @@ -2049,25 +2052,25 @@ {"name": "Juan Pérez H.", "given": "Juan", "middle": "Pérez", "family": "H.", "initials": "J. P. H."} {"name": "Juan Pérez de la Vega", "given": "Juan", "middle": "Pérez", "family": "de la Vega", "initials": "J. P. V."} {"name": "Juan Q. Velasquez y Garcia", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "initials": "J. Q. V. G."} -{"name": "Juan Q. Velasquez y Garcia III", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. Q. V. G."} -{"name": "Juan Q. Velasquez y Garcia, Jr.", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. Q. V. G."} +{"name": "Juan Q. Velasquez y Garcia III", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. Q. V. G.", "generation": "III"} +{"name": "Juan Q. Velasquez y Garcia, Jr.", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. Q. V. G.", "generation": "Jr."} {"name": "Juan Q. Xavier Velasquez y Garcia", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "initials": "J. Q. X. V. G."} -{"name": "Juan Q. Xavier Velasquez y Garcia III", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. Q. X. V. G."} -{"name": "Juan Q. Xavier Velasquez y Garcia, Jr.", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. Q. X. V. G."} +{"name": "Juan Q. Xavier Velasquez y Garcia III", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. Q. X. V. G.", "generation": "III"} +{"name": "Juan Q. Xavier Velasquez y Garcia, Jr.", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. Q. X. V. G.", "generation": "Jr."} {"name": "Juan Q. Xavier de la Vega", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "initials": "J. Q. X. V."} -{"name": "Juan Q. Xavier de la Vega III", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "suffix": "III", "initials": "J. Q. X. V."} -{"name": "Juan Q. Xavier de la Vega, Jr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "suffix": "Jr.", "initials": "J. Q. X. V."} +{"name": "Juan Q. Xavier de la Vega III", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "suffix": "III", "initials": "J. Q. X. V.", "generation": "III"} +{"name": "Juan Q. Xavier de la Vega, Jr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "suffix": "Jr.", "initials": "J. Q. X. V.", "generation": "Jr."} {"name": "Juan Q. de la Vega", "given": "Juan", "middle": "Q.", "family": "de la Vega", "initials": "J. Q. V."} -{"name": "Juan Q. de la Vega III", "given": "Juan", "middle": "Q.", "family": "de la Vega", "suffix": "III", "initials": "J. Q. V."} -{"name": "Juan Q. de la Vega, Jr.", "given": "Juan", "middle": "Q.", "family": "de la Vega", "suffix": "Jr.", "initials": "J. Q. V."} +{"name": "Juan Q. de la Vega III", "given": "Juan", "middle": "Q.", "family": "de la Vega", "suffix": "III", "initials": "J. Q. V.", "generation": "III"} +{"name": "Juan Q. de la Vega, Jr.", "given": "Juan", "middle": "Q.", "family": "de la Vega", "suffix": "Jr.", "initials": "J. Q. V.", "generation": "Jr."} {"name": "Juan Samper Sordo", "given": "Juan", "middle": "Samper", "family": "Sordo", "initials": "J. S. S."} {"name": "Juan Santos Fernández", "given": "Juan", "middle": "Santos", "family": "Fernández", "initials": "J. S. F."} {"name": "Juan Sordo Madaleno", "given": "Juan", "middle": "Sordo", "family": "Madaleno", "initials": "J. S. M."} {"name": "Juan Suñé Benages", "given": "Juan", "middle": "Suñé", "family": "Benages", "initials": "J. S. B."} {"name": "Juan Torres de Vera y Aragón", "given": "Juan", "middle": "Torres", "family": "de Vera y Aragón", "initials": "J. T. V. A."} {"name": "Juan Velasquez y Garcia", "given": "Juan", "family": "Velasquez y Garcia", "initials": "J. V. G."} -{"name": "Juan Velasquez y Garcia III", "given": "Juan", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. V. G."} -{"name": "Juan Velasquez y Garcia, Jr.", "given": "Juan", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. V. G."} +{"name": "Juan Velasquez y Garcia III", "given": "Juan", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. V. G.", "generation": "III"} +{"name": "Juan Velasquez y Garcia, Jr.", "given": "Juan", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. V. G.", "generation": "Jr."} {"name": "Juan Zuleta Ferrer", "given": "Juan", "middle": "Zuleta", "family": "Ferrer", "initials": "J. Z. F."} {"name": "Juan and Garcia", "given": "Juan and Garcia", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "J. G."} {"name": "Juan de", "given": "Juan", "family": "de", "initials": "J. d.", "capitalized_force": "Juan De"} @@ -2075,22 +2078,22 @@ {"name": "Juan de Courten y González", "given": "Juan", "family": "de Courten y González", "initials": "J. C. G."} {"name": "Juan de Dios Sierra y Velásquez", "given": "Juan", "family": "de Dios Sierra y Velásquez", "initials": "J. D. S. V."} {"name": "Juan de la Vega", "given": "Juan", "family": "de la Vega", "initials": "J. V."} -{"name": "Juan de la Vega III", "given": "Juan", "family": "de la Vega", "suffix": "III", "initials": "J. V."} +{"name": "Juan de la Vega III", "given": "Juan", "family": "de la Vega", "suffix": "III", "initials": "J. V.", "generation": "III"} {"name": "Juan de la Vega Rodríguez", "given": "Juan", "family": "de la Vega Rodríguez", "initials": "J. V. R."} -{"name": "Juan de la Vega, Jr.", "given": "Juan", "family": "de la Vega", "suffix": "Jr.", "initials": "J. V."} +{"name": "Juan de la Vega, Jr.", "given": "Juan", "family": "de la Vega", "suffix": "Jr.", "initials": "J. V.", "generation": "Jr."} {"name": "Juan de la de la Vega", "given": "Juan", "family": "de la de la Vega", "initials": "J. V."} -{"name": "Juan de la de la Vega Jr.", "given": "Juan", "family": "de la de la Vega", "suffix": "Jr.", "initials": "J. V."} +{"name": "Juan de la de la Vega Jr.", "given": "Juan", "family": "de la de la Vega", "suffix": "Jr.", "initials": "J. V.", "generation": "Jr."} {"name": "Juan de la de la de la Vega", "given": "Juan", "family": "de la de la de la Vega", "initials": "J. V."} {"name": "Juan de y", "given": "Juan", "family": "de y", "initials": "J. y."} {"name": "Juan del Sur", "given": "Juan", "family": "del Sur", "initials": "J. S."} -{"name": "Juan garcia III", "given": "Juan", "family": "garcia", "suffix": "III", "initials": "J. g.", "capitalized_force": "Juan Garcia III"} +{"name": "Juan garcia III", "given": "Juan", "family": "garcia", "suffix": "III", "initials": "J. g.", "capitalized_force": "Juan Garcia III", "generation": "III"} {"name": "Juan van der", "given": "Juan", "family": "van der", "initials": "J. v. d.", "capitalized_force": "Juan Van Der"} {"name": "Juan y Eva Garcia", "given": "Juan y Eva", "family": "Garcia", "initials": "J. E. G."} {"name": "Juan y Garcia", "given": "Juan", "middle": "y", "family": "Garcia", "initials": "J. y. G."} {"name": "Juan y Garcia née Jones", "given": "Juan", "middle": "y", "family": "Garcia", "maiden": "Jones", "initials": "J. y. G."} {"name": "Juan Ó Pérez", "given": "Juan", "family": "Ó Pérez", "initials": "J. P."} {"name": "Juan Ó. Pérez", "given": "Juan", "middle": "Ó.", "family": "Pérez", "initials": "J. Ó. P."} -{"name": "Judge C Lynwood Smith, Jr", "title": "Judge", "given": "C", "middle": "Lynwood", "family": "Smith", "suffix": "Jr", "initials": "C. L. S."} +{"name": "Judge C Lynwood Smith, Jr", "title": "Judge", "given": "C", "middle": "Lynwood", "family": "Smith", "suffix": "Jr", "initials": "C. L. S.", "generation": "Jr"} {"name": "Judge G. Thomas Eisele", "title": "Judge", "given": "G.", "middle": "Thomas", "family": "Eisele", "initials": "G. T. E."} {"name": "Judge James M. Moody", "title": "Judge", "given": "James", "middle": "M.", "family": "Moody", "initials": "J. M. M."} {"name": "Julia Roberts", "given": "Julia", "family": "Roberts", "initials": "J. R."} @@ -2186,11 +2189,11 @@ {"name": "Kim Min Ho", "order": "FAMILY_FIRST", "given": "Min", "middle": "Ho", "family": "Kim", "initials": "M. H. K."} {"name": "Kim, AE-RA", "family": "Kim", "suffix": "AE-RA", "initials": "K."} {"name": "Kim, Ae-Ra", "given": "Ae-Ra", "family": "Kim", "initials": "A. K."} -{"name": "Kim, Jr.", "family": "Kim", "suffix": "Jr.", "initials": "K."} +{"name": "Kim, Jr.", "family": "Kim", "suffix": "Jr.", "initials": "K.", "generation": "Jr."} {"name": "Kim김민준씨, MA", "family": "Kim김민준", "suffix": "씨, MA", "initials": "K."} {"name": "King Curtis", "given": "King", "family": "Curtis", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "K. C."} {"name": "King Henry", "given": "King", "family": "Henry", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "K. H."} -{"name": "King John Alexander V", "given": "King", "middle": "John", "family": "Alexander", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME", "TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)", "SUFFIX_OR_NAME: initial as family (shape)"], "initials": "K. J. A."} +{"name": "King John Alexander V", "given": "King", "middle": "John", "family": "Alexander", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME", "TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)", "SUFFIX_OR_NAME: initial as family (shape)"], "initials": "K. J. A.", "generation": "V"} {"name": "King John V.", "given": "King", "middle": "John", "family": "V.", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "K. J. V."} {"name": "Kishi, Kōichi", "given": "Kōichi", "family": "Kishi", "initials": "K. K."} {"name": "Kjetil Bjørn Løseth", "given": "Kjetil", "middle": "Bjørn", "family": "Løseth", "initials": "K. B. L."} @@ -2202,7 +2205,7 @@ {"name": "Kolko, Gabriel", "given": "Gabriel", "family": "Kolko", "initials": "G. K."} {"name": "Kong, Yingda", "given": "Yingda", "family": "Kong", "initials": "Y. K."} {"name": "Konráð Gíslason", "given": "Konráð", "family": "Gíslason", "initials": "K. G."} -{"name": "Konstantin VII.", "given": "Konstantin", "suffix": "VII.", "ambiguities": ["GIVEN_OR_FAMILY", "SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)", "GIVEN_OR_FAMILY: name as family (position)"], "initials": "K."} +{"name": "Konstantin VII.", "given": "Konstantin", "suffix": "VII.", "ambiguities": ["GIVEN_OR_FAMILY", "SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)", "GIVEN_OR_FAMILY: name as family (position)"], "initials": "K.", "generation": "VII."} {"name": "Kotryna Miliūtė", "given": "Kotryna", "family": "Miliūtė", "initials": "K. M."} {"name": "Kovač Ana Marija Vera", "order": "FAMILY_FIRST", "given": "Ana", "middle": "Marija Vera", "family": "Kovač", "initials": "A. M. V. K."} {"name": "Kovač, Ana Marija Vera", "given": "Ana", "middle": "Marija Vera", "family": "Kovač", "initials": "A. M. V. K."} @@ -2234,7 +2237,7 @@ {"name": "L'Aubespine, François de", "given": "François", "family": "de L'Aubespine", "initials": "F. L."} {"name": "L. U. P. O.", "given": "L.", "middle": "U. P.", "family": "O.", "initials": "L. U. P. O."} {"name": "LEED AP", "given": "LEED", "family": "AP", "initials": "L. A.", "capitalized": "Leed Ap"} -{"name": "LT. GEN. JOHN A. KENNETH DOE IV", "title": "LT. GEN.", "given": "JOHN", "middle": "A. KENNETH", "family": "DOE", "suffix": "IV", "initials": "J. A. K. D.", "capitalized": "Lt. Gen. John A. Kenneth Doe IV"} +{"name": "LT. GEN. JOHN A. KENNETH DOE IV", "title": "LT. GEN.", "given": "JOHN", "middle": "A. KENNETH", "family": "DOE", "suffix": "IV", "initials": "J. A. K. D.", "capitalized": "Lt. Gen. John A. Kenneth Doe IV", "generation": "IV"} {"name": "LT.GOV. JOHN DOE", "title": "LT.GOV.", "given": "JOHN", "family": "DOE", "initials": "J. D.", "capitalized": "Lt.Gov. John Doe"} {"name": "La Barre, Jean-François Lefebvre de", "given": "Jean-François", "middle": "Lefebvre", "family": "de La Barre", "initials": "J. L. B.", "capitalized_force": "Jean-François Lefebvre de la Barre"} {"name": "La Croix, Edmond de", "given": "Edmond", "family": "de La Croix", "initials": "E. C.", "capitalized_force": "Edmond de la Croix"} @@ -2250,7 +2253,7 @@ {"name": "Lamha Yahya Al Mawali", "given": "Lamha", "middle": "Yahya", "family": "Al Mawali", "initials": "L. Y. M.", "capitalized_force": "Lamha Yahya al Mawali"} {"name": "Lange, F. de", "given": "F.", "family": "de Lange", "initials": "F. L."} {"name": "Lansere, Nikolaj Evgenʹevič", "given": "Nikolaj", "middle": "Evgenʹevič", "family": "Lansere", "initials": "N. E. L."} -{"name": "Larry James Johnson I", "given": "Larry", "middle": "James", "family": "Johnson", "suffix": "I", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "L. J. J."} +{"name": "Larry James Johnson I", "given": "Larry", "middle": "James", "family": "Johnson", "suffix": "I", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "L. J. J.", "generation": "I"} {"name": "Larry V I", "given": "Larry", "middle": "V", "family": "I", "initials": "L. V. I."} {"name": "Lastname, Firstname", "given": "Firstname", "family": "Lastname", "initials": "F. L."} {"name": "Lau, Wing", "given": "Wing", "family": "Lau", "initials": "W. L."} @@ -2264,7 +2267,7 @@ {"name": "Lehtola-Aalto Marja-Liisa Katariina, kansanedustaja", "order": "FAMILY_FIRST", "given": "kansanedustaja", "family": "Lehtola-Aalto Marja-Liisa Katariina", "initials": "k. L. M. K.", "capitalized_force": "Kansanedustaja Lehtola-Aalto Marja-Liisa Katariina"} {"name": "Lehtola-Aalto, Marja-Liisa Katariina", "given": "Marja-Liisa", "middle": "Katariina", "family": "Lehtola-Aalto", "initials": "M. K. L."} {"name": "Lejnikowa, Hejba-Marja Hana", "given": "Hejba-Marja", "middle": "Hana", "family": "Lejnikowa", "initials": "H. H. L."} -{"name": "Lejnikowa, dr. Hejba-Marja Hana jr. phd", "order": "FAMILY_FIRST", "title": "dr.", "given": "Hejba-Marja", "middle": "Hana", "family": "Lejnikowa", "suffix": "jr. phd", "initials": "H. H. L.", "capitalized_force": "Dr. Hejba-Marja Hana Lejnikowa Jr. PhD"} +{"name": "Lejnikowa, dr. Hejba-Marja Hana jr. phd", "order": "FAMILY_FIRST", "title": "dr.", "given": "Hejba-Marja", "middle": "Hana", "family": "Lejnikowa", "suffix": "jr. phd", "initials": "H. H. L.", "capitalized_force": "Dr. Hejba-Marja Hana Lejnikowa Jr. PhD", "generation": "jr.", "credentials": "phd"} {"name": "Lemaître, Adélaïde", "given": "Adélaïde", "family": "Lemaître", "initials": "A. L."} {"name": "Lemaître, Adélaïde", "order": "FAMILY_FIRST", "given": "Adélaïde", "family": "Lemaître", "initials": "A. L."} {"name": "Lena", "given": "Lena", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "L."} @@ -2289,10 +2292,10 @@ {"name": "Lisandro Leyva Mazuera", "given": "Lisandro", "middle": "Leyva", "family": "Mazuera", "initials": "L. L. M."} {"name": "Livraga Rizzi, Jorge A.", "given": "Jorge", "middle": "A.", "family": "Livraga Rizzi", "initials": "J. A. L. R."} {"name": "Llorenç Ferrer Martí", "given": "Llorenç", "middle": "Ferrer", "family": "Martí", "initials": "L. F. M."} -{"name": "Lloret Palol II, JA", "given": "Lloret", "family": "Palol", "suffix": "II, JA", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "L. P."} -{"name": "Lloret Palol II, Josep Antoni", "given": "Josep", "middle": "Antoni", "family": "Lloret Palol", "suffix": "II", "initials": "J. A. L. P."} +{"name": "Lloret Palol II, JA", "given": "Lloret", "family": "Palol", "suffix": "II, JA", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "L. P.", "generation": "II", "credentials": "JA"} +{"name": "Lloret Palol II, Josep Antoni", "given": "Josep", "middle": "Antoni", "family": "Lloret Palol", "suffix": "II", "initials": "J. A. L. P.", "generation": "II"} {"name": "Lloret Palol, Josep Antoni Carles Joan", "given": "Josep", "middle": "Antoni Carles Joan", "family": "Lloret Palol", "initials": "J. A. C. J. L. P."} -{"name": "Lluis Carod i", "given": "Lluis", "family": "Carod", "suffix": "i", "initials": "L. C.", "capitalized_force": "Lluis Carod I"} +{"name": "Lluis Carod i", "given": "Lluis", "family": "Carod", "suffix": "i", "initials": "L. C.", "capitalized_force": "Lluis Carod I", "generation": "i"} {"name": "Lockroy", "given": "Lockroy", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "L."} {"name": "Lodewijk van Oranje-Nassau", "given": "Lodewijk", "family": "van Oranje-Nassau", "initials": "L. O."} {"name": "Loftur Guðmundsson", "given": "Loftur", "family": "Guðmundsson", "initials": "L. G."} @@ -2317,9 +2320,9 @@ {"name": "Louis de Grandmaison", "given": "Louis", "family": "de Grandmaison", "initials": "L. G."} {"name": "Louise Fitzhugh", "given": "Louise", "family": "Fitzhugh", "initials": "L. F."} {"name": "Louise Péricourt", "given": "Louise", "family": "Péricourt", "initials": "L. P."} -{"name": "Lt. Gen. John A. Kenneth Doe IV", "title": "Lt. Gen.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "IV", "initials": "J. A. K. D."} -{"name": "Lt. Gen. John A. Kenneth Doe, Jr.", "title": "Lt. Gen.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "Jr.", "initials": "J. A. K. D."} -{"name": "Lt.Gen. John A. Kenneth Doe IV", "title": "Lt.Gen.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "IV", "initials": "J. A. K. D."} +{"name": "Lt. Gen. John A. Kenneth Doe IV", "title": "Lt. Gen.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "IV", "initials": "J. A. K. D.", "generation": "IV"} +{"name": "Lt. Gen. John A. Kenneth Doe, Jr.", "title": "Lt. Gen.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "Jr.", "initials": "J. A. K. D.", "generation": "Jr."} +{"name": "Lt.Gen. John A. Kenneth Doe IV", "title": "Lt.Gen.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "IV", "initials": "J. A. K. D.", "generation": "IV"} {"name": "Lt.Gov. John Doe", "title": "Lt.Gov.", "given": "John", "family": "Doe", "initials": "J. D."} {"name": "Lt.Gov. juan e garcia", "title": "Lt.Gov.", "given": "juan", "middle": "e", "family": "garcia", "initials": "j. e. g.", "capitalized_force": "Lt.Gov. Juan e Garcia"} {"name": "Luca Sarolta Éva Erzsébet von Kovács M.D. Ph.D.", "given": "Luca", "middle": "Sarolta Éva Erzsébet", "family": "von Kovács", "suffix": "M.D. Ph.D.", "initials": "L. S. É. E. K."} @@ -2352,13 +2355,13 @@ {"name": "Løseth, Kjetil Bjørn", "given": "Kjetil", "middle": "Bjørn", "family": "Løseth", "initials": "K. B. L."} {"name": "Løseth, Kjetil Bjørn", "order": "FAMILY_FIRST", "given": "Kjetil", "middle": "Bjørn", "family": "Løseth", "initials": "K. B. L."} {"name": "Lúcio de Mendonça", "given": "Lúcio", "family": "de Mendonça", "initials": "L. M."} -{"name": "Lžedmitrij II.", "given": "Lžedmitrij", "suffix": "II.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "L."} -{"name": "M. Jean-Nicolas Louis Marcel de Bouchart fils", "given": "M.", "middle": "Jean-Nicolas Louis Marcel", "family": "de Bouchart", "suffix": "fils", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "M. J. L. M. B."} -{"name": "M. de Bouchart Jean-Nicolas Louis Marcel fils", "order": "FAMILY_FIRST", "given": "de Bouchart Jean-Nicolas Louis Marcel", "family": "M.", "suffix": "fils", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (declared)"], "initials": "d. B. J. L. M. M.", "capitalized_force": "M. De Bouchart Jean-Nicolas Louis Marcel fils"} +{"name": "Lžedmitrij II.", "given": "Lžedmitrij", "suffix": "II.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "L.", "generation": "II."} +{"name": "M. Jean-Nicolas Louis Marcel de Bouchart fils", "given": "M.", "middle": "Jean-Nicolas Louis Marcel", "family": "de Bouchart", "suffix": "fils", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "M. J. L. M. B.", "generation": "fils"} +{"name": "M. de Bouchart Jean-Nicolas Louis Marcel fils", "order": "FAMILY_FIRST", "given": "de Bouchart Jean-Nicolas Louis Marcel", "family": "M.", "suffix": "fils", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (declared)"], "initials": "d. B. J. L. M. M.", "capitalized_force": "M. De Bouchart Jean-Nicolas Louis Marcel fils", "generation": "fils"} {"name": "MANƉELA Rolanɖ Alfɔns", "order": "FAMILY_FIRST", "given": "Rolanɖ", "middle": "Alfɔns", "family": "MANƉELA", "initials": "R. A. M.", "capitalized_force": "Manɖela Rolanɖ Alfɔns"} {"name": "MARIA DA SILVA E SOUZA", "given": "MARIA", "family": "DA SILVA E SOUZA", "ambiguities": ["CONJUNCTION_OR_INITIAL"], "alternatives": ["CONJUNCTION_OR_INITIAL: conjunction as family (vocabulary)"], "initials": "M. S. E. S.", "capitalized": "Maria da Silva E Souza"} {"name": "MD - DO - DDS", "given": "MD", "middle": "-", "family": "DO -", "suffix": "DDS", "initials": "M. -. -.", "capitalized": "Md - do - DDS"} -{"name": "MD Chirurgie dentară von der Ruhr Prof. dr. Eva-Eleonora Karl Hans Jr.", "order": "FAMILY_FIRST", "given": "Chirurgie", "middle": "dentară von der Ruhr Prof. dr. Eva-Eleonora Karl Hans", "family": "MD", "suffix": "Jr.", "initials": "C. d. R. P. d. E. K. H. M.", "capitalized_force": "Md Chirurgie Dentară von der Ruhr Prof. Dr. Eva-Eleonora Karl Hans Jr."} +{"name": "MD Chirurgie dentară von der Ruhr Prof. dr. Eva-Eleonora Karl Hans Jr.", "order": "FAMILY_FIRST", "given": "Chirurgie", "middle": "dentară von der Ruhr Prof. dr. Eva-Eleonora Karl Hans", "family": "MD", "suffix": "Jr.", "initials": "C. d. R. P. d. E. K. H. M.", "capitalized_force": "Md Chirurgie Dentară von der Ruhr Prof. Dr. Eva-Eleonora Karl Hans Jr.", "generation": "Jr."} {"name": "MD DDS", "given": "MD", "suffix": "DDS", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "M.", "capitalized": "Md DDS"} {"name": "MD DDS Dut.ra Prof.ra von Brühl González Domingo Maria Giusepa Juana Teresa", "order": "FAMILY_FIRST", "given": "DDS", "middle": "Dut.ra Prof.ra von Brühl González Domingo Maria Giusepa Juana Teresa", "family": "MD", "initials": "D. D. P. B. G. D. M. G. J. T. M.", "capitalized_force": "Md Dds Dut.Ra Prof.Ra von Brühl González Domingo Maria Giusepa Juana Teresa"} {"name": "MD DDS von Brühl César Martín Ada Cornelia", "order": "FAMILY_FIRST", "given": "DDS", "middle": "von Brühl César Martín Ada Cornelia", "family": "MD", "initials": "D. B. C. M. A. C. M.", "capitalized_force": "Md Dds von Brühl César Martín Ada Cornelia"} @@ -2366,7 +2369,7 @@ {"name": "MD, PHD", "family": "MD", "suffix": "PHD", "initials": "M.", "capitalized": "Md, PhD"} {"name": "MP Pēteris Kārlis Ozoliņš", "given": "MP", "middle": "Pēteris Kārlis", "family": "Ozoliņš", "initials": "M. P. K. O.", "capitalized_force": "Mp Pēteris Kārlis Ozoliņš"} {"name": "MSc Dr. med. univ.", "given": "MSc", "middle": "Dr. med.", "family": "univ.", "initials": "M. D. m. u.", "capitalized_force": "MSc Dr. Med. Univ."} -{"name": "Ma III, Jack Jr", "given": "Jack", "family": "Ma", "suffix": "III, Jr", "initials": "J. M."} +{"name": "Ma III, Jack Jr", "given": "Jack", "family": "Ma", "suffix": "III, Jr", "initials": "J. M.", "generation": "III, Jr"} {"name": "Ma, Andrew", "given": "Andrew", "family": "Ma", "initials": "A. M."} {"name": "Ma, Jack", "given": "Jack", "family": "Ma", "initials": "J. M."} {"name": "Ma.", "given": "Ma.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "M."} @@ -2380,30 +2383,30 @@ {"name": "Macáková, Alexandra Zuzana (pani, PhD)", "given": "Alexandra", "middle": "Zuzana", "family": "Macáková", "nickname": "pani, PhD", "initials": "A. Z. M.", "capitalized_force": "Alexandra \"Pani, PhD\" Zuzana MacÁková"} {"name": "Maddalena de'Medici", "given": "Maddalena", "family": "de'Medici", "initials": "M. d."} {"name": "Maella, Mariano Salvador de", "given": "Mariano", "middle": "Salvador", "family": "de Maella", "initials": "M. S. M."} -{"name": "Mag-Judge Harwell G Davis, III", "title": "Mag-Judge", "given": "Harwell", "middle": "G", "family": "Davis", "suffix": "III", "initials": "H. G. D."} +{"name": "Mag-Judge Harwell G Davis, III", "title": "Mag-Judge", "given": "Harwell", "middle": "G", "family": "Davis", "suffix": "III", "initials": "H. G. D.", "generation": "III"} {"name": "Mag. Judge Byron G. Cudmore", "title": "Mag. Judge", "given": "Byron", "middle": "G.", "family": "Cudmore", "initials": "B. G. C."} {"name": "Magda von Lerch", "given": "Magda", "family": "von Lerch", "initials": "M. L."} {"name": "Magdalena Calonge i Panyella", "given": "Magdalena", "family": "Calonge i Panyella", "initials": "M. C. P."} -{"name": "Magistrate Judge John F. Forster, Jr", "title": "Magistrate Judge", "given": "John", "middle": "F.", "family": "Forster", "suffix": "Jr", "initials": "J. F. F."} +{"name": "Magistrate Judge John F. Forster, Jr", "title": "Magistrate Judge", "given": "John", "middle": "F.", "family": "Forster", "suffix": "Jr", "initials": "J. F. F.", "generation": "Jr"} {"name": "Magistrate-Judge Elizabeth Todd Campbell", "title": "Magistrate-Judge", "given": "Elizabeth", "middle": "Todd", "family": "Campbell", "initials": "E. T. C."} {"name": "Magnus I.", "given": "Magnus", "family": "I.", "initials": "M. I."} {"name": "Magnús Eiríksson", "given": "Magnús", "family": "Eiríksson", "initials": "M. E."} {"name": "Magnús Jónsson", "given": "Magnús", "family": "Jónsson", "initials": "M. J."} {"name": "Mahathir bin Mohamad", "given": "Mahathir", "family": "bin Mohamad", "initials": "M. M."} {"name": "Maheen Farooqi, ACA", "given": "Maheen", "family": "Farooqi", "suffix": "ACA", "initials": "M. F."} -{"name": "Mahmud II.", "given": "Mahmud", "suffix": "II.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "M."} +{"name": "Mahmud II.", "given": "Mahmud", "suffix": "II.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "M.", "generation": "II."} {"name": "Mai Le née Nguyen", "given": "Mai", "family": "Le", "maiden": "Nguyen", "initials": "M. L."} {"name": "Maid Marion", "title": "Maid", "given": "Marion", "initials": "M."} {"name": "Maider", "given": "Maider", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "M."} {"name": "Maider", "order": "FAMILY_FIRST", "family": "Maider", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "M."} -{"name": "Maier, Amy I, Jr.", "given": "Amy", "middle": "I", "family": "Maier", "suffix": "Jr.", "initials": "A. I. M."} -{"name": "Maier, Amy Lauren I", "given": "Amy", "middle": "Lauren", "family": "Maier", "suffix": "I", "initials": "A. L. M."} +{"name": "Maier, Amy I, Jr.", "given": "Amy", "middle": "I", "family": "Maier", "suffix": "Jr.", "initials": "A. I. M.", "generation": "Jr."} +{"name": "Maier, Amy Lauren I", "given": "Amy", "middle": "Lauren", "family": "Maier", "suffix": "I", "initials": "A. L. M.", "generation": "I"} {"name": "Majlinda Kraja", "given": "Majlinda", "family": "Kraja", "initials": "M. K."} {"name": "Major General John Smith", "title": "Major General", "given": "John", "family": "Smith", "initials": "J. S."} {"name": "Major Harris", "given": "Major", "family": "Harris", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "M. H."} {"name": "Major Smith", "given": "Major", "family": "Smith", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "M. S."} {"name": "Major. Dona Smith", "title": "Major.", "given": "Dona", "family": "Smith", "initials": "D. S."} -{"name": "Major. John Smith, Jr.", "title": "Major.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S."} +{"name": "Major. John Smith, Jr.", "title": "Major.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} {"name": "Makonnen Haile Selassie", "given": "Makonnen", "middle": "Haile", "family": "Selassie", "initials": "M. H. S."} {"name": "Malam Shehu Bello Modibbo MP", "given": "Malam", "middle": "Shehu Bello", "family": "Modibbo", "suffix": "MP", "initials": "M. S. B. M."} {"name": "Malas Zénāwi", "given": "Malas", "family": "Zénāwi", "initials": "M. Z."} @@ -2472,7 +2475,7 @@ {"name": "Mario", "order": "FAMILY_FIRST", "family": "Mario", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "M."} {"name": "Mario Ruiz Armengol", "given": "Mario", "middle": "Ruiz", "family": "Armengol", "initials": "M. R. A."} {"name": "Marić, Branko Hrvoje", "given": "Branko", "middle": "Hrvoje", "family": "Marić", "initials": "B. H. M."} -{"name": "Marić, dr. sc. Branko Hrvoje mlađi, prof.", "order": "FAMILY_FIRST", "title": "dr. sc. prof.", "given": "Branko", "middle": "Hrvoje", "family": "Marić", "suffix": "mlađi", "initials": "B. H. M.", "capitalized_force": "Dr. Sc. Prof. Branko Hrvoje Marić Mlađi"} +{"name": "Marić, dr. sc. Branko Hrvoje mlađi, prof.", "order": "FAMILY_FIRST", "title": "dr. sc. prof.", "given": "Branko", "middle": "Hrvoje", "family": "Marić", "suffix": "mlađi", "initials": "B. H. M.", "capitalized_force": "Dr. Sc. Prof. Branko Hrvoje Marić Mlađi", "generation": "mlađi"} {"name": "Marja-Liisa Katariina Lehtola-Aalto kansanedustaja", "given": "Marja-Liisa", "middle": "Katariina Lehtola-Aalto", "family": "kansanedustaja", "initials": "M. K. L. k.", "capitalized_force": "Marja-Liisa Katariina Lehtola-Aalto Kansanedustaja"} {"name": "Mark", "given": "Mark", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "M."} {"name": "Mark", "order": "FAMILY_FIRST", "family": "Mark", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "M."} @@ -2496,7 +2499,7 @@ {"name": "Mary Ann H Luther", "given": "Mary", "middle": "Ann H", "family": "Luther", "initials": "M. A. H. L."} {"name": "Mary Ann H,Luther", "given": "Luther", "family": "Mary Ann H", "initials": "L. M. A. H."} {"name": "Mary Beth Smith", "given": "Mary", "middle": "Beth", "family": "Smith", "initials": "M. B. S."} -{"name": "Mary II, Dame", "title": "Dame", "given": "Mary", "suffix": "II", "initials": "M."} +{"name": "Mary II, Dame", "title": "Dame", "given": "Mary", "suffix": "II", "initials": "M.", "generation": "II"} {"name": "Mary Jane King", "given": "Mary", "middle": "Jane", "family": "King", "initials": "M. J. K."} {"name": "Mary Jane MA Pope", "given": "Mary", "middle": "Jane MA", "family": "Pope", "initials": "M. J. M. P.", "capitalized_force": "Mary Jane Ma Pope"} {"name": "Mary Jane Pope", "given": "Mary", "middle": "Jane", "family": "Pope", "initials": "M. J. P."} @@ -2566,7 +2569,7 @@ {"name": "Miguel d'Escoto", "given": "Miguel", "family": "d'Escoto", "initials": "M. d.", "capitalized_force": "Miguel D'Escoto"} {"name": "Miguel Ángel Félix Gallardo", "given": "Miguel", "middle": "Ángel Félix", "family": "Gallardo", "initials": "M. Á. F. G."} {"name": "Mike van der Velt", "given": "Mike", "family": "van der Velt", "initials": "M. V."} -{"name": "Milenković dr Slađana Vera mlađi, dipl. inž.", "order": "FAMILY_FIRST", "title": "dipl. inž.", "given": "dr", "middle": "Slađana Vera", "family": "Milenković", "suffix": "mlađi", "initials": "d. S. V. M.", "capitalized_force": "Dipl. Inž. Milenković Dr Slađana Vera Mlađi"} +{"name": "Milenković dr Slađana Vera mlađi, dipl. inž.", "order": "FAMILY_FIRST", "title": "dipl. inž.", "given": "dr", "middle": "Slađana Vera", "family": "Milenković", "suffix": "mlađi", "initials": "d. S. V. M.", "capitalized_force": "Dipl. Inž. Milenković Dr Slađana Vera Mlađi", "generation": "mlađi"} {"name": "Milenković, Slađana Vera", "given": "Slađana", "middle": "Vera", "family": "Milenković", "initials": "S. V. M."} {"name": "Miler Kete", "order": "FAMILY_FIRST", "given": "Kete", "family": "Miler", "initials": "K. M."} {"name": "Miler, Kete", "given": "Kete", "family": "Miler", "initials": "K. M."} @@ -2628,7 +2631,7 @@ {"name": "Mr Wing Lau", "title": "Mr", "given": "Wing", "family": "Lau", "initials": "W. L."} {"name": "Mr XXX", "title": "Mr", "family": "XXX", "initials": "X.", "capitalized_force": "Mr Xxx"} {"name": "Mr. & Mrs. John Smith", "title": "Mr. & Mrs.", "given": "John", "family": "Smith", "initials": "J. S."} -{"name": "Mr. Bertram Wilberforce Henry Robert Wooster Jr, MP", "title": "Mr.", "given": "Bertram", "middle": "Wilberforce Henry Robert", "family": "Wooster", "suffix": "Jr, MP", "initials": "B. W. H. R. W."} +{"name": "Mr. Bertram Wilberforce Henry Robert Wooster Jr, MP", "title": "Mr.", "given": "Bertram", "middle": "Wilberforce Henry Robert", "family": "Wooster", "suffix": "Jr, MP", "initials": "B. W. H. R. W.", "generation": "Jr", "credentials": "MP"} {"name": "Mr. Bertram Wilberforce Henry Robert Wooster MP", "title": "Mr.", "given": "Bertram", "middle": "Wilberforce Henry Robert", "family": "Wooster", "suffix": "MP", "initials": "B. W. H. R. W."} {"name": "Mr. Francisco Xavier Joao Anton de Souza e Menezes Dk, MP", "title": "Mr.", "given": "Francisco", "middle": "Xavier Joao Anton", "family": "de Souza e Menezes Dk", "suffix": "MP", "initials": "F. X. J. A. S. M. D."} {"name": "Mr. Jack Jill", "title": "Mr.", "given": "Jack", "family": "Jill", "initials": "J. J."} @@ -2660,7 +2663,7 @@ {"name": "Muniiru", "given": "Muniiru", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "M."} {"name": "Muniiru", "order": "FAMILY_FIRST", "family": "Muniiru", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "M."} {"name": "Munster, Jan van", "given": "Jan", "family": "van Munster", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "J. M."} -{"name": "Murad III.", "given": "Murad", "suffix": "III.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "M."} +{"name": "Murad III.", "given": "Murad", "suffix": "III.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "M.", "generation": "III."} {"name": "Murat Bey", "given": "Murat", "family": "Bey", "initials": "M. B."} {"name": "Muslim Ibn-al-Ḥaǧǧāǧ al-Qušairī", "given": "Muslim", "middle": "Ibn-al-Ḥaǧǧāǧ", "family": "al-Qušairī", "initials": "M. I. a.", "capitalized_force": "Muslim ibn-al-Ḥaǧǧāǧ al-Qušairī"} {"name": "Muspratt, James", "given": "James", "family": "Muspratt", "initials": "J. M."} @@ -2765,7 +2768,7 @@ {"name": "Orval, Pierre d'", "given": "Pierre", "family": "d' Orval", "initials": "P. O."} {"name": "Orville, Johann Friedrich d'", "given": "Johann", "middle": "Friedrich", "family": "d' Orville", "initials": "J. F. O."} {"name": "Ospina Pérez, Mariano", "given": "Mariano", "family": "Ospina Pérez", "initials": "M. O. P."} -{"name": "Otto III.", "given": "Otto", "suffix": "III.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "O."} +{"name": "Otto III.", "given": "Otto", "suffix": "III.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "O.", "generation": "III."} {"name": "Outrein, Johannes d'", "given": "Johannes", "family": "d' Outrein", "initials": "J. O."} {"name": "Owura Bertram Wilberforce Henry Robert Wooster MP", "title": "Owura", "given": "Bertram", "middle": "Wilberforce Henry Robert", "family": "Wooster", "suffix": "MP", "initials": "B. W. H. R. W."} {"name": "Ozaki, Shirō", "given": "Shirō", "family": "Ozaki", "initials": "S. O."} @@ -2773,14 +2776,14 @@ {"name": "Ozoliņš Pēteris", "order": "FAMILY_FIRST", "given": "Pēteris", "family": "Ozoliņš", "initials": "P. O."} {"name": "Ozoliņš Pēteris Kārlis", "order": "FAMILY_FIRST", "given": "Pēteris", "middle": "Kārlis", "family": "Ozoliņš", "initials": "P. K. O."} {"name": "P. V.", "given": "P.", "family": "V.", "initials": "P. V."} -{"name": "PEDRO DA SILVA FILHO", "given": "PEDRO", "family": "DA SILVA", "suffix": "FILHO", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. S.", "capitalized": "Pedro da Silva Filho"} +{"name": "PEDRO DA SILVA FILHO", "given": "PEDRO", "family": "DA SILVA", "suffix": "FILHO", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. S.", "capitalized": "Pedro da Silva Filho", "generation": "FILHO"} {"name": "PEDRO FILHO", "given": "PEDRO", "family": "FILHO", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: agnomen as suffix (vocabulary)"], "initials": "P. F.", "capitalized": "Pedro Filho"} {"name": "PEDRO JUNIOR FILHO", "given": "PEDRO", "middle": "JUNIOR", "family": "FILHO", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: agnomen as suffix (vocabulary)"], "initials": "P. J. F.", "capitalized": "Pedro Junior Filho"} {"name": "Pablo Emilio Riveros Reina", "given": "Pablo", "middle": "Emilio Riveros", "family": "Reina", "initials": "P. E. R. R."} -{"name": "Pablo Pérez Miguel Ángel Juan Antonio II", "order": "FAMILY_FIRST", "given": "Pérez", "middle": "Miguel Ángel Juan Antonio", "family": "Pablo", "suffix": "II", "initials": "P. M. Á. J. A. P."} +{"name": "Pablo Pérez Miguel Ángel Juan Antonio II", "order": "FAMILY_FIRST", "given": "Pérez", "middle": "Miguel Ángel Juan Antonio", "family": "Pablo", "suffix": "II", "initials": "P. M. Á. J. A. P.", "generation": "II"} {"name": "Pablo Pérez, Sr. Miguel Ángel Juan Antonio", "title": "Sr.", "given": "Miguel", "middle": "Ángel Juan Antonio", "family": "Pablo Pérez", "initials": "M. Á. J. A. P. P."} {"name": "Pablos, María Dolores de", "given": "María", "middle": "Dolores", "family": "de Pablos", "initials": "M. D. P."} -{"name": "Paku Alam VIII", "given": "Paku", "family": "Alam", "suffix": "VIII", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "P. A."} +{"name": "Paku Alam VIII", "given": "Paku", "family": "Alam", "suffix": "VIII", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "P. A.", "generation": "VIII"} {"name": "Pan Nowak Tomasz Jan", "order": "FAMILY_FIRST", "given": "Nowak", "middle": "Tomasz Jan", "family": "Pan", "initials": "N. T. J. P."} {"name": "Pan Tomasz Nowak", "given": "Pan", "middle": "Tomasz", "family": "Nowak", "initials": "P. T. N."} {"name": "Park Ji-hoon ssi", "order": "FAMILY_FIRST", "given": "Ji-hoon", "middle": "ssi", "family": "Park", "initials": "J. s. P.", "capitalized_force": "Park Ji-Hoon Ssi"} @@ -2790,24 +2793,24 @@ {"name": "Paul Phélypeaux de Pontchartrain", "given": "Paul", "middle": "Phélypeaux", "family": "de Pontchartrain", "initials": "P. P. P."} {"name": "Paul d'Ivoi", "given": "Paul", "family": "d'Ivoi", "initials": "P. d.", "capitalized_force": "Paul D'Ivoi"} {"name": "Paul de Maleingreau", "given": "Paul", "family": "de Maleingreau", "initials": "P. M."} -{"name": "Pavlović, Antonio mlađi", "given": "Antonio", "family": "Pavlović", "suffix": "mlađi", "initials": "A. P.", "capitalized_force": "Antonio Pavlović Mlađi"} +{"name": "Pavlović, Antonio mlađi", "given": "Antonio", "family": "Pavlović", "suffix": "mlađi", "initials": "A. P.", "capitalized_force": "Antonio Pavlović Mlađi", "generation": "mlađi"} {"name": "Pedro", "given": "Pedro", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "P."} {"name": "Pedro", "order": "FAMILY_FIRST", "family": "Pedro", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "P."} -{"name": "Pedro Alves Filho", "given": "Pedro", "family": "Alves", "suffix": "Filho", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. A."} -{"name": "Pedro Alves Junior Filho", "given": "Pedro", "family": "Alves", "suffix": "Junior Filho", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. A."} +{"name": "Pedro Alves Filho", "given": "Pedro", "family": "Alves", "suffix": "Filho", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. A.", "generation": "Filho"} +{"name": "Pedro Alves Junior Filho", "given": "Pedro", "family": "Alves", "suffix": "Junior Filho", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. A.", "generation": "Junior Filho"} {"name": "Pedro Alves M.Filho", "given": "Pedro", "family": "Alves", "suffix": "M.Filho", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "P. A.", "capitalized_force": "Pedro Alves M.FILHO"} -{"name": "Pedro Alves NETO", "given": "Pedro", "family": "Alves", "suffix": "NETO", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. A.", "capitalized_force": "Pedro Alves Neto"} -{"name": "Pedro Alves Neto", "given": "Pedro", "family": "Alves", "suffix": "Neto", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. A."} -{"name": "Pedro Alves Neto Júnior", "given": "Pedro", "family": "Alves", "suffix": "Neto Júnior", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. A."} +{"name": "Pedro Alves NETO", "given": "Pedro", "family": "Alves", "suffix": "NETO", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. A.", "capitalized_force": "Pedro Alves Neto", "generation": "NETO"} +{"name": "Pedro Alves Neto", "given": "Pedro", "family": "Alves", "suffix": "Neto", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. A.", "generation": "Neto"} +{"name": "Pedro Alves Neto Júnior", "given": "Pedro", "family": "Alves", "suffix": "Neto Júnior", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. A.", "generation": "Neto Júnior"} {"name": "Pedro Alves Neto, AD", "given": "AD", "family": "Pedro Alves Neto", "initials": "A. P. A. N.", "capitalized_force": "Ad Pedro Alves Neto"} -{"name": "Pedro Alves Neto, PhD", "given": "Pedro", "family": "Alves", "suffix": "Neto, PhD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. A."} -{"name": "Pedro Alves Sobr.", "given": "Pedro", "family": "Alves", "suffix": "Sobr.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. A."} -{"name": "Pedro Alves, Neto", "given": "Pedro", "family": "Alves", "suffix": "Neto", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (declared)"], "initials": "P. A."} +{"name": "Pedro Alves Neto, PhD", "given": "Pedro", "family": "Alves", "suffix": "Neto, PhD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. A.", "generation": "Neto", "credentials": "PhD"} +{"name": "Pedro Alves Sobr.", "given": "Pedro", "family": "Alves", "suffix": "Sobr.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. A.", "generation": "Sobr."} +{"name": "Pedro Alves, Neto", "given": "Pedro", "family": "Alves", "suffix": "Neto", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (declared)"], "initials": "P. A.", "generation": "Neto"} {"name": "Pedro Cañas Serrano", "given": "Pedro", "middle": "Cañas", "family": "Serrano", "initials": "P. C. S."} {"name": "Pedro Filho", "given": "Pedro", "family": "Filho", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: agnomen as suffix (vocabulary)"], "initials": "P. F."} {"name": "Pedro Galindo Galarza", "given": "Pedro", "middle": "Galindo", "family": "Galarza", "initials": "P. G. G."} {"name": "Pedro Infante Torrentera", "given": "Pedro", "middle": "Infante", "family": "Torrentera", "initials": "P. I. T."} -{"name": "Pedro J. Neto", "given": "Pedro", "family": "J.", "suffix": "Neto", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. J."} +{"name": "Pedro J. Neto", "given": "Pedro", "family": "J.", "suffix": "Neto", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. J.", "generation": "Neto"} {"name": "Pedro Jorba y Gassó", "given": "Pedro", "family": "Jorba y Gassó", "initials": "P. J. G."} {"name": "Pedro Junior Filho", "given": "Pedro", "middle": "Junior", "family": "Filho", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: agnomen as suffix (vocabulary)"], "initials": "P. J. F."} {"name": "Pedro Junior Ma Filho", "given": "Pedro", "middle": "Junior Ma", "family": "Filho", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: agnomen as suffix (vocabulary)"], "initials": "P. J. M. F."} @@ -2818,7 +2821,7 @@ {"name": "Pedro Morales Pino", "given": "Pedro", "middle": "Morales", "family": "Pino", "initials": "P. M. P."} {"name": "Pedro PhD Neto", "given": "Pedro", "middle": "PhD", "family": "Neto", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: agnomen as suffix (vocabulary)"], "initials": "P. P. N."} {"name": "Pedro VI Filho", "given": "Pedro", "middle": "VI", "family": "Filho", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: agnomen as suffix (vocabulary)"], "initials": "P. V. F.", "capitalized_force": "Pedro Vi Filho"} -{"name": "Pedro de Neto", "given": "Pedro", "family": "de", "suffix": "Neto", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. d.", "capitalized_force": "Pedro De Neto"} +{"name": "Pedro de Neto", "given": "Pedro", "family": "de", "suffix": "Neto", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "P. d.", "capitalized_force": "Pedro De Neto", "generation": "Neto"} {"name": "Pendeta Zaba", "given": "Pendeta", "family": "Zaba", "initials": "P. Z."} {"name": "Penkauskienė Sofija Rita", "order": "FAMILY_FIRST", "given": "Sofija", "middle": "Rita", "family": "Penkauskienė", "initials": "S. R. P."} {"name": "Penkauskienė, Sofija Rita", "given": "Sofija", "middle": "Rita", "family": "Penkauskienė", "initials": "S. R. P."} @@ -2836,9 +2839,9 @@ {"name": "Ph. D. John Smith", "title": "Ph.", "given": "D.", "middle": "John", "family": "Smith", "initials": "D. J. S."} {"name": "Ph. D. Van Johnson", "title": "Ph.", "given": "D.", "family": "Van Johnson", "initials": "D. J.", "capitalized_force": "Ph. D. van Johnson"} {"name": "Ph. D., John", "given": "John", "family": "Ph. D.", "initials": "J. P. D."} -{"name": "Ph. D., Jr.", "family": "Ph. D.", "suffix": "Jr.", "initials": "P. D."} -{"name": "Ph. D., Prof. Dr. Alejandro Manuel César Mamani de la Cruz Jr.", "title": "Prof. Dr.", "given": "Alejandro", "middle": "Manuel César Mamani de la Cruz", "family": "Ph. D.", "suffix": "Jr.", "initials": "A. M. C. M. C. P. D."} -{"name": "Ph. D., Prof. Dr. de la Cruz Alejandro Manuel César Mamani Jr.", "order": "FAMILY_FIRST", "title": "Prof. Dr.", "family": "Ph. D. de la Cruz Alejandro Manuel César Mamani", "suffix": "Jr.", "initials": "P. D. C. A. M. C. M."} +{"name": "Ph. D., Jr.", "family": "Ph. D.", "suffix": "Jr.", "initials": "P. D.", "generation": "Jr."} +{"name": "Ph. D., Prof. Dr. Alejandro Manuel César Mamani de la Cruz Jr.", "title": "Prof. Dr.", "given": "Alejandro", "middle": "Manuel César Mamani de la Cruz", "family": "Ph. D.", "suffix": "Jr.", "initials": "A. M. C. M. C. P. D.", "generation": "Jr."} +{"name": "Ph. D., Prof. Dr. de la Cruz Alejandro Manuel César Mamani Jr.", "order": "FAMILY_FIRST", "title": "Prof. Dr.", "family": "Ph. D. de la Cruz Alejandro Manuel César Mamani", "suffix": "Jr.", "initials": "P. D. C. A. M. C. M.", "generation": "Jr."} {"name": "Pharm D John Smith", "given": "Pharm", "middle": "D John", "family": "Smith", "initials": "P. D. J. S."} {"name": "Philipp von Breuner", "given": "Philipp", "family": "von Breuner", "initials": "P. B."} {"name": "Philips van Almonde", "given": "Philips", "family": "van Almonde", "initials": "P. A."} @@ -2850,7 +2853,7 @@ {"name": "Piet", "given": "Piet", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "P."} {"name": "Piet", "order": "FAMILY_FIRST", "family": "Piet", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "P."} {"name": "Piet van Engelen", "given": "Piet", "family": "van Engelen", "initials": "P. E."} -{"name": "Pieter Bruegel stariji Jones", "given": "Pieter", "family": "Bruegel", "suffix": "stariji Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "P. B.", "capitalized_force": "Pieter Bruegel Stariji Jones"} +{"name": "Pieter Bruegel stariji Jones", "given": "Pieter", "family": "Bruegel", "suffix": "stariji Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "P. B.", "capitalized_force": "Pieter Bruegel Stariji Jones", "generation": "stariji", "credentials": "Jones"} {"name": "Pieter de Carpentier", "given": "Pieter", "family": "de Carpentier", "initials": "P. C."} {"name": "Pilar Fernández Seijo", "given": "Pilar", "middle": "Fernández", "family": "Seijo", "initials": "P. F. S."} {"name": "Piras Giuanne Marcu", "order": "FAMILY_FIRST", "given": "Giuanne", "middle": "Marcu", "family": "Piras", "initials": "G. M. P."} @@ -2885,33 +2888,33 @@ {"name": "Prince of Wales Jr", "title": "Prince of Wales", "family": "Jr", "initials": "J."} {"name": "Princess Royal Anne", "title": "Princess Royal", "given": "Anne", "initials": "A."} {"name": "Prof. Dk. Salima Farida mwana Hamisi Musa M.D. Ph.D.", "title": "Prof. Dk.", "given": "Salima", "middle": "Farida mwana Hamisi", "family": "Musa", "suffix": "M.D. Ph.D.", "initials": "S. F. m. H. M.", "capitalized_force": "Prof. Dk. Salima Farida Mwana Hamisi Musa M.D. Ph.D."} -{"name": "Prof. Dr. Ada Cornelia Cesar Martin von Bruhl Jr, MD DDS", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia Cesar Martin", "family": "von Bruhl", "suffix": "Jr, MD DDS", "initials": "A. C. C. M. B."} -{"name": "Prof. Dr. Ada Cornelia Cesar Martín von Bruhl Jr, M.D., Ph.D.", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia Cesar Martín", "family": "von Bruhl", "suffix": "Jr, M.D., Ph.D.", "initials": "A. C. C. M. B."} -{"name": "Prof. Dr. Ada Cornelia César Martín von Brühl González Domingo Jr, MD DDS", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl González Domingo", "suffix": "Jr, MD DDS", "initials": "A. C. C. M. B. G. D."} +{"name": "Prof. Dr. Ada Cornelia Cesar Martin von Bruhl Jr, MD DDS", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia Cesar Martin", "family": "von Bruhl", "suffix": "Jr, MD DDS", "initials": "A. C. C. M. B.", "generation": "Jr", "credentials": "MD DDS"} +{"name": "Prof. Dr. Ada Cornelia Cesar Martín von Bruhl Jr, M.D., Ph.D.", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia Cesar Martín", "family": "von Bruhl", "suffix": "Jr, M.D., Ph.D.", "initials": "A. C. C. M. B.", "generation": "Jr", "credentials": "M.D., Ph.D."} +{"name": "Prof. Dr. Ada Cornelia César Martín von Brühl González Domingo Jr, MD DDS", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl González Domingo", "suffix": "Jr, MD DDS", "initials": "A. C. C. M. B. G. D.", "generation": "Jr", "credentials": "MD DDS"} {"name": "Prof. Dr. Ada Cornelia César Martín von Brühl González Domingo M.D. Ph.D.", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl González Domingo", "suffix": "M.D. Ph.D.", "initials": "A. C. C. M. B. G. D."} {"name": "Prof. Dr. Ada Cornelia César Martín von Brühl González Domingo MD DDS", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl González Domingo", "suffix": "MD DDS", "initials": "A. C. C. M. B. G. D."} {"name": "Prof. Dr. Ada Cornelia César Martín von Brühl González Domingo, M.D. DDS.", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl González Domingo", "suffix": "M.D. DDS.", "initials": "A. C. C. M. B. G. D."} -{"name": "Prof. Dr. Ada Cornelia César Martín von Brühl Jr MD DDS", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "suffix": "Jr MD DDS", "initials": "A. C. C. M. B."} -{"name": "Prof. Dr. Ada Cornelia César Martín von Brühl Jr, MD DDS", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "suffix": "Jr, MD DDS", "initials": "A. C. C. M. B."} +{"name": "Prof. Dr. Ada Cornelia César Martín von Brühl Jr MD DDS", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "suffix": "Jr MD DDS", "initials": "A. C. C. M. B.", "generation": "Jr", "credentials": "MD DDS"} +{"name": "Prof. Dr. Ada Cornelia César Martín von Brühl Jr, MD DDS", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "suffix": "Jr, MD DDS", "initials": "A. C. C. M. B.", "generation": "Jr", "credentials": "MD DDS"} {"name": "Prof. Dr. Ada Cornelia Eva Sophia van den Wolf Becker Schmidt M.D. Ph.D.", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia Eva Sophia", "family": "van den Wolf Becker Schmidt", "suffix": "M.D. Ph.D.", "initials": "A. C. E. S. W. B. S."} {"name": "Prof. Dr. Ada Cornelia Martina von Bruhel Domingo MD DDS", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia Martina", "family": "von Bruhel Domingo", "suffix": "MD DDS", "initials": "A. C. M. B. D."} {"name": "Prof. Dr. Ada Kornelia Sezar Martin van den Volf Becker Schmidt M.D. Ph.D.", "title": "Prof. Dr.", "given": "Ada", "middle": "Kornelia Sezar Martin", "family": "van den Volf Becker Schmidt", "suffix": "M.D. Ph.D.", "initials": "A. K. S. M. V. B. S."} {"name": "Prof. Dr. Adama Coulibaly Camara Massamba won Baar Dominique Goudiaby MD DDS", "title": "Prof. Dr.", "given": "Adama", "middle": "Coulibaly Camara Massamba won Baar Dominique", "family": "Goudiaby", "suffix": "MD DDS", "initials": "A. C. C. M. w. B. D. G.", "capitalized_force": "Prof. Dr. Adama Coulibaly Camara Massamba Won Baar Dominique Goudiaby MD DDS"} -{"name": "Prof. Dr. Anna Cornelia Eva Sophia van den Wolf jr. M.D. Ph.D.", "title": "Prof. Dr.", "given": "Anna", "middle": "Cornelia Eva Sophia", "family": "van den Wolf", "suffix": "jr. M.D. Ph.D.", "initials": "A. C. E. S. W.", "capitalized_force": "Prof. Dr. Anna Cornelia Eva Sophia van den Wolf Jr. M.D. Ph.D."} +{"name": "Prof. Dr. Anna Cornelia Eva Sophia van den Wolf jr. M.D. Ph.D.", "title": "Prof. Dr.", "given": "Anna", "middle": "Cornelia Eva Sophia", "family": "van den Wolf", "suffix": "jr. M.D. Ph.D.", "initials": "A. C. E. S. W.", "capitalized_force": "Prof. Dr. Anna Cornelia Eva Sophia van den Wolf Jr. M.D. Ph.D.", "generation": "jr.", "credentials": "M.D. Ph.D."} {"name": "Prof. Dr. Brühl, Ada", "title": "Prof. Dr.", "given": "Ada", "family": "Brühl", "initials": "A. B."} -{"name": "Prof. Dr. MD DDS Ada Cornelia César Martín von Brühl Jr", "title": "Prof. Dr.", "given": "MD", "middle": "DDS Ada Cornelia César Martín", "family": "von Brühl", "suffix": "Jr", "initials": "M. D. A. C. C. M. B.", "capitalized_force": "Prof. Dr. Md Dds Ada Cornelia César Martín von Brühl Jr"} -{"name": "Prof. Dr. Mary Lou Cesare Martín von Brühl Jr., Dr. Ph.D", "title": "Prof. Dr. Dr.", "given": "Mary", "middle": "Lou Cesare Martín", "family": "von Brühl", "suffix": "Jr., Ph.D", "initials": "M. L. C. M. B."} -{"name": "Prof. Dr. Mary Sue Marie von Miller II, MD DDS", "title": "Prof. Dr.", "given": "Mary", "middle": "Sue Marie", "family": "von Miller", "suffix": "II, MD DDS", "initials": "M. S. M. M."} -{"name": "Prof. Dr. María Florencia Martina Cristina von Brühl Jr., MD DDS", "title": "Prof. Dr.", "given": "María", "middle": "Florencia Martina Cristina", "family": "von Brühl", "suffix": "Jr., MD DDS", "initials": "M. F. M. C. B."} -{"name": "Prof. Dr. von Bruhl, Ada Cornelia Cesar Martín Jr, M.D., Ph.D.", "order": "FAMILY_FIRST", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia Cesar Martín", "family": "von Bruhl", "suffix": "Jr, M.D., Ph.D.", "initials": "A. C. C. M. B."} -{"name": "Prof. Dr. von Brühl Ada Cornelia César Martín Jr, MD DDS", "order": "FAMILY_FIRST", "title": "Prof. Dr.", "given": "Brühl", "middle": "Ada Cornelia César Martín", "family": "von", "suffix": "Jr, MD DDS", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. A. C. C. M. v.", "capitalized_force": "Prof. Dr. Von Brühl Ada Cornelia César Martín Jr, MD DDS"} +{"name": "Prof. Dr. MD DDS Ada Cornelia César Martín von Brühl Jr", "title": "Prof. Dr.", "given": "MD", "middle": "DDS Ada Cornelia César Martín", "family": "von Brühl", "suffix": "Jr", "initials": "M. D. A. C. C. M. B.", "capitalized_force": "Prof. Dr. Md Dds Ada Cornelia César Martín von Brühl Jr", "generation": "Jr"} +{"name": "Prof. Dr. Mary Lou Cesare Martín von Brühl Jr., Dr. Ph.D", "title": "Prof. Dr. Dr.", "given": "Mary", "middle": "Lou Cesare Martín", "family": "von Brühl", "suffix": "Jr., Ph.D", "initials": "M. L. C. M. B.", "generation": "Jr.", "credentials": "Ph.D"} +{"name": "Prof. Dr. Mary Sue Marie von Miller II, MD DDS", "title": "Prof. Dr.", "given": "Mary", "middle": "Sue Marie", "family": "von Miller", "suffix": "II, MD DDS", "initials": "M. S. M. M.", "generation": "II", "credentials": "MD DDS"} +{"name": "Prof. Dr. María Florencia Martina Cristina von Brühl Jr., MD DDS", "title": "Prof. Dr.", "given": "María", "middle": "Florencia Martina Cristina", "family": "von Brühl", "suffix": "Jr., MD DDS", "initials": "M. F. M. C. B.", "generation": "Jr.", "credentials": "MD DDS"} +{"name": "Prof. Dr. von Bruhl, Ada Cornelia Cesar Martín Jr, M.D., Ph.D.", "order": "FAMILY_FIRST", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia Cesar Martín", "family": "von Bruhl", "suffix": "Jr, M.D., Ph.D.", "initials": "A. C. C. M. B.", "generation": "Jr", "credentials": "M.D., Ph.D."} +{"name": "Prof. Dr. von Brühl Ada Cornelia César Martín Jr, MD DDS", "order": "FAMILY_FIRST", "title": "Prof. Dr.", "given": "Brühl", "middle": "Ada Cornelia César Martín", "family": "von", "suffix": "Jr, MD DDS", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. A. C. C. M. v.", "capitalized_force": "Prof. Dr. Von Brühl Ada Cornelia César Martín Jr, MD DDS", "generation": "Jr", "credentials": "MD DDS"} {"name": "Prof. Dr. von Brühl González Domingo Ada Cornelia César Martín, M.D. DDS.", "order": "FAMILY_FIRST", "title": "Prof. Dr.", "given": "Brühl", "middle": "González Domingo Ada Cornelia César Martín", "family": "von", "suffix": "M.D. DDS.", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. G. D. A. C. C. M. v.", "capitalized_force": "Prof. Dr. Von Brühl González Domingo Ada Cornelia César Martín, M.D. DDS."} -{"name": "Prof. Dr. von Brühl María Florencia Martina Cristina Jr., MD DDS", "order": "FAMILY_FIRST", "title": "Prof. Dr.", "given": "Brühl", "middle": "María Florencia Martina Cristina", "family": "von", "suffix": "Jr., MD DDS", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. M. F. M. C. v.", "capitalized_force": "Prof. Dr. Von Brühl María Florencia Martina Cristina Jr., MD DDS"} +{"name": "Prof. Dr. von Brühl María Florencia Martina Cristina Jr., MD DDS", "order": "FAMILY_FIRST", "title": "Prof. Dr.", "given": "Brühl", "middle": "María Florencia Martina Cristina", "family": "von", "suffix": "Jr., MD DDS", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. M. F. M. C. v.", "capitalized_force": "Prof. Dr. Von Brühl María Florencia Martina Cristina Jr., MD DDS", "generation": "Jr.", "credentials": "MD DDS"} {"name": "Prof. Dr. von Brühl Plácido Domingo Ada Cornelia César Martín, MD DDS", "order": "FAMILY_FIRST", "title": "Prof. Dr.", "given": "Brühl", "middle": "Plácido Domingo Ada Cornelia César Martín", "family": "von", "suffix": "MD DDS", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. P. D. A. C. C. M. v.", "capitalized_force": "Prof. Dr. Von Brühl Plácido Domingo Ada Cornelia César Martín, MD DDS"} {"name": "Prof. Smith, Dr. John", "title": "Prof. Dr.", "given": "John", "family": "Smith", "initials": "J. S."} {"name": "Prof. Smith, John, PhD", "title": "Prof.", "given": "John", "family": "Smith", "suffix": "PhD", "initials": "J. S."} -{"name": "Prof. dr. Cornelia Margarita Sofia Aletta van den Berg jnr., MBChB PhD", "title": "Prof. dr.", "given": "Cornelia", "middle": "Margarita Sofia Aletta", "family": "van den Berg", "suffix": "jnr., MBChB PhD", "initials": "C. M. S. A. B.", "capitalized_force": "Prof. Dr. Cornelia Margarita Sofia Aletta van den Berg Jnr., MBChB PhD"} -{"name": "Prof. dr. MD Chirurgie dentară Eva-Eleonora Karl Hans von der Ruhr Jr.", "title": "Prof. dr.", "given": "MD", "middle": "Chirurgie dentară Eva-Eleonora Karl Hans", "family": "von der Ruhr", "suffix": "Jr.", "initials": "M. C. d. E. K. H. R.", "capitalized_force": "Prof. Dr. Md Chirurgie Dentară Eva-Eleonora Karl Hans von der Ruhr Jr."} +{"name": "Prof. dr. Cornelia Margarita Sofia Aletta van den Berg jnr., MBChB PhD", "title": "Prof. dr.", "given": "Cornelia", "middle": "Margarita Sofia Aletta", "family": "van den Berg", "suffix": "jnr., MBChB PhD", "initials": "C. M. S. A. B.", "capitalized_force": "Prof. Dr. Cornelia Margarita Sofia Aletta van den Berg Jnr., MBChB PhD", "generation": "jnr.", "credentials": "MBChB PhD"} +{"name": "Prof. dr. MD Chirurgie dentară Eva-Eleonora Karl Hans von der Ruhr Jr.", "title": "Prof. dr.", "given": "MD", "middle": "Chirurgie dentară Eva-Eleonora Karl Hans", "family": "von der Ruhr", "suffix": "Jr.", "initials": "M. C. d. E. K. H. R.", "capitalized_force": "Prof. Dr. Md Chirurgie Dentară Eva-Eleonora Karl Hans von der Ruhr Jr.", "generation": "Jr."} {"name": "Prof. Ɖr. MƉ Samʊwɛl fan ƉAM Fostɛɛŋ", "title": "Prof. Ɖr.", "given": "MƉ", "middle": "Samʊwɛl fan ƉAM", "family": "Fostɛɛŋ", "initials": "M. S. f. Ɖ. F.", "capitalized_force": "Prof. Ɖr. Mɖ Samʊwɛl Fan Ɖam Fostɛɛŋ"} {"name": "Prof. Ɖr. MƉ fan ƉAM ƉOMIŊGO Fostɛɛŋ Samʊwɛl", "order": "FAMILY_FIRST", "title": "Prof. Ɖr.", "given": "fan", "middle": "ƉAM ƉOMIŊGO Fostɛɛŋ Samʊwɛl", "family": "MƉ", "initials": "f. Ɖ. Ɖ. F. S. M.", "capitalized_force": "Prof. Ɖr. Mɖ Fan Ɖam Ɖomiŋgo Fostɛɛŋ Samʊwɛl"} {"name": "Prop. Dr. Ada Cornelia César Martín von Brühl González Domingo MD DDS", "title": "Prop. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl González Domingo", "suffix": "MD DDS", "initials": "A. C. C. M. B. G. D."} @@ -2931,13 +2934,13 @@ {"name": "Qodirov, Alisher Salimovich", "given": "Alisher", "middle": "Salimovich", "family": "Qodirov", "initials": "A. S. Q."} {"name": "Qodirov, Muhammad Yusuf", "given": "Muhammad", "middle": "Yusuf", "family": "Qodirov", "initials": "M. Y. Q."} {"name": "Queen Elizabeth", "given": "Queen", "family": "Elizabeth", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "Q. E."} -{"name": "Queen Elizabeth II", "given": "Queen", "family": "Elizabeth", "suffix": "II", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "Q. E."} +{"name": "Queen Elizabeth II", "given": "Queen", "family": "Elizabeth", "suffix": "II", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "Q. E.", "generation": "II"} {"name": "Queen Mother Elizabeth", "title": "Queen Mother", "given": "Elizabeth", "initials": "E."} {"name": "Quertenmont, Andreas Bernardus de", "given": "Andreas", "middle": "Bernardus", "family": "de Quertenmont", "initials": "A. B. Q."} {"name": "Quincy Adams", "given": "Quincy", "family": "Adams", "initials": "Q. A."} {"name": "Quinquela Martín, Benito", "given": "Benito", "family": "Quinquela Martín", "initials": "B. Q. M."} {"name": "RA DDS", "title": "RA", "family": "DDS", "initials": "D.", "capitalized": "Ra Dds"} -{"name": "RA PhD Jr., John", "given": "John", "family": "RA", "suffix": "PhD Jr.", "initials": "J. R.", "capitalized_force": "John Ra PhD Jr."} +{"name": "RA PhD Jr., John", "given": "John", "family": "RA", "suffix": "PhD Jr.", "initials": "J. R.", "capitalized_force": "John Ra PhD Jr.", "generation": "Jr.", "credentials": "PhD"} {"name": "RAM BAHADUR B.K.", "given": "RAM", "middle": "BAHADUR", "family": "B.K.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)"], "initials": "R. B. B.", "capitalized": "Ram Bahadur B.K."} {"name": "RONALD MACDONALD", "given": "RONALD", "family": "MACDONALD", "initials": "R. M.", "capitalized": "Ronald MacDonald"} {"name": "RONALD MCDONALD", "given": "RONALD", "family": "MCDONALD", "initials": "R. M.", "capitalized": "Ronald McDonald"} @@ -2971,7 +2974,7 @@ {"name": "Rethar", "given": "Rethar", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "R."} {"name": "Rev Andrews", "title": "Rev", "family": "Andrews", "initials": "A."} {"name": "Rev John A. Kenneth Doe", "title": "Rev", "given": "John", "middle": "A. Kenneth", "family": "Doe", "initials": "J. A. K. D."} -{"name": "Rev John A. Kenneth Doe III (Kenny)", "title": "Rev", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "III", "nickname": "Kenny", "initials": "J. A. K. D."} +{"name": "Rev John A. Kenneth Doe III (Kenny)", "title": "Rev", "given": "John", "middle": "A. Kenneth", "family": "Doe", "suffix": "III", "nickname": "Kenny", "initials": "J. A. K. D.", "generation": "III"} {"name": "Rev. John A. Kenneth Doe", "title": "Rev.", "given": "John", "middle": "A. Kenneth", "family": "Doe", "initials": "J. A. K. D."} {"name": "Rev. John Smith", "title": "Rev.", "given": "John", "family": "Smith", "initials": "J. S."} {"name": "Rev. Sr. Smith, Mary", "title": "Rev. Sr.", "given": "Mary", "family": "Smith", "initials": "M. S."} @@ -3012,7 +3015,7 @@ {"name": "Rosa María Ruiz", "given": "Rosa", "middle": "María", "family": "Ruiz", "initials": "R. M. R."} {"name": "Rossouw Irene", "order": "FAMILY_FIRST", "given": "Irene", "family": "Rossouw", "initials": "I. R."} {"name": "Rossouw, Irene", "given": "Irene", "family": "Rossouw", "initials": "I. R."} -{"name": "Rovira, Josep Carod i Jr.", "given": "Josep", "middle": "Carod", "family": "Rovira", "suffix": "i Jr.", "initials": "J. C. R.", "capitalized_force": "Josep Carod Rovira I Jr."} +{"name": "Rovira, Josep Carod i Jr.", "given": "Josep", "middle": "Carod", "family": "Rovira", "suffix": "i Jr.", "initials": "J. C. R.", "capitalized_force": "Josep Carod Rovira I Jr.", "generation": "i Jr."} {"name": "Royce, Ed", "given": "Ed", "family": "Royce", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "E. R."} {"name": "Rt. Hon. Paul E. Mary", "title": "Rt. Hon.", "given": "Paul", "middle": "E.", "family": "Mary", "initials": "P. E. M."} {"name": "Rubén Rojo y Pinto", "given": "Rubén", "family": "Rojo y Pinto", "initials": "R. R. P."} @@ -3023,7 +3026,7 @@ {"name": "Ruiz, Rosa María", "given": "Rosa", "middle": "María", "family": "Ruiz", "initials": "R. M. R."} {"name": "Rustemi, Ilir", "given": "Ilir", "family": "Rustemi", "initials": "I. R."} {"name": "Rustemi, Ilir I.", "order": "FAMILY_FIRST", "given": "Ilir", "middle": "I.", "family": "Rustemi", "initials": "I. I. R."} -{"name": "Ruth Ann Neta", "given": "Ruth", "family": "Ann", "suffix": "Neta", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "R. A."} +{"name": "Ruth Ann Neta", "given": "Ruth", "family": "Ann", "suffix": "Neta", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "R. A.", "generation": "Neta"} {"name": "Ryan, Dermot", "given": "Dermot", "family": "Ryan", "initials": "D. R."} {"name": "Róbert Gunnarsson", "given": "Róbert", "family": "Gunnarsson", "initials": "R. G."} {"name": "Rómulo González Irigoyen", "given": "Rómulo", "middle": "González", "family": "Irigoyen", "initials": "R. G. I."} @@ -3107,7 +3110,7 @@ {"name": "Selma Björnsdóttir", "given": "Selma", "family": "Björnsdóttir", "initials": "S. B."} {"name": "Senator \"Rick\" Edmonds", "title": "Senator", "family": "Edmonds", "nickname": "Rick", "initials": "E."} {"name": "Senator Wang Xiaoming", "title": "Senator", "given": "Wang", "family": "Xiaoming", "initials": "W. X."} -{"name": "Senior Judge Charles R. Butler, Jr", "title": "Senior Judge", "given": "Charles", "middle": "R.", "family": "Butler", "suffix": "Jr", "initials": "C. R. B."} +{"name": "Senior Judge Charles R. Butler, Jr", "title": "Senior Judge", "given": "Charles", "middle": "R.", "family": "Butler", "suffix": "Jr", "initials": "C. R. B.", "generation": "Jr"} {"name": "Senior Judge Harold D. Vietor", "title": "Senior Judge", "given": "Harold", "middle": "D.", "family": "Vietor", "initials": "H. D. V."} {"name": "Senior Judge Virgil Pittman", "title": "Senior Judge", "given": "Virgil", "family": "Pittman", "initials": "V. P."} {"name": "Sepp Anne", "order": "FAMILY_FIRST", "given": "Anne", "family": "Sepp", "initials": "A. S."} @@ -3137,12 +3140,12 @@ {"name": "Shemuʾel ben Ḥofni", "given": "Shemuʾel", "middle": "ben", "family": "Ḥofni", "initials": "S. b. Ḥ.", "capitalized_force": "Shemuʾel Ben Ḥofni"} {"name": "Shin Ae-ra", "given": "Shin", "family": "Ae-ra", "initials": "S. A.", "capitalized_force": "Shin Ae-Ra"} {"name": "Shirley Maclaine", "given": "Shirley", "family": "Maclaine", "initials": "S. M.", "capitalized_force": "Shirley MacLaine"} -{"name": "Shree Lalit Kumaar Bharati Jr, MP", "given": "Shree", "middle": "Lalit Kumaar", "family": "Bharati", "suffix": "Jr, MP", "initials": "S. L. K. B."} +{"name": "Shree Lalit Kumaar Bharati Jr, MP", "given": "Shree", "middle": "Lalit Kumaar", "family": "Bharati", "suffix": "Jr, MP", "initials": "S. L. K. B.", "generation": "Jr", "credentials": "MP"} {"name": "Shtober Zaziliya Hemish", "order": "FAMILY_FIRST", "given": "Zaziliya", "middle": "Hemish", "family": "Shtober", "initials": "Z. H. S."} {"name": "Shtober, Zaziliya Hemish", "given": "Zaziliya", "middle": "Hemish", "family": "Shtober", "initials": "Z. H. S."} -{"name": "Sidorov Ivan Petrovich Jr.", "given": "Sidorov", "middle": "Ivan", "family": "Petrovich", "suffix": "Jr.", "initials": "S. I. P."} -{"name": "Sig. Fabio Massimo Carlo Alberto Martini II, AD", "title": "Sig.", "given": "Fabio", "middle": "Massimo Carlo Alberto", "family": "Martini", "suffix": "II, AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "F. M. C. A. M."} -{"name": "Sig. Martini Fabio Massimo Carlo Alberto II, AD", "order": "FAMILY_FIRST", "title": "Sig.", "given": "Fabio", "middle": "Massimo Carlo Alberto", "family": "Martini", "suffix": "II, AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "F. M. C. A. M."} +{"name": "Sidorov Ivan Petrovich Jr.", "given": "Sidorov", "middle": "Ivan", "family": "Petrovich", "suffix": "Jr.", "initials": "S. I. P.", "generation": "Jr."} +{"name": "Sig. Fabio Massimo Carlo Alberto Martini II, AD", "title": "Sig.", "given": "Fabio", "middle": "Massimo Carlo Alberto", "family": "Martini", "suffix": "II, AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "F. M. C. A. M.", "generation": "II", "credentials": "AD"} +{"name": "Sig. Martini Fabio Massimo Carlo Alberto II, AD", "order": "FAMILY_FIRST", "title": "Sig.", "given": "Fabio", "middle": "Massimo Carlo Alberto", "family": "Martini", "suffix": "II, AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "F. M. C. A. M.", "generation": "II", "credentials": "AD"} {"name": "Sigfús Einarsson", "given": "Sigfús", "family": "Einarsson", "initials": "S. E."} {"name": "Sighvatur Þórðarson", "given": "Sighvatur", "family": "Þórðarson", "initials": "S. Þ."} {"name": "Signor Marco Rossi", "title": "Signor", "given": "Marco", "family": "Rossi", "initials": "M. R."} @@ -3188,7 +3191,7 @@ {"name": "Sir Van Johnson", "title": "Sir", "given": "Van", "family": "Johnson", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "V. J."} {"name": "Sir abdul Jr Smith", "title": "Sir", "given": "abdul", "middle": "Jr", "family": "Smith", "initials": "a. J. S.", "capitalized_force": "Sir Abdul Jr Smith"} {"name": "Sir abdul salam", "title": "Sir", "given": "abdul salam", "initials": "a. s.", "capitalized_force": "Sir Abdul Salam"} -{"name": "Sir abdul salam Jr", "title": "Sir", "given": "abdul salam", "suffix": "Jr", "initials": "a. s.", "capitalized_force": "Sir Abdul Salam Jr"} +{"name": "Sir abdul salam Jr", "title": "Sir", "given": "abdul salam", "suffix": "Jr", "initials": "a. s.", "capitalized_force": "Sir Abdul Salam Jr", "generation": "Jr"} {"name": "Sir abdul van der Berg", "title": "Sir", "given": "abdul", "family": "van der Berg", "initials": "a. B.", "capitalized_force": "Sir Abdul van der Berg"} {"name": "Sir de", "title": "Sir", "given": "de", "initials": "d.", "capitalized_force": "Sir De"} {"name": "Sir de Mesnil", "title": "Sir", "family": "de Mesnil", "initials": "M."} @@ -3198,7 +3201,7 @@ {"name": "Sita Kumari K.C", "given": "Sita", "middle": "Kumari", "family": "K.C", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)"], "initials": "S. K. K."} {"name": "Siv Friðleifsdóttir", "given": "Siv", "family": "Friðleifsdóttir", "initials": "S. F."} {"name": "Skapti Ólafsson", "given": "Skapti", "family": "Ólafsson", "initials": "S. Ó."} -{"name": "Skeggjason Hr. Geir Jón Magnús Brynjar yngri, þingmaður", "order": "FAMILY_FIRST", "given": "Hr.", "middle": "Geir Jón Magnús Brynjar", "family": "Skeggjason", "suffix": "yngri, þingmaður", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "H. G. J. M. B. S.", "capitalized_force": "Skeggjason Hr. Geir Jón Magnús Brynjar Yngri, Þingmaður"} +{"name": "Skeggjason Hr. Geir Jón Magnús Brynjar yngri, þingmaður", "order": "FAMILY_FIRST", "given": "Hr.", "middle": "Geir Jón Magnús Brynjar", "family": "Skeggjason", "suffix": "yngri, þingmaður", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "H. G. J. M. B. S.", "capitalized_force": "Skeggjason Hr. Geir Jón Magnús Brynjar Yngri, Þingmaður", "generation": "yngri", "credentials": "þingmaður"} {"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"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "S."} @@ -3208,22 +3211,22 @@ {"name": "Smith , John", "given": "John", "family": "Smith", "initials": "J. S."} {"name": "Smith Cecilia Angela", "order": "FAMILY_FIRST", "given": "Cecilia", "middle": "Angela", "family": "Smith", "initials": "C. A. S."} {"name": "Smith Dr", "given": "Smith", "family": "Dr", "initials": "S. D."} -{"name": "Smith Jones Jr., J.A.", "given": "J.A.", "family": "Smith Jones", "suffix": "Jr.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)"], "initials": "J. S. J."} -{"name": "Smith Jones, Ph. D. Jr.", "given": "Smith", "family": "Jones", "suffix": "Ph. D. Jr.", "initials": "S. J."} -{"name": "Smith Jr.", "given": "Smith", "suffix": "Jr.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "S."} -{"name": "Smith Jr., A.B.", "given": "A.B.", "family": "Smith", "suffix": "Jr.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)"], "initials": "A. S."} -{"name": "Smith Jr., John", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S."} -{"name": "Smith Jr., MA", "family": "Smith", "suffix": "Jr., MA", "initials": "S."} -{"name": "Smith Jr., Ma", "given": "Ma", "family": "Smith", "suffix": "Jr.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "M. S."} -{"name": "Smith Jr., Mr.", "title": "Mr.", "family": "Smith", "suffix": "Jr.", "initials": "S."} +{"name": "Smith Jones Jr., J.A.", "given": "J.A.", "family": "Smith Jones", "suffix": "Jr.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)"], "initials": "J. S. J.", "generation": "Jr."} +{"name": "Smith Jones, Ph. D. Jr.", "given": "Smith", "family": "Jones", "suffix": "Ph. D. Jr.", "initials": "S. J.", "generation": "Jr.", "credentials": "Ph. D."} +{"name": "Smith Jr.", "given": "Smith", "suffix": "Jr.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "S.", "generation": "Jr."} +{"name": "Smith Jr., A.B.", "given": "A.B.", "family": "Smith", "suffix": "Jr.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)"], "initials": "A. S.", "generation": "Jr."} +{"name": "Smith Jr., John", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} +{"name": "Smith Jr., MA", "family": "Smith", "suffix": "Jr., MA", "initials": "S.", "generation": "Jr.", "credentials": "MA"} +{"name": "Smith Jr., Ma", "given": "Ma", "family": "Smith", "suffix": "Jr.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "M. S.", "generation": "Jr."} +{"name": "Smith Jr., Mr.", "title": "Mr.", "family": "Smith", "suffix": "Jr.", "initials": "S.", "generation": "Jr."} {"name": "Smith Juan Vega", "given": "Smith", "middle": "Juan", "family": "Vega", "initials": "S. J. V."} {"name": "Smith Pharm D, John", "given": "John", "family": "Smith Pharm D", "initials": "J. S. P. D."} {"name": "Smith Prof.", "title": "Prof.", "family": "Smith", "initials": "S."} {"name": "Smith Sir.", "title": "Sir.", "given": "Smith", "initials": "S."} {"name": "Smith V, AD", "given": "AD", "family": "Smith V", "initials": "A. S. V.", "capitalized_force": "Ad Smith V"} {"name": "Smith V, John", "given": "John", "family": "Smith V", "initials": "J. S. V."} -{"name": "Smith VI, AD", "given": "AD", "family": "Smith", "suffix": "VI", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "A. S.", "capitalized_force": "Ad Smith VI"} -{"name": "Smith VI, John", "given": "John", "family": "Smith", "suffix": "VI", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S."} +{"name": "Smith VI, AD", "given": "AD", "family": "Smith", "suffix": "VI", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "A. S.", "capitalized_force": "Ad Smith VI", "generation": "VI"} +{"name": "Smith VI, John", "given": "John", "family": "Smith", "suffix": "VI", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "J. S.", "generation": "VI"} {"name": "Smith Vi, John", "given": "John", "family": "Smith Vi", "initials": "J. S. V."} {"name": "Smith and Pope", "given": "Smith and Pope", "ambiguities": ["TITLE_OR_NAME"], "alternatives": ["TITLE_OR_NAME: title as title (vocabulary)"], "initials": "S. P."} {"name": "Smith born", "given": "Smith", "family": "born", "initials": "S. b.", "capitalized_force": "Smith Born"} @@ -3244,9 +3247,9 @@ {"name": "Smith, Do. John", "title": "Do.", "given": "John", "family": "Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. S."} {"name": "Smith, Dr.", "title": "Dr.", "family": "Smith", "initials": "S."} {"name": "Smith, Dr. John", "title": "Dr.", "given": "John", "family": "Smith", "initials": "J. S."} -{"name": "Smith, Dr. Jr.", "title": "Dr.", "family": "Smith", "suffix": "Jr.", "initials": "S."} +{"name": "Smith, Dr. Jr.", "title": "Dr.", "family": "Smith", "suffix": "Jr.", "initials": "S.", "generation": "Jr."} {"name": "Smith, E.S.Q.", "given": "E.S.Q.", "family": "Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)"], "initials": "E. S."} -{"name": "Smith, E.T., Jr.", "given": "E.T.", "family": "Smith", "suffix": "Jr.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)"], "initials": "E. S."} +{"name": "Smith, E.T., Jr.", "given": "E.T.", "family": "Smith", "suffix": "Jr.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)"], "initials": "E. S.", "generation": "Jr."} {"name": "Smith, Esq.", "family": "Smith", "suffix": "Esq.", "initials": "S."} {"name": "Smith, Esq. John", "family": "Smith", "suffix": "Esq. John", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "S."} {"name": "Smith, Freiherr von Berg MA Jones", "title": "Freiherr", "given": "von Berg", "family": "Smith", "suffix": "MA Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (position)"], "initials": "v. B. S.", "capitalized_force": "Freiherr Von Berg Smith MA Jones"} @@ -3260,52 +3263,53 @@ {"name": "Smith, John (MA)", "given": "John", "family": "Smith", "suffix": "MA", "initials": "J. S."} {"name": "Smith, John ,", "given": "John", "family": "Smith", "initials": "J. S."} {"name": "Smith, John - Paul", "given": "John", "middle": "- Paul", "family": "Smith", "initials": "J. -. P. S."} -{"name": "Smith, John E, III, Jr", "given": "John", "middle": "E", "family": "Smith", "suffix": "III, Jr", "initials": "J. E. S."} -{"name": "Smith, John I", "given": "John", "family": "Smith", "suffix": "I", "initials": "J. S."} -{"name": "Smith, John Jr.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S."} +{"name": "Smith, John E, III, Jr", "given": "John", "middle": "E", "family": "Smith", "suffix": "III, Jr", "initials": "J. E. S.", "generation": "III, Jr"} +{"name": "Smith, John I", "given": "John", "family": "Smith", "suffix": "I", "initials": "J. S.", "generation": "I"} +{"name": "Smith, John Jr.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} {"name": "Smith, John MA Jones", "given": "John", "family": "Smith", "suffix": "MA Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (position)"], "initials": "J. S."} {"name": "Smith, John MD/PhD", "given": "John", "family": "Smith", "suffix": "MD/PhD", "initials": "J. S."} {"name": "Smith, John MEng", "given": "John", "middle": "MEng", "family": "Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. M. S.", "capitalized_force": "John Meng Smith"} {"name": "Smith, John Ma", "given": "John", "middle": "Ma", "family": "Smith", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "J. M. S."} -{"name": "Smith, John PSM I, Jr.", "given": "John", "middle": "I", "family": "Smith", "suffix": "PSM, Jr.", "initials": "J. I. S."} -{"name": "Smith, John PhD I, Jr.", "given": "John", "middle": "I", "family": "Smith", "suffix": "PhD, Jr.", "initials": "J. I. S."} -{"name": "Smith, John PhD I.", "given": "John", "family": "Smith", "suffix": "PhD I.", "initials": "J. S."} -{"name": "Smith, John PhD I., Jr.", "given": "John", "middle": "I.", "family": "Smith", "suffix": "PhD, Jr.", "initials": "J. I. S."} +{"name": "Smith, John PSM I, Jr.", "given": "John", "middle": "I", "family": "Smith", "suffix": "PSM, Jr.", "initials": "J. I. S.", "generation": "Jr.", "credentials": "PSM"} +{"name": "Smith, John PhD I, Jr.", "given": "John", "middle": "I", "family": "Smith", "suffix": "PhD, Jr.", "initials": "J. I. S.", "generation": "Jr.", "credentials": "PhD"} +{"name": "Smith, John PhD I.", "given": "John", "family": "Smith", "suffix": "PhD I.", "initials": "J. S.", "generation": "I.", "credentials": "PhD"} +{"name": "Smith, John PhD I., Jr.", "given": "John", "middle": "I.", "family": "Smith", "suffix": "PhD, Jr.", "initials": "J. I. S.", "generation": "Jr.", "credentials": "PhD"} {"name": "Smith, John PhD Jones", "given": "John", "family": "Smith", "suffix": "PhD Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (position)"], "initials": "J. S."} -{"name": "Smith, John PhD de Jr.", "given": "John", "family": "de Smith", "suffix": "PhD, Jr.", "initials": "J. S."} -{"name": "Smith, John PhD É, Jr.", "given": "John", "family": "Smith", "suffix": "PhD É, Jr.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as middle (shape)"], "initials": "J. S."} +{"name": "Smith, John PhD de Jr.", "given": "John", "family": "de Smith", "suffix": "PhD, Jr.", "initials": "J. S.", "generation": "Jr.", "credentials": "PhD"} +{"name": "Smith, John PhD É, Jr.", "given": "John", "family": "Smith", "suffix": "PhD É, Jr.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as middle (shape)"], "initials": "J. S.", "generation": "Jr.", "credentials": "PhD É"} {"name": "Smith, John Pharm D", "given": "John", "family": "Smith", "suffix": "Pharm D", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (position)"], "initials": "J. S."} {"name": "Smith, John Pharm D Jones", "given": "John", "family": "Smith", "suffix": "Pharm D Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (position)", "SUFFIX_OR_NAME: name as middle (position)"], "initials": "J. S."} {"name": "Smith, John Prof.", "title": "Prof.", "given": "John", "family": "Smith", "initials": "J. S."} {"name": "Smith, John Sam E.", "given": "John", "family": "Smith", "suffix": "Sam E.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (position)"], "initials": "J. S.", "capitalized_force": "John Smith SAM E."} -{"name": "Smith, John V", "given": "John", "family": "Smith", "suffix": "V", "initials": "J. S."} +{"name": "Smith, John V", "given": "John", "family": "Smith", "suffix": "V", "initials": "J. S.", "generation": "V"} {"name": "Smith, John V MD", "given": "John", "middle": "V", "family": "Smith", "suffix": "MD", "initials": "J. V. S."} -{"name": "Smith, John V, Jr.", "given": "John", "middle": "V", "family": "Smith", "suffix": "Jr.", "initials": "J. V. S."} +{"name": "Smith, John V, Jr.", "given": "John", "middle": "V", "family": "Smith", "suffix": "Jr.", "initials": "J. V. S.", "generation": "Jr."} {"name": "Smith, John V.", "given": "John", "middle": "V.", "family": "Smith", "initials": "J. V. S."} {"name": "Smith, John V;", "given": "John", "middle": "V;", "family": "Smith", "initials": "J. V. S."} -{"name": "Smith, John VI", "given": "John", "family": "Smith", "suffix": "VI", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (position)"], "initials": "J. S."} -{"name": "Smith, John VI Jones", "given": "John", "family": "Smith", "suffix": "VI Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (position)", "SUFFIX_OR_NAME: name as middle (position)"], "initials": "J. S."} -{"name": "Smith, John VI MD", "given": "John", "family": "Smith", "suffix": "VI MD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (position)"], "initials": "J. S."} +{"name": "Smith, John VI", "given": "John", "family": "Smith", "suffix": "VI", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (position)"], "initials": "J. S.", "generation": "VI"} +{"name": "Smith, John VI Jones", "given": "John", "family": "Smith", "suffix": "VI Jones", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (position)", "SUFFIX_OR_NAME: name as middle (position)"], "initials": "J. S.", "generation": "VI", "credentials": "Jones"} +{"name": "Smith, John VI MD", "given": "John", "family": "Smith", "suffix": "VI MD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (position)"], "initials": "J. S.", "generation": "VI", "credentials": "MD"} {"name": "Smith, John Vi", "given": "John", "middle": "Vi", "family": "Smith", "initials": "J. V. S."} {"name": "Smith, John X", "given": "John", "middle": "X", "family": "Smith", "initials": "J. X. S."} -{"name": "Smith, John e, III, Jr", "given": "John", "middle": "e", "family": "Smith", "suffix": "III, Jr", "initials": "J. e. S."} +{"name": "Smith, John e, III, Jr", "given": "John", "middle": "e", "family": "Smith", "suffix": "III, Jr", "initials": "J. e. S.", "generation": "III, Jr"} {"name": "Smith, John van der Berg Prof.", "title": "Prof.", "given": "John", "middle": "van der Berg", "family": "Smith", "initials": "J. B. S."} {"name": "Smith, John, Bob (MA)", "given": "John", "family": "Smith", "suffix": "Bob MA", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S."} -{"name": "Smith, John, Extra, Jr.", "given": "John", "family": "Smith", "suffix": "Extra, Jr.", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S."} -{"name": "Smith, John, Jr.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S."} +{"name": "Smith, John, Extra, Jr.", "given": "John", "family": "Smith", "suffix": "Extra, Jr.", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "generation": "Jr.", "credentials": "Extra"} +{"name": "Smith, John, Jr.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} +{"name": "Smith, John, Jr., MD, Esq.", "given": "John", "family": "Smith", "suffix": "Jr., MD, Esq.", "initials": "J. S.", "generation": "Jr.", "credentials": "MD, Esq."} {"name": "Smith, John, MD - PhD", "given": "John", "family": "Smith", "suffix": "MD, PhD", "initials": "J. S."} {"name": "Smith, John, MD - née Jones Smith", "given": "John", "family": "Smith", "suffix": "MD, née Jones Smith", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "capitalized_force": "John Smith MD, Née Jones Smith"} {"name": "Smith, John, PhD - and MD", "given": "John", "family": "Smith", "suffix": "PhD, and MD", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S."} -{"name": "Smith, John, PhD - i Soler", "given": "John", "family": "Smith", "suffix": "PhD, i Soler", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "capitalized_force": "John Smith PhD, I Soler"} +{"name": "Smith, John, PhD - i Soler", "given": "John", "family": "Smith", "suffix": "PhD, i Soler", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "capitalized_force": "John Smith PhD, I Soler", "generation": "i", "credentials": "PhD, Soler"} {"name": "Smith, John, PhD née Jones", "given": "John", "family": "Smith", "suffix": "PhD née Jones", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "capitalized_force": "John Smith PhD Née Jones"} {"name": "Smith, John, Prof.", "title": "Prof.", "given": "John", "family": "Smith", "initials": "J. S."} -{"name": "Smith, John, Puig - i Soler", "given": "John", "family": "Smith", "suffix": "Puig, i Soler", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "capitalized_force": "John Smith Puig, I Soler"} +{"name": "Smith, John, Puig - i Soler", "given": "John", "family": "Smith", "suffix": "Puig, i Soler", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "capitalized_force": "John Smith Puig, I Soler", "generation": "i", "credentials": "Puig, Soler"} {"name": "Smith, John, X.Y.Z. (MA)", "given": "John", "family": "Smith", "suffix": "X.Y.Z. MA", "initials": "J. S."} {"name": "Smith, John, and", "given": "John", "family": "Smith", "suffix": "and", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S."} {"name": "Smith, John; MD", "given": "John;", "family": "Smith", "suffix": "MD", "initials": "J. S."} -{"name": "Smith, Jr.", "family": "Smith", "suffix": "Jr.", "initials": "S."} -{"name": "Smith, Jr., John", "family": "Smith", "suffix": "Jr., John", "ambiguities": ["COMMA_STRUCTURE"], "initials": "S."} -{"name": "Smith, Jr., PhD", "family": "Smith", "suffix": "Jr., PhD", "initials": "S."} +{"name": "Smith, Jr.", "family": "Smith", "suffix": "Jr.", "initials": "S.", "generation": "Jr."} +{"name": "Smith, Jr., John", "family": "Smith", "suffix": "Jr., John", "ambiguities": ["COMMA_STRUCTURE"], "initials": "S.", "generation": "Jr.", "credentials": "John"} +{"name": "Smith, Jr., PhD", "family": "Smith", "suffix": "Jr., PhD", "initials": "S.", "generation": "Jr.", "credentials": "PhD"} {"name": "Smith, LEED AP", "given": "LEED", "middle": "AP", "family": "Smith", "initials": "L. A. S.", "capitalized_force": "Leed Ap Smith"} {"name": "Smith, MA", "family": "Smith", "suffix": "MA", "initials": "S."} {"name": "Smith, MD", "family": "Smith", "suffix": "MD", "initials": "S."} @@ -3323,17 +3327,17 @@ {"name": "Smith, Ms RA Ma", "title": "Ms RA", "given": "Ma", "family": "Smith", "initials": "M. S.", "capitalized_force": "Ms Ra Ma Smith"} {"name": "Smith, Ms.", "family": "Smith", "suffix": "Ms.", "initials": "S.", "capitalized_force": "Smith, MS."} {"name": "Smith, Ms. Jane", "title": "Ms.", "given": "Jane", "family": "Smith", "initials": "J. S."} -{"name": "Smith, PSM I", "family": "Smith", "suffix": "PSM I", "initials": "S."} -{"name": "Smith, PSM I.", "family": "Smith", "suffix": "PSM I.", "initials": "S."} +{"name": "Smith, PSM I", "family": "Smith", "suffix": "PSM I", "initials": "S.", "generation": "I", "credentials": "PSM"} +{"name": "Smith, PSM I.", "family": "Smith", "suffix": "PSM I.", "initials": "S.", "generation": "I.", "credentials": "PSM"} {"name": "Smith, PU-PH", "given": "PU-PH", "family": "Smith", "initials": "P. S.", "capitalized_force": "Pu-Ph Smith"} {"name": "Smith, Ph. D.", "family": "Smith", "suffix": "Ph. D.", "initials": "S."} -{"name": "Smith, Ph. D. III", "family": "Smith", "suffix": "Ph. D. III", "initials": "S."} -{"name": "Smith, Ph. D. Jr.", "family": "Smith", "suffix": "Ph. D. Jr.", "initials": "S."} -{"name": "Smith, Ph. D. Jr. MD", "family": "Smith", "suffix": "Ph. D. Jr. MD", "initials": "S."} +{"name": "Smith, Ph. D. III", "family": "Smith", "suffix": "Ph. D. III", "initials": "S.", "generation": "III", "credentials": "Ph. D."} +{"name": "Smith, Ph. D. Jr.", "family": "Smith", "suffix": "Ph. D. Jr.", "initials": "S.", "generation": "Jr.", "credentials": "Ph. D."} +{"name": "Smith, Ph. D. Jr. MD", "family": "Smith", "suffix": "Ph. D. Jr. MD", "initials": "S.", "generation": "Jr.", "credentials": "Ph. D., MD"} {"name": "Smith, Ph. D. MD", "family": "Smith", "suffix": "Ph. D. MD", "initials": "S."} -{"name": "Smith, Ph.D. Jr.", "family": "Smith", "suffix": "Ph.D. Jr.", "initials": "S."} +{"name": "Smith, Ph.D. Jr.", "family": "Smith", "suffix": "Ph.D. Jr.", "initials": "S.", "generation": "Jr.", "credentials": "Ph.D."} {"name": "Smith, PhD", "family": "Smith", "suffix": "PhD", "initials": "S."} -{"name": "Smith, PhD Jr.", "family": "Smith", "suffix": "PhD Jr.", "initials": "S."} +{"name": "Smith, PhD Jr.", "family": "Smith", "suffix": "PhD Jr.", "initials": "S.", "generation": "Jr.", "credentials": "PhD"} {"name": "Smith, PhD MEng", "family": "Smith", "suffix": "PhD MEng", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (declared)"], "initials": "S.", "capitalized_force": "Smith, PhD MENG"} {"name": "Smith, PhD Ma", "family": "Smith", "suffix": "PhD Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (declared)"], "initials": "S.", "capitalized_force": "Smith, PhD MA"} {"name": "Smith, Pharm D", "given": "Pharm", "middle": "D", "family": "Smith", "initials": "P. D. S."} @@ -3342,7 +3346,7 @@ {"name": "Smith, RN - CRNA", "family": "Smith", "suffix": "RN - CRNA", "initials": "S."} {"name": "Smith, Sgt Major", "title": "Sgt Major", "family": "Smith", "initials": "S."} {"name": "Smith, Sir", "title": "Sir", "given": "Smith", "initials": "S."} -{"name": "Smith, Sr.", "family": "Smith", "suffix": "Sr.", "initials": "S."} +{"name": "Smith, Sr.", "family": "Smith", "suffix": "Sr.", "initials": "S.", "generation": "Sr."} {"name": "Smith, V; MD", "given": "V;", "family": "Smith", "suffix": "MD", "initials": "V. S."} {"name": "Smith, XYZ", "given": "XYZ", "family": "Smith", "initials": "X. S.", "capitalized_force": "Xyz Smith"} {"name": "Smith, de Mesnil Jean", "family": "Smith de Mesnil Jean", "initials": "S. M. J."} @@ -3366,8 +3370,8 @@ {"name": "Spewack, Bella Cohen", "given": "Bella", "middle": "Cohen", "family": "Spewack", "initials": "B. C. S."} {"name": "Sr US District Judge Richard G Kopf", "title": "Sr US District Judge", "given": "Richard", "middle": "G", "family": "Kopf", "initials": "R. G. K.", "capitalized_force": "Sr Us District Judge Richard G Kopf"} {"name": "Sr. Antoni Baìngiu Torchitòriu Comita de Lacon Gunale", "title": "Sr.", "given": "Antoni", "middle": "Baìngiu Torchitòriu Comita", "family": "de Lacon Gunale", "initials": "A. B. T. C. L. G."} -{"name": "Sr. José Pedro Eduardo da Silva Jr., MP", "title": "Sr.", "given": "José", "middle": "Pedro Eduardo", "family": "da Silva", "suffix": "Jr., MP", "initials": "J. P. E. S."} -{"name": "Sr. Miguel Ángel Juan Antonio Pablo II", "title": "Sr.", "given": "Miguel", "middle": "Ángel Juan Antonio", "family": "Pablo", "suffix": "II", "initials": "M. Á. J. A. P."} +{"name": "Sr. José Pedro Eduardo da Silva Jr., MP", "title": "Sr.", "given": "José", "middle": "Pedro Eduardo", "family": "da Silva", "suffix": "Jr., MP", "initials": "J. P. E. S.", "generation": "Jr.", "credentials": "MP"} +{"name": "Sr. Miguel Ángel Juan Antonio Pablo II", "title": "Sr.", "given": "Miguel", "middle": "Ángel Juan Antonio", "family": "Pablo", "suffix": "II", "initials": "M. Á. J. A. P.", "generation": "II"} {"name": "Sr. Xosé Carlos Francisco Xavier de Castro Sáez", "title": "Sr.", "given": "Xosé", "middle": "Carlos Francisco Xavier", "family": "de Castro Sáez", "initials": "X. C. F. X. C. S."} {"name": "Srta. Andréia da Silva", "title": "Srta.", "given": "Andréia", "family": "da Silva", "initials": "A. S."} {"name": "St Clair", "title": "St", "family": "Clair", "initials": "C."} @@ -3482,14 +3486,14 @@ {"name": "The Rt Hon Kenneth Clarke QC MP, HMG", "title": "The Rt Hon", "given": "Kenneth", "family": "Clarke", "suffix": "QC MP, HMG", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "K. C.", "capitalized_force": "the Rt Hon Kenneth Clarke QC MP, HMG"} {"name": "Theobald, Dietrich von", "given": "Dietrich", "family": "von Theobald", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "D. T."} {"name": "Theodor von Schön", "given": "Theodor", "family": "von Schön", "initials": "T. S."} -{"name": "Thibaut II.", "given": "Thibaut", "suffix": "II.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "T."} +{"name": "Thibaut II.", "given": "Thibaut", "suffix": "II.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "T.", "generation": "II."} {"name": "Thomas I.", "given": "Thomas", "family": "I.", "initials": "T. I."} {"name": "Thorkild Fjeldsted", "given": "Thorkild", "family": "Fjeldsted", "initials": "T. F."} {"name": "Thurn und Taxis, Mathilde Therese von", "given": "Mathilde", "middle": "Therese", "family": "von Thurn und Taxis", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "M. T. T. T."} {"name": "Théodore Agrippa d'Aubigné", "given": "Théodore", "middle": "Agrippa", "family": "d'Aubigné", "initials": "T. A. d.", "capitalized_force": "Théodore Agrippa D'Aubigné"} {"name": "Tiburcio Pérez Cuervo", "given": "Tiburcio", "middle": "Pérez", "family": "Cuervo", "initials": "T. P. C."} {"name": "Tisza, István", "given": "István", "family": "Tisza", "initials": "I. T."} -{"name": "Title First Middle Middle Last, Jr.", "given": "Title", "middle": "First Middle Middle", "family": "Last", "suffix": "Jr.", "initials": "T. F. M. M. L."} +{"name": "Title First Middle Middle Last, Jr.", "given": "Title", "middle": "First Middle Middle", "family": "Last", "suffix": "Jr.", "initials": "T. F. M. M. L.", "generation": "Jr."} {"name": "Tito, Santi di", "given": "Santi", "family": "di Tito", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "S. T."} {"name": "Tn. Syed Abd Aziz Syed A Ismail Petra MP", "title": "Tn.", "given": "Syed", "middle": "Abd Aziz Syed A Ismail", "family": "Petra", "suffix": "MP", "initials": "S. A. A. S. A. I. P."} {"name": "Tokugawa, Nariaki", "given": "Nariaki", "family": "Tokugawa", "initials": "N. T."} @@ -3561,23 +3565,23 @@ {"name": "Vega Smith", "given": "Vega", "family": "Smith", "initials": "V. S."} {"name": "Vega, Juan de la", "given": "Juan", "family": "de la Vega", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "J. V."} {"name": "Velasquez y Garcia, Dr. Juan", "title": "Dr.", "given": "Juan", "family": "Velasquez y Garcia", "initials": "J. V. G."} -{"name": "Velasquez y Garcia, Dr. Juan III", "title": "Dr.", "given": "Juan", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. V. G."} +{"name": "Velasquez y Garcia, Dr. Juan III", "title": "Dr.", "given": "Juan", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. V. G.", "generation": "III"} {"name": "Velasquez y Garcia, Dr. Juan Q.", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "initials": "J. Q. V. G."} -{"name": "Velasquez y Garcia, Dr. Juan Q. III", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. Q. V. G."} +{"name": "Velasquez y Garcia, Dr. Juan Q. III", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. Q. V. G.", "generation": "III"} {"name": "Velasquez y Garcia, Dr. Juan Q. Xavier", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "initials": "J. Q. X. V. G."} -{"name": "Velasquez y Garcia, Dr. Juan Q. Xavier III", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. Q. X. V. G."} -{"name": "Velasquez y Garcia, Dr. Juan Q. Xavier, Jr.", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. Q. X. V. G."} -{"name": "Velasquez y Garcia, Dr. Juan Q., Jr.", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. Q. V. G."} -{"name": "Velasquez y Garcia, Dr. Juan, Jr.", "title": "Dr.", "given": "Juan", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. V. G."} +{"name": "Velasquez y Garcia, Dr. Juan Q. Xavier III", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. Q. X. V. G.", "generation": "III"} +{"name": "Velasquez y Garcia, Dr. Juan Q. Xavier, Jr.", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. Q. X. V. G.", "generation": "Jr."} +{"name": "Velasquez y Garcia, Dr. Juan Q., Jr.", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. Q. V. G.", "generation": "Jr."} +{"name": "Velasquez y Garcia, Dr. Juan, Jr.", "title": "Dr.", "given": "Juan", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. V. G.", "generation": "Jr."} {"name": "Velasquez y Garcia, Juan", "given": "Juan", "family": "Velasquez y Garcia", "initials": "J. V. G."} -{"name": "Velasquez y Garcia, Juan III", "given": "Juan", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. V. G."} +{"name": "Velasquez y Garcia, Juan III", "given": "Juan", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. V. G.", "generation": "III"} {"name": "Velasquez y Garcia, Juan Q.", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "initials": "J. Q. V. G."} -{"name": "Velasquez y Garcia, Juan Q. III", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. Q. V. G."} +{"name": "Velasquez y Garcia, Juan Q. III", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. Q. V. G.", "generation": "III"} {"name": "Velasquez y Garcia, Juan Q. Xavier", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "initials": "J. Q. X. V. G."} -{"name": "Velasquez y Garcia, Juan Q. Xavier III", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. Q. X. V. G."} -{"name": "Velasquez y Garcia, Juan Q. Xavier, Jr.", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. Q. X. V. G."} -{"name": "Velasquez y Garcia, Juan Q., Jr.", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. Q. V. G."} -{"name": "Velasquez y Garcia, Juan, Jr.", "given": "Juan", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. V. G."} +{"name": "Velasquez y Garcia, Juan Q. Xavier III", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "suffix": "III", "initials": "J. Q. X. V. G.", "generation": "III"} +{"name": "Velasquez y Garcia, Juan Q. Xavier, Jr.", "given": "Juan", "middle": "Q. Xavier", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. Q. X. V. G.", "generation": "Jr."} +{"name": "Velasquez y Garcia, Juan Q., Jr.", "given": "Juan", "middle": "Q.", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. Q. V. G.", "generation": "Jr."} +{"name": "Velasquez y Garcia, Juan, Jr.", "given": "Juan", "family": "Velasquez y Garcia", "suffix": "Jr.", "initials": "J. V. G.", "generation": "Jr."} {"name": "Venerable Ananda", "title": "Venerable", "family": "Ananda", "initials": "A."} {"name": "Vicente Becerra Vaca", "given": "Vicente", "middle": "Becerra", "family": "Vaca", "initials": "V. B. V."} {"name": "Vicente Gómez Mier", "given": "Vicente", "middle": "Gómez", "family": "Mier", "initials": "V. G. M."} @@ -3599,7 +3603,7 @@ {"name": "Vuk", "order": "FAMILY_FIRST", "family": "Vuk", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "V."} {"name": "Vélez de Guevara, Luis", "given": "Luis", "family": "Vélez de Guevara", "initials": "L. V. G."} {"name": "Víctor Luna Gómez", "given": "Víctor", "middle": "Luna", "family": "Gómez", "initials": "V. L. G."} -{"name": "WOOT ALFRED DOUGHERTY III", "given": "WOOT", "middle": "ALFRED", "family": "DOUGHERTY", "suffix": "III", "initials": "W. A. D.", "capitalized": "Woot Alfred Dougherty III"} +{"name": "WOOT ALFRED DOUGHERTY III", "given": "WOOT", "middle": "ALFRED", "family": "DOUGHERTY", "suffix": "III", "initials": "W. A. D.", "capitalized": "Woot Alfred Dougherty III", "generation": "III"} {"name": "Waldburg-Truchsess, Friedrich Ludwig von", "given": "Friedrich", "middle": "Ludwig", "family": "von Waldburg-Truchsess", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "F. L. W."} {"name": "Wallin Johan Harald", "order": "FAMILY_FIRST", "given": "Johan", "middle": "Harald", "family": "Wallin", "initials": "J. H. W."} {"name": "Wallin, Johan Harald", "order": "FAMILY_FIRST", "given": "Johan", "middle": "Harald", "family": "Wallin", "initials": "J. H. W."} @@ -3607,11 +3611,11 @@ {"name": "Waly Mari shu Halimatu", "order": "FAMILY_FIRST", "given": "Mari", "middle": "shu Halimatu", "family": "Waly", "initials": "M. s. H. W.", "capitalized_force": "Waly Mari Shu Halimatu"} {"name": "Wang M.Eng.", "given": "Wang", "suffix": "M.Eng.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "W.", "capitalized_force": "Wang M.ENG."} {"name": "Wang Ma PhD", "given": "Wang", "family": "Ma", "suffix": "PhD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "W. M."} -{"name": "Wang Xiaoming, Jr.", "given": "Wang", "family": "Xiaoming", "suffix": "Jr.", "initials": "W. X."} +{"name": "Wang Xiaoming, Jr.", "given": "Wang", "family": "Xiaoming", "suffix": "Jr.", "initials": "W. X.", "generation": "Jr."} {"name": "Wang, Si", "given": "Si", "family": "Wang", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "S. W."} {"name": "Wang, Zhaojun", "given": "Zhaojun", "family": "Wang", "initials": "Z. W."} {"name": "Wanjiru wa Kamau", "given": "Wanjiru", "middle": "wa", "family": "Kamau", "initials": "W. w. K.", "capitalized_force": "Wanjiru Wa Kamau"} -{"name": "Washington Jr. MD, Franklin", "given": "Franklin", "family": "Washington", "suffix": "Jr. MD", "initials": "F. W."} +{"name": "Washington Jr. MD, Franklin", "given": "Franklin", "family": "Washington", "suffix": "Jr. MD", "initials": "F. W.", "generation": "Jr.", "credentials": "MD"} {"name": "Watson John Hamish", "order": "FAMILY_FIRST", "given": "John", "middle": "Hamish", "family": "Watson", "initials": "J. H. W."} {"name": "Watson John Hámish", "order": "FAMILY_FIRST", "given": "John", "middle": "Hámish", "family": "Watson", "initials": "J. H. W."} {"name": "Watson Mary Sue Hamish", "order": "FAMILY_FIRST", "given": "Mary", "middle": "Sue Hamish", "family": "Watson", "initials": "M. S. H. W."} @@ -3633,7 +3637,7 @@ {"name": "Wijaya, Maria", "order": "FAMILY_FIRST", "given": "Maria", "family": "Wijaya", "initials": "M. W."} {"name": "Wildenbruch, Ernst von", "given": "Ernst", "family": "von Wildenbruch", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "E. W."} {"name": "Wilhelm I.", "given": "Wilhelm", "family": "I.", "initials": "W. I."} -{"name": "Wilhelm IV.", "given": "Wilhelm", "suffix": "IV.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "W."} +{"name": "Wilhelm IV.", "given": "Wilhelm", "suffix": "IV.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "W.", "generation": "IV."} {"name": "Wilkins, Charles", "given": "Charles", "family": "Wilkins", "initials": "C. W."} {"name": "Will De Groot", "given": "Will", "family": "De Groot", "initials": "W. G.", "capitalized_force": "Will de Groot"} {"name": "Willem Antonie van Deventer", "given": "Willem", "middle": "Antonie", "family": "van Deventer", "initials": "W. A. D."} @@ -3651,9 +3655,9 @@ {"name": "Winghe, Jodocus van", "given": "Jodocus", "family": "van Winghe", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "J. W."} {"name": "Witte, Jean Joseph Antoine Marie de", "given": "Jean", "middle": "Joseph Antoine Marie", "family": "de Witte", "initials": "J. J. A. M. W."} {"name": "Wićazowa, Jěwa-Marja Hańža", "given": "Jěwa-Marja", "middle": "Hańža", "family": "Wićazowa", "initials": "J. H. W."} -{"name": "Wićazowa, dr. Jěwa-Marja Hańža jr. phd", "order": "FAMILY_FIRST", "title": "dr.", "given": "Jěwa-Marja", "middle": "Hańža", "family": "Wićazowa", "suffix": "jr. phd", "initials": "J. H. W.", "capitalized_force": "Dr. Jěwa-Marja Hańža Wićazowa Jr. PhD"} +{"name": "Wićazowa, dr. Jěwa-Marja Hańža jr. phd", "order": "FAMILY_FIRST", "title": "dr.", "given": "Jěwa-Marja", "middle": "Hańža", "family": "Wićazowa", "suffix": "jr. phd", "initials": "J. H. W.", "capitalized_force": "Dr. Jěwa-Marja Hańža Wićazowa Jr. PhD", "generation": "jr.", "credentials": "phd"} {"name": "Wj. Monir Mómen Monir Mómen Balóch", "title": "Wj.", "given": "Monir", "middle": "Mómen Monir Mómen", "family": "Balóch", "initials": "M. M. M. M. B."} -{"name": "Wm. H. Smith III", "given": "Wm.", "middle": "H.", "family": "Smith", "suffix": "III", "initials": "W. H. S."} +{"name": "Wm. H. Smith III", "given": "Wm.", "middle": "H.", "family": "Smith", "suffix": "III", "initials": "W. H. S.", "generation": "III"} {"name": "Wolf von Engelhardt", "given": "Wolf", "family": "von Engelhardt", "initials": "W. E."} {"name": "Wolf, Ada Cornelia Eva Sophia van den", "given": "Ada", "middle": "Cornelia Eva Sophia", "family": "van den Wolf", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "A. C. E. S. W."} {"name": "Wolf, Ada Cornelia Eva Sophia von", "given": "Ada", "middle": "Cornelia Eva Sophia", "family": "von Wolf", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "A. C. E. S. W."} @@ -3663,8 +3667,8 @@ {"name": "Wooster Bertram Wilberforce Henry Robert", "order": "FAMILY_FIRST", "given": "Bertram", "middle": "Wilberforce Henry Robert", "family": "Wooster", "initials": "B. W. H. R. W."} {"name": "Wooster Bertram Wilberforce Henry Robert AS", "order": "FAMILY_FIRST", "given": "Bertram", "middle": "Wilberforce Henry Robert AS", "family": "Wooster", "initials": "B. W. H. R. A. W.", "capitalized_force": "Wooster Bertram Wilberforce Henry Robert As"} {"name": "Wooster Bertram Wilberforce Henry Robert MP", "order": "FAMILY_FIRST", "given": "Bertram", "middle": "Wilberforce Henry Robert", "family": "Wooster", "suffix": "MP", "initials": "B. W. H. R. W."} -{"name": "Wooster Mr. Bertram Wilberforce Henry Robert Jr, MP", "order": "FAMILY_FIRST", "given": "Mr.", "middle": "Bertram Wilberforce Henry Robert", "family": "Wooster", "suffix": "Jr, MP", "initials": "M. B. W. H. R. W."} -{"name": "Wooster Mudane Bertram Wilberforce Henry Robert Jr, MP", "order": "FAMILY_FIRST", "given": "Mudane", "middle": "Bertram Wilberforce Henry Robert", "family": "Wooster", "suffix": "Jr, MP", "initials": "M. B. W. H. R. W."} +{"name": "Wooster Mr. Bertram Wilberforce Henry Robert Jr, MP", "order": "FAMILY_FIRST", "given": "Mr.", "middle": "Bertram Wilberforce Henry Robert", "family": "Wooster", "suffix": "Jr, MP", "initials": "M. B. W. H. R. W.", "generation": "Jr", "credentials": "MP"} +{"name": "Wooster Mudane Bertram Wilberforce Henry Robert Jr, MP", "order": "FAMILY_FIRST", "given": "Mudane", "middle": "Bertram Wilberforce Henry Robert", "family": "Wooster", "suffix": "Jr, MP", "initials": "M. B. W. H. R. W.", "generation": "Jr", "credentials": "MP"} {"name": "Wooster Owura Bertram Wilberforce Henry Robert MP", "order": "FAMILY_FIRST", "given": "Owura", "middle": "Bertram Wilberforce Henry Robert", "family": "Wooster", "suffix": "MP", "initials": "O. B. W. H. R. W."} {"name": "Wooster, Bertram Wilberforce Henry Robert", "given": "Bertram", "middle": "Wilberforce Henry Robert", "family": "Wooster", "initials": "B. W. H. R. W."} {"name": "Wooster, Bertram Wilberforce Henry Robert MP", "given": "Bertram", "middle": "Wilberforce Henry Robert", "family": "Wooster", "suffix": "MP", "initials": "B. W. H. R. W."} @@ -3724,7 +3728,7 @@ {"name": "Zeynep", "order": "FAMILY_FIRST", "family": "Zeynep", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "Z."} {"name": "Zezilia Hemiş Stöber", "given": "Zezilia", "middle": "Hemiş", "family": "Stöber", "initials": "Z. H. S."} {"name": "Zheng, Yisao", "given": "Yisao", "family": "Zheng", "initials": "Y. Z."} -{"name": "Ziemowit IV.", "given": "Ziemowit", "suffix": "IV.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "Z."} +{"name": "Ziemowit IV.", "given": "Ziemowit", "suffix": "IV.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "Z.", "generation": "IV."} {"name": "Zrinka", "given": "Zrinka", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "Z."} {"name": "Zrinka", "order": "FAMILY_FIRST", "family": "Zrinka", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "Z."} {"name": "Zuylen van Nijevelt, Julius van", "given": "Julius", "family": "van Zuylen van Nijevelt", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "J. Z. N."} @@ -3744,15 +3748,15 @@ {"name": "abdul Salam, Ed", "given": "abdul", "family": "Salam", "suffix": "Ed", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (declared)"], "initials": "a. S.", "capitalized_force": "Abdul Salam, ED"} {"name": "abdul Sir Smith Berg", "given": "abdul Sir", "middle": "Smith", "family": "Berg", "initials": "a. S. S. B.", "capitalized_force": "Abdul Sir Smith Berg"} {"name": "abdul Smith Berg Ma", "given": "abdul Smith", "middle": "Berg", "family": "Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "a. S. B. M.", "capitalized_force": "Abdul Smith Berg Ma"} -{"name": "abdul Smith Jr Ma", "given": "abdul", "family": "Smith", "suffix": "Jr Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "a. S.", "capitalized_force": "Abdul Smith Jr MA"} -{"name": "abdul Smith Jr V", "given": "abdul", "family": "Smith", "suffix": "Jr V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "a. S.", "capitalized_force": "Abdul Smith Jr V"} +{"name": "abdul Smith Jr Ma", "given": "abdul", "family": "Smith", "suffix": "Jr Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "a. S.", "capitalized_force": "Abdul Smith Jr MA", "generation": "Jr", "credentials": "Ma"} +{"name": "abdul Smith Jr V", "given": "abdul", "family": "Smith", "suffix": "Jr V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "a. S.", "capitalized_force": "Abdul Smith Jr V", "generation": "Jr V"} {"name": "abdul Smith Ma", "given": "abdul Smith", "family": "Ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "a. S. M.", "capitalized_force": "Abdul Smith Ma"} -{"name": "abdul Smith V", "given": "abdul", "family": "Smith", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "a. S.", "capitalized_force": "Abdul Smith V"} +{"name": "abdul Smith V", "given": "abdul", "family": "Smith", "suffix": "V", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "a. S.", "capitalized_force": "Abdul Smith V", "generation": "V"} {"name": "abdul V Smith", "given": "abdul V", "family": "Smith", "initials": "a. V. S.", "capitalized_force": "Abdul V Smith"} {"name": "abdul salam", "given": "abdul", "family": "salam", "initials": "a. s.", "capitalized": "Abdul Salam"} {"name": "abdul salam ahmed salem", "given": "abdul salam", "middle": "ahmed", "family": "salem", "initials": "a. s. a. s.", "capitalized": "Abdul Salam Ahmed Salem"} -{"name": "abdul salam ahmed salem jr", "given": "abdul salam", "middle": "ahmed", "family": "salem", "suffix": "jr", "initials": "a. s. a. s.", "capitalized": "Abdul Salam Ahmed Salem Jr"} -{"name": "abdul salam jr", "given": "abdul", "family": "salam", "suffix": "jr", "initials": "a. s.", "capitalized": "Abdul Salam Jr"} +{"name": "abdul salam ahmed salem jr", "given": "abdul salam", "middle": "ahmed", "family": "salem", "suffix": "jr", "initials": "a. s. a. s.", "capitalized": "Abdul Salam Ahmed Salem Jr", "generation": "jr"} +{"name": "abdul salam jr", "given": "abdul", "family": "salam", "suffix": "jr", "initials": "a. s.", "capitalized": "Abdul Salam Jr", "generation": "jr"} {"name": "abdul salam salem", "given": "abdul salam", "family": "salem", "initials": "a. s. s.", "capitalized": "Abdul Salam Salem"} {"name": "abdulsalam ahmed salem", "given": "abdulsalam", "middle": "ahmed", "family": "salem", "initials": "a. a. s.", "capitalized": "Abdulsalam Ahmed Salem"} {"name": "abu bakr al baghdadi", "given": "abu bakr", "family": "al baghdadi", "initials": "a. b. b.", "capitalized": "Abu Bakr al Baghdadi"} @@ -3766,22 +3770,22 @@ {"name": "bin Stromae, Elizabeth Windsor Maria Teresa MP", "given": "Elizabeth", "middle": "Windsor Maria Teresa", "family": "bin Stromae", "suffix": "MP", "initials": "E. W. M. T. S."} {"name": "bob v. de la macdole-eisenhower phd", "given": "bob", "middle": "v.", "family": "de la macdole-eisenhower", "suffix": "phd", "initials": "b. v. m.", "capitalized": "Bob V. de la MacDole-Eisenhower PhD"} {"name": "carod i", "given": "carod", "family": "i", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "c. i.", "capitalized": "Carod I"} -{"name": "da Silva Sr. José Pedro Eduardo Jr., MP", "order": "FAMILY_FIRST", "given": "Silva", "middle": "Sr. José Pedro Eduardo", "family": "da", "suffix": "Jr., MP", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "S. S. J. P. E. d.", "capitalized_force": "Da Silva Sr. José Pedro Eduardo Jr., MP"} +{"name": "da Silva Sr. José Pedro Eduardo Jr., MP", "order": "FAMILY_FIRST", "given": "Silva", "middle": "Sr. José Pedro Eduardo", "family": "da", "suffix": "Jr., MP", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "S. S. J. P. E. d.", "capitalized_force": "Da Silva Sr. José Pedro Eduardo Jr., MP", "generation": "Jr.", "credentials": "MP"} {"name": "da Silva do Amaral de Souza, Miguel", "given": "Miguel", "family": "da Silva do Amaral de Souza", "initials": "M. S. A. S."} {"name": "de", "given": "de", "initials": "d.", "capitalized": "De"} {"name": "de Anke van y", "family": "de Anke van y", "initials": "A."} {"name": "de Bhulbh An tOll. An Dr. Brigid Aoibhe Sophia", "order": "FAMILY_FIRST", "given": "An", "middle": "tOll. An Dr. Brigid Aoibhe Sophia", "family": "de Bhulbh", "initials": "A. t. A. D. B. A. S. B.", "capitalized_force": "de Bhulbh An Toll. An Dr. Brigid Aoibhe Sophia"} {"name": "de Bhulbh Brigid Aoibhe Sophia", "order": "FAMILY_FIRST", "given": "Brigid", "middle": "Aoibhe Sophia", "family": "de Bhulbh", "initials": "B. A. S. B."} {"name": "de Castro Xosé Carlos Francisco Xavier", "order": "FAMILY_FIRST", "given": "Xosé", "middle": "Carlos Francisco Xavier", "family": "de Castro", "initials": "X. C. F. X. C."} -{"name": "de Jong dhr. Bertus Wevers Harry Robert jr., mp", "order": "FAMILY_FIRST", "given": "dhr.", "middle": "Bertus Wevers Harry Robert", "family": "de Jong", "suffix": "jr., mp", "initials": "d. B. W. H. R. J.", "capitalized_force": "de Jong Dhr. Bertus Wevers Harry Robert Jr., MP"} +{"name": "de Jong dhr. Bertus Wevers Harry Robert jr., mp", "order": "FAMILY_FIRST", "given": "dhr.", "middle": "Bertus Wevers Harry Robert", "family": "de Jong", "suffix": "jr., mp", "initials": "d. B. W. H. R. J.", "capitalized_force": "de Jong Dhr. Bertus Wevers Harry Robert Jr., MP", "generation": "jr.", "credentials": "mp"} {"name": "de Lacon, Antoni Baìngiu Torchitòriu Comita", "given": "Antoni", "middle": "Baìngiu Torchitòriu Comita", "family": "de Lacon", "initials": "A. B. T. C. L."} {"name": "de Mesnil", "family": "de Mesnil", "initials": "M."} {"name": "de Mesnil Garcia", "family": "de Mesnil Garcia", "initials": "M. G."} {"name": "de Mesnil Jean", "family": "de Mesnil Jean", "initials": "M. J."} {"name": "de Mesnil Jean Paul", "family": "de Mesnil Jean Paul", "initials": "M. J. P."} {"name": "de Mesnil Jean, Dr.", "order": "FAMILY_FIRST", "title": "Dr.", "given": "Jean", "family": "de Mesnil", "initials": "J. M."} -{"name": "de Mesnil Jr.", "family": "de Mesnil", "suffix": "Jr.", "initials": "M."} -{"name": "de Planta, dr. Margaritta Marionna Maria jr. CF", "order": "FAMILY_FIRST", "title": "dr.", "given": "Margaritta", "middle": "Marionna Maria", "family": "de Planta", "suffix": "jr. CF", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (position)"], "initials": "M. M. M. P.", "capitalized_force": "Dr. Margaritta Marionna Maria de Planta Jr. Cf"} +{"name": "de Mesnil Jr.", "family": "de Mesnil", "suffix": "Jr.", "initials": "M.", "generation": "Jr."} +{"name": "de Planta, dr. Margaritta Marionna Maria jr. CF", "order": "FAMILY_FIRST", "title": "dr.", "given": "Margaritta", "middle": "Marionna Maria", "family": "de Planta", "suffix": "jr. CF", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (position)"], "initials": "M. M. M. P.", "capitalized_force": "Dr. Margaritta Marionna Maria de Planta Jr. Cf", "generation": "jr.", "credentials": "CF"} {"name": "de Souza e Menezes Mr. Francisco Xavier Joao Anton Dk, MP", "order": "FAMILY_FIRST", "given": "Mr.", "middle": "Francisco Xavier Joao Anton Dk", "family": "de Souza e Menezes", "suffix": "MP", "initials": "M. F. X. J. A. D. S. M."} {"name": "de la Cruz Juan Carlos", "family": "de la Cruz Juan Carlos", "initials": "C. J. C."} {"name": "de la Cruz Juan Carlos", "order": "FAMILY_FIRST", "given": "Juan", "middle": "Carlos", "family": "de la Cruz", "initials": "J. C. C."} @@ -3794,29 +3798,29 @@ {"name": "de la Vega", "family": "de la Vega", "initials": "V."} {"name": "de la Vega y Santos Juan", "family": "de la Vega y Santos Juan", "initials": "V. S. J."} {"name": "de la Vega, Dr. Juan", "title": "Dr.", "given": "Juan", "family": "de la Vega", "initials": "J. V."} -{"name": "de la Vega, Dr. Juan III", "title": "Dr.", "given": "Juan", "family": "de la Vega", "suffix": "III", "initials": "J. V."} +{"name": "de la Vega, Dr. Juan III", "title": "Dr.", "given": "Juan", "family": "de la Vega", "suffix": "III", "initials": "J. V.", "generation": "III"} {"name": "de la Vega, Dr. Juan Q.", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "de la Vega", "initials": "J. Q. V."} -{"name": "de la Vega, Dr. Juan Q. III", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "de la Vega", "suffix": "III", "initials": "J. Q. V."} +{"name": "de la Vega, Dr. Juan Q. III", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "de la Vega", "suffix": "III", "initials": "J. Q. V.", "generation": "III"} {"name": "de la Vega, Dr. Juan Q. Xavier", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "initials": "J. Q. X. V."} -{"name": "de la Vega, Dr. Juan Q. Xavier III", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "suffix": "III", "initials": "J. Q. X. V."} -{"name": "de la Vega, Dr. Juan Q. Xavier, Jr.", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "suffix": "Jr.", "initials": "J. Q. X. V."} -{"name": "de la Vega, Dr. Juan Q., Jr.", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "de la Vega", "suffix": "Jr.", "initials": "J. Q. V."} -{"name": "de la Vega, Dr. Juan, Jr.", "title": "Dr.", "given": "Juan", "family": "de la Vega", "suffix": "Jr.", "initials": "J. V."} +{"name": "de la Vega, Dr. Juan Q. Xavier III", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "suffix": "III", "initials": "J. Q. X. V.", "generation": "III"} +{"name": "de la Vega, Dr. Juan Q. Xavier, Jr.", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "suffix": "Jr.", "initials": "J. Q. X. V.", "generation": "Jr."} +{"name": "de la Vega, Dr. Juan Q., Jr.", "title": "Dr.", "given": "Juan", "middle": "Q.", "family": "de la Vega", "suffix": "Jr.", "initials": "J. Q. V.", "generation": "Jr."} +{"name": "de la Vega, Dr. Juan, Jr.", "title": "Dr.", "given": "Juan", "family": "de la Vega", "suffix": "Jr.", "initials": "J. V.", "generation": "Jr."} {"name": "de la Vega, Juan", "given": "Juan", "family": "de la Vega", "initials": "J. V."} -{"name": "de la Vega, Juan III", "given": "Juan", "family": "de la Vega", "suffix": "III", "initials": "J. V."} +{"name": "de la Vega, Juan III", "given": "Juan", "family": "de la Vega", "suffix": "III", "initials": "J. V.", "generation": "III"} {"name": "de la Vega, Juan Q.", "given": "Juan", "middle": "Q.", "family": "de la Vega", "initials": "J. Q. V."} -{"name": "de la Vega, Juan Q. III", "given": "Juan", "middle": "Q.", "family": "de la Vega", "suffix": "III", "initials": "J. Q. V."} +{"name": "de la Vega, Juan Q. III", "given": "Juan", "middle": "Q.", "family": "de la Vega", "suffix": "III", "initials": "J. Q. V.", "generation": "III"} {"name": "de la Vega, Juan Q. Xavier", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "initials": "J. Q. X. V."} -{"name": "de la Vega, Juan Q. Xavier III", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "suffix": "III", "initials": "J. Q. X. V."} -{"name": "de la Vega, Juan Q. Xavier, Jr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "suffix": "Jr.", "initials": "J. Q. X. V."} -{"name": "de la Vega, Juan Q., Jr.", "given": "Juan", "middle": "Q.", "family": "de la Vega", "suffix": "Jr.", "initials": "J. Q. V."} -{"name": "de la Vega, Juan, Jr.", "given": "Juan", "family": "de la Vega", "suffix": "Jr.", "initials": "J. V."} +{"name": "de la Vega, Juan Q. Xavier III", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "suffix": "III", "initials": "J. Q. X. V.", "generation": "III"} +{"name": "de la Vega, Juan Q. Xavier, Jr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la Vega", "suffix": "Jr.", "initials": "J. Q. X. V.", "generation": "Jr."} +{"name": "de la Vega, Juan Q., Jr.", "given": "Juan", "middle": "Q.", "family": "de la Vega", "suffix": "Jr.", "initials": "J. Q. V.", "generation": "Jr."} +{"name": "de la Vega, Juan, Jr.", "given": "Juan", "family": "de la Vega", "suffix": "Jr.", "initials": "J. V.", "generation": "Jr."} {"name": "de la Véña, Jüan", "given": "Jüan", "family": "de la Véña", "initials": "J. V."} -{"name": "de la dos Vega, Dr. Juan Q. Xavier III", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la dos Vega", "suffix": "III", "initials": "J. Q. X. V."} -{"name": "de la vega, dr. juan Q. xavier III", "title": "dr.", "given": "juan", "middle": "Q. xavier", "family": "de la vega", "suffix": "III", "initials": "j. Q. x. v.", "capitalized_force": "Dr. Juan Q. Xavier de la Vega III"} +{"name": "de la dos Vega, Dr. Juan Q. Xavier III", "title": "Dr.", "given": "Juan", "middle": "Q. Xavier", "family": "de la dos Vega", "suffix": "III", "initials": "J. Q. X. V.", "generation": "III"} +{"name": "de la vega, dr. juan Q. xavier III", "title": "dr.", "given": "juan", "middle": "Q. xavier", "family": "de la vega", "suffix": "III", "initials": "j. Q. x. v.", "capitalized_force": "Dr. Juan Q. Xavier de la Vega III", "generation": "III"} {"name": "de los Santos", "family": "de los Santos", "initials": "S."} {"name": "der, y van", "given": "y", "family": "van der", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "y. v. d.", "capitalized": "y Van Der"} -{"name": "dhr. Bertus Wevers Harry Robert de Jong jr. mp", "title": "dhr.", "given": "Bertus", "middle": "Wevers Harry Robert", "family": "de Jong", "suffix": "jr. mp", "initials": "B. W. H. R. J.", "capitalized_force": "Dhr. Bertus Wevers Harry Robert de Jong Jr. MP"} +{"name": "dhr. Bertus Wevers Harry Robert de Jong jr. mp", "title": "dhr.", "given": "Bertus", "middle": "Wevers Harry Robert", "family": "de Jong", "suffix": "jr. mp", "initials": "B. W. H. R. J.", "capitalized_force": "Dhr. Bertus Wevers Harry Robert de Jong Jr. MP", "generation": "jr.", "credentials": "mp"} {"name": "dipl.-ing john smith", "title": "dipl.-ing", "given": "john", "family": "smith", "initials": "j. s.", "capitalized": "Dipl.-Ing John Smith"} {"name": "doe, jane phd vd ma", "given": "jane", "family": "doe", "suffix": "phd vd ma", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (declared)", "SUFFIX_OR_NAME: particle as family (vocabulary)"], "initials": "j. d.", "capitalized": "Jane Doe PhD VD MA"} {"name": "doe, jane v phd do", "given": "jane", "middle": "v", "family": "doe", "suffix": "phd do", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as middle (declared)"], "initials": "j. v. d.", "capitalized": "Jane V Doe PhD DO"} @@ -3829,16 +3833,16 @@ {"name": "dr Vincent van Gogh dr", "title": "dr", "given": "Vincent", "family": "van Gogh dr", "initials": "V. G. d.", "capitalized_force": "Dr Vincent van Gogh Dr"} {"name": "dr Vincent van der Gogh dr", "title": "dr", "given": "Vincent", "family": "van der Gogh dr", "initials": "V. G. d.", "capitalized_force": "Dr Vincent van der Gogh Dr"} {"name": "dr. Anastasia Eleni César Martín von Brühl, cand.odont.", "title": "dr.", "given": "Anastasia", "middle": "Eleni César Martín", "family": "von Brühl", "suffix": "cand.odont.", "initials": "A. E. C. M. B.", "capitalized_force": "Dr. Anastasia Eleni César Martín von Brühl, CAND.ODONT."} -{"name": "dr. Hejba-Marja Hana Lejnikowa jr. phd", "title": "dr.", "given": "Hejba-Marja", "middle": "Hana", "family": "Lejnikowa", "suffix": "jr. phd", "initials": "H. H. L.", "capitalized_force": "Dr. Hejba-Marja Hana Lejnikowa Jr. PhD"} -{"name": "dr. Jěwa-Marja Hańža Wićazowa jr. phd", "title": "dr.", "given": "Jěwa-Marja", "middle": "Hańža", "family": "Wićazowa", "suffix": "jr. phd", "initials": "J. H. W.", "capitalized_force": "Dr. Jěwa-Marja Hańža Wićazowa Jr. PhD"} -{"name": "dr. Margaritta Marionna Maria de Planta jr. CF", "title": "dr.", "given": "Margaritta", "middle": "Marionna Maria", "family": "de Planta", "suffix": "jr. CF", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "M. M. M. P.", "capitalized_force": "Dr. Margaritta Marionna Maria de Planta Jr. Cf"} -{"name": "dr. ben alex johnson III", "title": "dr.", "given": "ben", "middle": "alex", "family": "johnson", "suffix": "III", "initials": "b. a. j.", "capitalized": "Dr. Ben Alex Johnson III"} +{"name": "dr. Hejba-Marja Hana Lejnikowa jr. phd", "title": "dr.", "given": "Hejba-Marja", "middle": "Hana", "family": "Lejnikowa", "suffix": "jr. phd", "initials": "H. H. L.", "capitalized_force": "Dr. Hejba-Marja Hana Lejnikowa Jr. PhD", "generation": "jr.", "credentials": "phd"} +{"name": "dr. Jěwa-Marja Hańža Wićazowa jr. phd", "title": "dr.", "given": "Jěwa-Marja", "middle": "Hańža", "family": "Wićazowa", "suffix": "jr. phd", "initials": "J. H. W.", "capitalized_force": "Dr. Jěwa-Marja Hańža Wićazowa Jr. PhD", "generation": "jr.", "credentials": "phd"} +{"name": "dr. Margaritta Marionna Maria de Planta jr. CF", "title": "dr.", "given": "Margaritta", "middle": "Marionna Maria", "family": "de Planta", "suffix": "jr. CF", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "M. M. M. P.", "capitalized_force": "Dr. Margaritta Marionna Maria de Planta Jr. Cf", "generation": "jr.", "credentials": "CF"} +{"name": "dr. ben alex johnson III", "title": "dr.", "given": "ben", "middle": "alex", "family": "johnson", "suffix": "III", "initials": "b. a. j.", "capitalized": "Dr. Ben Alex Johnson III", "generation": "III"} {"name": "dr. john p. doe-Ray, CLU, CFP, LUTC", "title": "dr.", "given": "john", "middle": "p.", "family": "doe-Ray", "suffix": "CLU, CFP, LUTC", "ambiguities": ["COMMA_STRUCTURE"], "initials": "j. p. d.", "capitalized_force": "Dr. John P. Doe-Ray, CLU, CFP, Lutc"} -{"name": "dr. juan de la vega jr.", "title": "dr.", "given": "juan", "family": "de la vega", "suffix": "jr.", "initials": "j. v.", "capitalized": "Dr. Juan de la Vega Jr."} -{"name": "dr. juan garcia III", "title": "dr.", "given": "juan", "family": "garcia", "suffix": "III", "initials": "j. g.", "capitalized": "Dr. Juan Garcia III"} +{"name": "dr. juan de la vega jr.", "title": "dr.", "given": "juan", "family": "de la vega", "suffix": "jr.", "initials": "j. v.", "capitalized": "Dr. Juan de la Vega Jr.", "generation": "jr."} +{"name": "dr. juan garcia III", "title": "dr.", "given": "juan", "family": "garcia", "suffix": "III", "initials": "j. g.", "capitalized": "Dr. Juan Garcia III", "generation": "III"} {"name": "dr. née juan y lopez", "title": "dr.", "given": "née", "middle": "juan y", "family": "lopez", "initials": "n. j. y. l.", "capitalized": "Dr. Née Juan Y Lopez"} {"name": "dr. p. Gabrielė Aldona Petraitytė", "title": "dr.", "given": "p.", "middle": "Gabrielė Aldona", "family": "Petraitytė", "initials": "p. G. A. P.", "capitalized_force": "Dr. P. Gabrielė Aldona Petraitytė"} -{"name": "dr. sc. Branko Hrvoje Marić mlađi, prof.", "title": "dr. sc. prof.", "given": "Branko", "middle": "Hrvoje", "family": "Marić", "suffix": "mlađi", "initials": "B. H. M.", "capitalized_force": "Dr. Sc. Prof. Branko Hrvoje Marić Mlađi"} +{"name": "dr. sc. Branko Hrvoje Marić mlađi, prof.", "title": "dr. sc. prof.", "given": "Branko", "middle": "Hrvoje", "family": "Marić", "suffix": "mlađi", "initials": "B. H. M.", "capitalized_force": "Dr. Sc. Prof. Branko Hrvoje Marić Mlađi", "generation": "mlađi"} {"name": "e and e", "given": "e and e", "ambiguities": ["CONJUNCTION_OR_INITIAL"], "initials": "e. e.", "capitalized": "E and E"} {"name": "e j smith", "given": "e", "middle": "j", "family": "smith", "ambiguities": ["CONJUNCTION_OR_INITIAL"], "initials": "e. j. s.", "capitalized": "E J Smith"} {"name": "émile zola", "given": "émile", "family": "zola", "initials": "é. z.", "capitalized": "Émile Zola"} @@ -3867,14 +3871,14 @@ {"name": "john doe", "given": "john", "family": "doe", "initials": "j. d.", "capitalized": "John Doe"} {"name": "john doe q.c.", "given": "john", "family": "doe", "suffix": "q.c.", "initials": "j. d.", "capitalized": "John Doe Q.C."} {"name": "john e jones", "given": "john", "middle": "e", "family": "jones", "ambiguities": ["CONJUNCTION_OR_INITIAL"], "alternatives": ["CONJUNCTION_OR_INITIAL: conjunction as middle (vocabulary)"], "initials": "j. e. j.", "capitalized": "John E Jones"} -{"name": "john e jones, III", "given": "john", "middle": "e", "family": "jones", "suffix": "III", "initials": "j. e. j.", "capitalized": "John e Jones, III"} +{"name": "john e jones, III", "given": "john", "middle": "e", "family": "jones", "suffix": "III", "initials": "j. e. j.", "capitalized": "John e Jones, III", "generation": "III"} {"name": "john e smith", "given": "john", "middle": "e", "family": "smith", "ambiguities": ["CONJUNCTION_OR_INITIAL"], "alternatives": ["CONJUNCTION_OR_INITIAL: conjunction as middle (vocabulary)"], "initials": "j. e. s.", "capitalized": "John E Smith"} {"name": "john e. smith", "given": "john", "middle": "e.", "family": "smith", "initials": "j. e. s.", "capitalized": "John E. Smith"} {"name": "john i", "given": "john", "family": "i", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "j. i.", "capitalized": "John I"} {"name": "john i dr.", "title": "dr.", "given": "john", "family": "i", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "j. i.", "capitalized": "Dr. John I"} {"name": "john i phd", "given": "john", "family": "i", "suffix": "phd", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "j. i.", "capitalized": "John I PhD"} {"name": "john j v", "given": "john", "middle": "j", "family": "v", "initials": "j. j. v.", "capitalized": "John J V"} -{"name": "john j v, PhD", "given": "john", "family": "j", "suffix": "v, PhD", "initials": "j. j.", "capitalized": "John J V, PhD"} +{"name": "john j v, PhD", "given": "john", "family": "j", "suffix": "v, PhD", "initials": "j. j.", "capitalized": "John J V, PhD", "generation": "v", "credentials": "PhD"} {"name": "john smith", "given": "john", "family": "smith", "initials": "j. s.", "capitalized": "John Smith"} {"name": "john smith (MA)", "given": "john", "family": "smith", "nickname": "MA", "ambiguities": ["SUFFIX_OR_NICKNAME"], "alternatives": ["SUFFIX_OR_NICKNAME: credential as suffix (vocabulary)"], "initials": "j. s.", "capitalized_force": "John \"Ma\" Smith"} {"name": "john smith EdD", "given": "john", "family": "smith", "suffix": "EdD", "initials": "j. s.", "capitalized": "John Smith EdD", "capitalized_force": "John Smith EDD"} @@ -3882,17 +3886,17 @@ {"name": "john smith MEng", "given": "john", "middle": "smith", "family": "MEng", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (vocabulary)"], "initials": "j. s. M.", "capitalized_force": "John Smith Meng"} {"name": "john smith bsc", "given": "john", "family": "smith", "suffix": "bsc", "initials": "j. s.", "capitalized": "John Smith BSc"} {"name": "john smith ed", "given": "john", "family": "smith", "suffix": "ed", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "j. s.", "capitalized": "John Smith ED"} -{"name": "john smith i", "given": "john", "family": "smith", "suffix": "i", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "j. s.", "capitalized": "John Smith I"} -{"name": "john smith iii", "given": "john", "family": "smith", "suffix": "iii", "initials": "j. s.", "capitalized": "John Smith III"} -{"name": "john smith iii.", "given": "john", "family": "smith", "suffix": "iii.", "initials": "j. s.", "capitalized": "John Smith III."} -{"name": "john smith ix", "given": "john", "family": "smith", "suffix": "ix", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "j. s.", "capitalized": "John Smith IX"} -{"name": "john smith jr", "given": "john", "family": "smith", "suffix": "jr", "initials": "j. s.", "capitalized": "John Smith Jr"} +{"name": "john smith i", "given": "john", "family": "smith", "suffix": "i", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "j. s.", "capitalized": "John Smith I", "generation": "i"} +{"name": "john smith iii", "given": "john", "family": "smith", "suffix": "iii", "initials": "j. s.", "capitalized": "John Smith III", "generation": "iii"} +{"name": "john smith iii.", "given": "john", "family": "smith", "suffix": "iii.", "initials": "j. s.", "capitalized": "John Smith III.", "generation": "iii."} +{"name": "john smith ix", "given": "john", "family": "smith", "suffix": "ix", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "j. s.", "capitalized": "John Smith IX", "generation": "ix"} +{"name": "john smith jr", "given": "john", "family": "smith", "suffix": "jr", "initials": "j. s.", "capitalized": "John Smith Jr", "generation": "jr"} {"name": "john smith m.d.", "given": "john", "family": "smith", "suffix": "m.d.", "initials": "j. s.", "capitalized": "John Smith M.D."} {"name": "john smith mba", "given": "john", "family": "smith", "suffix": "mba", "initials": "j. s.", "capitalized": "John Smith MBA"} {"name": "john smith mcse", "given": "john", "family": "smith", "suffix": "mcse", "initials": "j. s.", "capitalized": "John Smith MCSE"} {"name": "john smith md", "given": "john", "family": "smith", "suffix": "md", "initials": "j. s.", "capitalized": "John Smith MD"} {"name": "john smith meng", "given": "john", "family": "smith", "suffix": "meng", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "j. s.", "capitalized": "John Smith MENG"} -{"name": "john smith nee x x", "given": "john", "family": "smith", "suffix": "x", "maiden": "x", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as maiden (shape)"], "initials": "j. s.", "capitalized": "John Smith (X) X"} +{"name": "john smith nee x x", "given": "john", "family": "smith", "suffix": "x", "maiden": "x", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as maiden (shape)"], "initials": "j. s.", "capitalized": "John Smith (X) X", "generation": "x"} {"name": "john smith p.h.d.", "given": "john", "family": "smith", "suffix": "p.h.d.", "initials": "j. s.", "capitalized": "John Smith P.H.D."} {"name": "john smith pa-c", "given": "john", "family": "smith", "suffix": "pa-c", "initials": "j. s.", "capitalized": "John Smith PA-C"} {"name": "john smith ph. d.", "given": "john", "family": "smith", "suffix": "ph. d.", "initials": "j. s.", "capitalized": "John Smith Ph. D."} @@ -3900,9 +3904,9 @@ {"name": "john smith pharm d", "given": "john", "family": "smith", "suffix": "pharm d", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "j. s.", "capitalized": "John Smith Pharm D"} {"name": "john smith phd", "given": "john", "family": "smith", "suffix": "phd", "initials": "j. s.", "capitalized": "John Smith PhD"} {"name": "john smith psyd", "given": "john", "family": "smith", "suffix": "psyd", "initials": "j. s.", "capitalized": "John Smith PsyD"} -{"name": "john smith v", "given": "john", "family": "smith", "suffix": "v", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "j. s.", "capitalized": "John Smith V"} -{"name": "john smith v, PhD", "given": "john", "family": "smith", "suffix": "v, PhD", "initials": "j. s.", "capitalized": "John Smith V, PhD"} -{"name": "john smith vi", "given": "john", "family": "smith", "suffix": "vi", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "j. s.", "capitalized": "John Smith VI"} +{"name": "john smith v", "given": "john", "family": "smith", "suffix": "v", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "j. s.", "capitalized": "John Smith V", "generation": "v"} +{"name": "john smith v, PhD", "given": "john", "family": "smith", "suffix": "v, PhD", "initials": "j. s.", "capitalized": "John Smith V, PhD", "generation": "v", "credentials": "PhD"} +{"name": "john smith vi", "given": "john", "family": "smith", "suffix": "vi", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "j. s.", "capitalized": "John Smith VI", "generation": "vi"} {"name": "john smith x.y.z.", "given": "john", "family": "smith", "suffix": "x.y.z.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "j. s.", "capitalized": "John Smith X.Y.Z."} {"name": "john smith xi", "given": "john", "middle": "smith", "family": "xi", "initials": "j. s. x.", "capitalized": "John Smith Xi"} {"name": "john smith, PHARM D", "given": "john", "family": "smith", "suffix": "PHARM D", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "j. s.", "capitalized": "John Smith, Pharm D"} @@ -3911,7 +3915,7 @@ {"name": "john smith, ms-pt", "given": "john", "family": "smith", "suffix": "ms-pt", "initials": "j. s.", "capitalized": "John Smith, MS-PT"} {"name": "john smith, otr/l", "given": "john", "family": "smith", "suffix": "otr/l", "initials": "j. s.", "capitalized": "John Smith, OTR/L"} {"name": "john smith, phd meng", "given": "john", "family": "smith", "suffix": "phd meng", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "j. s.", "capitalized": "John Smith, PhD MENG"} -{"name": "john smith, v", "given": "john", "family": "smith", "suffix": "v", "initials": "j. s.", "capitalized": "John Smith, V"} +{"name": "john smith, v", "given": "john", "family": "smith", "suffix": "v", "initials": "j. s.", "capitalized": "John Smith, V", "generation": "v"} {"name": "john smith, vi", "given": "vi", "family": "john smith", "initials": "v. j. s.", "capitalized": "Vi John Smith"} {"name": "john smith-jones", "given": "john", "family": "smith-jones", "initials": "j. s.", "capitalized": "John Smith-Jones"} {"name": "john v", "given": "john", "family": "v", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "j. v.", "capitalized": "John V"} @@ -3929,20 +3933,20 @@ {"name": "josé garcía", "given": "josé", "family": "garcía", "initials": "j. g.", "capitalized": "José García"} {"name": "juan de la vega", "given": "juan", "family": "de la vega", "initials": "j. v.", "capitalized": "Juan de la Vega"} {"name": "juan e-f smith", "given": "juan", "middle": "e-f", "family": "smith", "initials": "j. e. s.", "capitalized": "Juan E-F Smith"} -{"name": "juan garcia III", "given": "juan", "family": "garcia", "suffix": "III", "initials": "j. g.", "capitalized": "Juan Garcia III"} -{"name": "juan garcia Iii", "given": "juan", "family": "garcia", "suffix": "Iii", "initials": "j. g.", "capitalized": "Juan Garcia Iii", "capitalized_force": "Juan Garcia III"} +{"name": "juan garcia III", "given": "juan", "family": "garcia", "suffix": "III", "initials": "j. g.", "capitalized": "Juan Garcia III", "generation": "III"} +{"name": "juan garcia Iii", "given": "juan", "family": "garcia", "suffix": "Iii", "initials": "j. g.", "capitalized": "Juan Garcia Iii", "capitalized_force": "Juan Garcia III", "generation": "Iii"} {"name": "juan garcia PhD", "given": "juan", "family": "garcia", "suffix": "PhD", "initials": "j. g.", "capitalized": "Juan Garcia PhD"} {"name": "juan garcia y lopez", "given": "juan", "family": "garcia y lopez", "initials": "j. g. l.", "capitalized": "Juan Garcia y Lopez"} {"name": "juan mcdonald", "given": "juan", "family": "mcdonald", "initials": "j. m.", "capitalized": "Juan McDonald"} -{"name": "juan q. xavier velasquez y garcia iii", "given": "juan", "middle": "q. xavier", "family": "velasquez y garcia", "suffix": "iii", "initials": "j. q. x. v. g.", "capitalized": "Juan Q. Xavier Velasquez y Garcia III"} +{"name": "juan q. xavier velasquez y garcia iii", "given": "juan", "middle": "q. xavier", "family": "velasquez y garcia", "suffix": "iii", "initials": "j. q. x. v. g.", "capitalized": "Juan Q. Xavier Velasquez y Garcia III", "generation": "iii"} {"name": "juan y garcia", "given": "juan", "middle": "y", "family": "garcia", "initials": "j. y. g.", "capitalized": "Juan y Garcia"} {"name": "juan y-garcia", "given": "juan", "family": "y-garcia", "initials": "j. y.", "capitalized": "Juan Y-Garcia"} {"name": "juan y-garcia-lopez", "given": "juan", "family": "y-garcia-lopez", "initials": "j. y.", "capitalized": "Juan Y-Garcia-Lopez"} {"name": "kim, ae-ra", "family": "kim", "suffix": "ae-ra", "initials": "k.", "capitalized": "Kim, AE-RA"} -{"name": "larry james edward johnson v", "given": "larry", "middle": "james edward", "family": "johnson", "suffix": "v", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "l. j. e. j.", "capitalized": "Larry James Edward Johnson V"} -{"name": "lt. gen. john a. kenneth doe iv", "title": "lt. gen.", "given": "john", "middle": "a. kenneth", "family": "doe", "suffix": "iv", "initials": "j. a. k. d.", "capitalized": "Lt. Gen. John A. Kenneth Doe IV"} +{"name": "larry james edward johnson v", "given": "larry", "middle": "james edward", "family": "johnson", "suffix": "v", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as family (shape)"], "initials": "l. j. e. j.", "capitalized": "Larry James Edward Johnson V", "generation": "v"} +{"name": "lt. gen. john a. kenneth doe iv", "title": "lt. gen.", "given": "john", "middle": "a. kenneth", "family": "doe", "suffix": "iv", "initials": "j. a. k. d.", "capitalized": "Lt. Gen. John A. Kenneth Doe IV", "generation": "iv"} {"name": "lt.gov john doe", "title": "lt.gov", "given": "john", "family": "doe", "initials": "j. d.", "capitalized": "Lt.Gov John Doe"} -{"name": "m.d ph.d. Inger Marie Adele Synnøve von Wolf jr.", "given": "m.d", "middle": "ph.d. Inger Marie Adele Synnøve", "family": "von Wolf", "suffix": "jr.", "initials": "m. p. I. M. A. S. W.", "capitalized_force": "M.D Ph.D. Inger Marie Adele Synnøve von Wolf Jr."} +{"name": "m.d ph.d. Inger Marie Adele Synnøve von Wolf jr.", "given": "m.d", "middle": "ph.d. Inger Marie Adele Synnøve", "family": "von Wolf", "suffix": "jr.", "initials": "m. p. I. M. A. S. W.", "capitalized_force": "M.D Ph.D. Inger Marie Adele Synnøve von Wolf Jr.", "generation": "jr."} {"name": "m.d ph.d. von Wolf Inger Marie Adele Synnøve", "order": "FAMILY_FIRST", "given": "ph.d.", "middle": "von Wolf Inger Marie Adele Synnøve", "family": "m.d", "initials": "p. W. I. M. A. S. m.", "capitalized_force": "M.D Ph.D. von Wolf Inger Marie Adele Synnøve"} {"name": "m.ʿali smith", "given": "m.ʿali", "family": "smith", "initials": "m. s.", "capitalized": "M.ʿAli Smith"} {"name": "mack johnson", "given": "mack", "family": "johnson", "initials": "m. j.", "capitalized": "Mack Johnson"} @@ -3952,8 +3956,8 @@ {"name": "med. dr. fil. dr. jur. dr. Ada Cornelia César Martín von Brühl González Domingo", "title": "med. dr. fil. dr. jur. dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl González Domingo", "initials": "A. C. C. M. B. G. D.", "capitalized_force": "Med. Dr. Fil. Dr. Jur. Dr. Ada Cornelia César Martín von Brühl González Domingo"} {"name": "med. m. dr. prof. dr. Ada Kornelija Eva Sofija von Vilkas Jankauskas-Baranauskas", "title": "med.", "given": "m.", "middle": "dr. prof. dr. Ada Kornelija Eva Sofija", "family": "von Vilkas Jankauskas-Baranauskas", "initials": "m. d. p. d. A. K. E. S. V. J.", "capitalized_force": "Med. M. Dr. Prof. Dr. Ada Kornelija Eva Sofija von Vilkas Jankauskas-Baranauskas"} {"name": "meng li", "given": "meng", "family": "li", "initials": "m. l.", "capitalized": "Meng Li"} -{"name": "mevrouw Ada Cornelia César Martín von Brühl jr. PhD", "title": "mevrouw", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "suffix": "jr. PhD", "initials": "A. C. C. M. B.", "capitalized_force": "Mevrouw Ada Cornelia César Martín von Brühl Jr. PhD"} -{"name": "mnr. Bertus Wilbers Henri Retief Willemse jnr., LP", "title": "mnr.", "given": "Bertus", "middle": "Wilbers Henri Retief", "family": "Willemse", "suffix": "jnr., LP", "initials": "B. W. H. R. W.", "capitalized_force": "Mnr. Bertus Wilbers Henri Retief Willemse Jnr., LP"} +{"name": "mevrouw Ada Cornelia César Martín von Brühl jr. PhD", "title": "mevrouw", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "suffix": "jr. PhD", "initials": "A. C. C. M. B.", "capitalized_force": "Mevrouw Ada Cornelia César Martín von Brühl Jr. PhD", "generation": "jr.", "credentials": "PhD"} +{"name": "mnr. Bertus Wilbers Henri Retief Willemse jnr., LP", "title": "mnr.", "given": "Bertus", "middle": "Wilbers Henri Retief", "family": "Willemse", "suffix": "jnr., LP", "initials": "B. W. H. R. W.", "capitalized_force": "Mnr. Bertus Wilbers Henri Retief Willemse Jnr., LP", "generation": "jnr.", "credentials": "LP"} {"name": "mohamad ali smith", "given": "mohamad", "middle": "ali", "family": "smith", "initials": "m. a. s.", "capitalized": "Mohamad Ali Smith"} {"name": "mwana Hamisi Salima Farida M.D. Ph.D.", "order": "FAMILY_FIRST", "given": "Hamisi", "middle": "Salima Farida", "family": "mwana", "suffix": "M.D. Ph.D.", "initials": "H. S. F. m.", "capitalized_force": "Mwana Hamisi Salima Farida M.D. Ph.D."} {"name": "nguyen van lac", "given": "nguyen", "family": "van", "suffix": "lac", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (declared)"], "initials": "n. v.", "capitalized": "Nguyen Van LAC"} @@ -3967,16 +3971,16 @@ {"name": "part1 of The part2 of the part3 and part4", "given": "part1 of The part2 of the part3 and part4", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "p. p. p. p.", "capitalized_force": "Part1 of the Part2 of the Part3 and Part4"} {"name": "part1 of and The part2 of the part3 And part4", "given": "part1 of and The part2 of the part3 And part4", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "p. p. p. p.", "capitalized_force": "Part1 of and the Part2 of the Part3 and Part4"} {"name": "pennie von bergen wessels", "given": "pennie", "family": "von bergen wessels", "initials": "p. b. w.", "capitalized": "Pennie von Bergen Wessels"} -{"name": "pennie von bergen wessels III", "given": "pennie", "family": "von bergen wessels", "suffix": "III", "initials": "p. b. w.", "capitalized": "Pennie von Bergen Wessels III"} +{"name": "pennie von bergen wessels III", "given": "pennie", "family": "von bergen wessels", "suffix": "III", "initials": "p. b. w.", "capitalized": "Pennie von Bergen Wessels III", "generation": "III"} {"name": "pennie von bergen wessels M.D.", "given": "pennie", "family": "von bergen wessels", "suffix": "M.D.", "initials": "p. b. w.", "capitalized": "Pennie von Bergen Wessels M.D."} -{"name": "pennie von bergen wessels MD, III", "given": "pennie", "family": "von bergen wessels", "suffix": "MD, III", "initials": "p. b. w.", "capitalized": "Pennie von Bergen Wessels MD, III"} -{"name": "pennie von bergen wessels, III", "given": "pennie", "family": "von bergen wessels", "suffix": "III", "initials": "p. b. w.", "capitalized": "Pennie von Bergen Wessels, III"} +{"name": "pennie von bergen wessels MD, III", "given": "pennie", "family": "von bergen wessels", "suffix": "MD, III", "initials": "p. b. w.", "capitalized": "Pennie von Bergen Wessels MD, III", "generation": "III", "credentials": "MD"} +{"name": "pennie von bergen wessels, III", "given": "pennie", "family": "von bergen wessels", "suffix": "III", "initials": "p. b. w.", "capitalized": "Pennie von Bergen Wessels, III", "generation": "III"} {"name": "prof. dr Ada Cornelia von Brühl", "title": "prof. dr", "given": "Ada", "middle": "Cornelia", "family": "von Brühl", "initials": "A. C. B.", "capitalized_force": "Prof. Dr Ada Cornelia von Brühl"} {"name": "prof. dr Aleksandra Eva Sara van den Volf Petrović Jugović dipl. inž.", "title": "prof. dr", "given": "Aleksandra", "middle": "Eva Sara", "family": "van den Volf Petrović Jugović dipl. inž.", "initials": "A. E. S. V. P. J. d. i.", "capitalized_force": "Prof. Dr Aleksandra Eva Sara van den Volf Petrović Jugović Dipl. Inž."} {"name": "prof. dr von Brühl Ada Cornelia César Martín", "order": "FAMILY_FIRST", "title": "prof. dr", "given": "Brühl", "middle": "Ada Cornelia César Martín", "family": "von", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. A. C. C. M. v.", "capitalized_force": "Prof. Dr Von Brühl Ada Cornelia César Martín"} -{"name": "prof. dr. Ada Cornelia César Martín von Brühl Jr, univ. bacc", "title": "prof. dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "suffix": "Jr, univ. bacc", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "A. C. C. M. B.", "capitalized_force": "Prof. Dr. Ada Cornelia César Martín von Brühl Jr, Univ. Bacc"} +{"name": "prof. dr. Ada Cornelia César Martín von Brühl Jr, univ. bacc", "title": "prof. dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "suffix": "Jr, univ. bacc", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "A. C. C. M. B.", "capitalized_force": "Prof. Dr. Ada Cornelia César Martín von Brühl Jr, Univ. Bacc", "generation": "Jr", "credentials": "univ. bacc"} {"name": "prof. dr. Ada Cornelia César Martín von Brühl ml., dr. med., dr. dent. med.", "title": "prof. dr. dr. med. dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl ml.", "suffix": "dent. med.", "ambiguities": ["COMMA_STRUCTURE"], "initials": "A. C. C. M. B. m.", "capitalized_force": "Prof. Dr. Dr. Med., Dr. Ada Cornelia César Martín von Brühl Ml. Dent. Med."} -{"name": "prof. dr. Anna Cornelia Eva Sophia van den Wolf jr. m.d. ph.d.", "title": "prof. dr.", "given": "Anna", "middle": "Cornelia Eva Sophia", "family": "van den Wolf", "suffix": "jr. m.d. ph.d.", "initials": "A. C. E. S. W.", "capitalized_force": "Prof. Dr. Anna Cornelia Eva Sophia van den Wolf Jr. M.D. Ph.D."} +{"name": "prof. dr. Anna Cornelia Eva Sophia van den Wolf jr. m.d. ph.d.", "title": "prof. dr.", "given": "Anna", "middle": "Cornelia Eva Sophia", "family": "van den Wolf", "suffix": "jr. m.d. ph.d.", "initials": "A. C. E. S. W.", "capitalized_force": "Prof. Dr. Anna Cornelia Eva Sophia van den Wolf Jr. M.D. Ph.D.", "generation": "jr.", "credentials": "m.d. ph.d."} {"name": "prof. dr. Gentiana van den Popa, dr. shk. mjek.", "title": "prof. dr. dr. shk. mjek.", "given": "Gentiana", "family": "van den Popa", "initials": "G. P.", "capitalized_force": "Prof. Dr. Dr. Shk. Mjek. Gentiana van den Popa"} {"name": "prof. dr. Izeta Amra von Selimović Hodžić, dipl. stom.", "title": "prof. dr. dipl. stom.", "given": "Izeta", "middle": "Amra", "family": "von Selimović Hodžić", "initials": "I. A. S. H.", "capitalized_force": "Prof. Dr. Dipl. Stom. Izeta Amra von Selimović Hodžić"} {"name": "prof. dr. Popa, Gentiana van den", "title": "prof. dr.", "given": "Gentiana", "family": "van den Popa", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: name as middle (declared)"], "initials": "G. P.", "capitalized_force": "Prof. Dr. Gentiana van den Popa"} @@ -3997,7 +4001,7 @@ {"name": "smith, j y lopez", "given": "j", "middle": "y lopez", "family": "smith", "initials": "j. l. s.", "capitalized": "J y Lopez Smith"} {"name": "smith, john e phd", "given": "john", "middle": "e", "family": "smith", "suffix": "phd", "initials": "j. e. s.", "capitalized": "John E Smith PhD"} {"name": "st.john smith", "title": "st.john", "family": "smith", "initials": "s.", "capitalized": "St.John Smith"} -{"name": "st.repr. Gregers Werle Marve Almar von Fleksnes jr.", "title": "st.repr.", "given": "Gregers", "middle": "Werle Marve Almar", "family": "von Fleksnes", "suffix": "jr.", "initials": "G. W. M. A. F.", "capitalized_force": "St.Repr. Gregers Werle Marve Almar von Fleksnes Jr."} +{"name": "st.repr. Gregers Werle Marve Almar von Fleksnes jr.", "title": "st.repr.", "given": "Gregers", "middle": "Werle Marve Almar", "family": "von Fleksnes", "suffix": "jr.", "initials": "G. W. M. A. F.", "capitalized_force": "St.Repr. Gregers Werle Marve Almar von Fleksnes Jr.", "generation": "jr."} {"name": "st.repr. von Fleksnes Gregers Werle Marve Almar", "order": "FAMILY_FIRST", "title": "st.repr.", "given": "Fleksnes", "middle": "Gregers Werle Marve Almar", "family": "von", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "F. G. W. M. A. v.", "capitalized_force": "St.Repr. Von Fleksnes Gregers Werle Marve Almar"} {"name": "test", "given": "test", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "t.", "capitalized": "Test"} {"name": "the and Jon Dough", "given": "the and Jon", "family": "Dough", "initials": "J. D."} @@ -4021,13 +4025,13 @@ {"name": "van den Volf Ada Kornelia Sezar Martin M.D. Ph.D.", "order": "FAMILY_FIRST", "given": "den Volf Ada Kornelia Sezar Martin", "family": "van", "suffix": "M.D. Ph.D.", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "d. V. A. K. S. M. v.", "capitalized_force": "Van Den Volf Ada Kornelia Sezar Martin M.D. Ph.D."} {"name": "van den Volf Ada Kornelia Yeva Sofiya M.D. Ph.D.", "order": "FAMILY_FIRST", "given": "den Volf Ada Kornelia Yeva Sofiya", "family": "van", "suffix": "M.D. Ph.D.", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "d. V. A. K. Y. S. v.", "capitalized_force": "Van Den Volf Ada Kornelia Yeva Sofiya M.D. Ph.D."} {"name": "van den Volf Becker Schmidt, Prof. Dr. Ada Kornelia Sezar Martin M.D. Ph.D.", "title": "Prof. Dr.", "given": "Ada", "middle": "Kornelia Sezar Martin", "family": "van den Volf Becker Schmidt", "suffix": "M.D. Ph.D.", "initials": "A. K. S. M. V. B. S."} -{"name": "van den Volf prof. dr Aleksandra Eva Sara mlađi, dipl. inž.", "order": "FAMILY_FIRST", "title": "dipl. inž.", "given": "den Volf prof. dr Aleksandra Eva Sara", "family": "van", "suffix": "mlađi", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "d. V. p. d. A. E. S. v.", "capitalized_force": "Dipl. Inž. Van Den Volf Prof. Dr Aleksandra Eva Sara Mlađi"} +{"name": "van den Volf prof. dr Aleksandra Eva Sara mlađi, dipl. inž.", "order": "FAMILY_FIRST", "title": "dipl. inž.", "given": "den Volf prof. dr Aleksandra Eva Sara", "family": "van", "suffix": "mlađi", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "d. V. p. d. A. E. S. v.", "capitalized_force": "Dipl. Inž. Van Den Volf Prof. Dr Aleksandra Eva Sara Mlađi", "generation": "mlađi"} {"name": "van den Volfa Laima Kristīne", "order": "FAMILY_FIRST", "given": "den Volfa Laima Kristīne", "family": "van", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "d. V. L. K. v.", "capitalized_force": "Van Den Volfa Laima Kristīne"} {"name": "van den Volfa Laima Kristīne Eva Sofija", "order": "FAMILY_FIRST", "given": "den Volfa Laima Kristīne Eva Sofija", "family": "van", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "d. V. L. K. E. S. v.", "capitalized_force": "Van Den Volfa Laima Kristīne Eva Sofija"} {"name": "van den Wolf Becker Schmidt Farf. Dr. Ada Cornelia Eva Sophia M.D. Ph.D.", "order": "FAMILY_FIRST", "given": "den Wolf Becker Schmidt Farf. Dr. Ada Cornelia Eva Sophia", "family": "van", "suffix": "M.D. Ph.D.", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "d. W. B. S. F. D. A. C. E. S. v.", "capitalized_force": "Van Den Wolf Becker Schmidt Farf. Dr. Ada Cornelia Eva Sophia M.D. Ph.D."} -{"name": "van den Wolf Prof. Dr. Ada Cornelia Eva Sophia Jr, M.D. Ph.D.", "order": "FAMILY_FIRST", "given": "den Wolf Prof. Dr. Ada Cornelia Eva Sophia", "family": "van", "suffix": "Jr, M.D. Ph.D.", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "d. W. P. D. A. C. E. S. v.", "capitalized_force": "Van Den Wolf Prof. Dr. Ada Cornelia Eva Sophia Jr, M.D. Ph.D."} -{"name": "van den Wolf, Prof. Dr. Anna Cornelia Eva Sophia jr. M.D. Ph.D.", "order": "FAMILY_FIRST", "title": "Prof. Dr.", "given": "Anna", "middle": "Cornelia Eva Sophia", "family": "van den Wolf", "suffix": "jr. M.D. Ph.D.", "initials": "A. C. E. S. W.", "capitalized_force": "Prof. Dr. Anna Cornelia Eva Sophia van den Wolf Jr. M.D. Ph.D."} -{"name": "van den Wolf, prof. dr. Anna Cornelia Eva Sophia jr. m.d. ph.d.", "order": "FAMILY_FIRST", "title": "prof. dr.", "given": "Anna", "middle": "Cornelia Eva Sophia", "family": "van den Wolf", "suffix": "jr. m.d. ph.d.", "initials": "A. C. E. S. W.", "capitalized_force": "Prof. Dr. Anna Cornelia Eva Sophia van den Wolf Jr. M.D. Ph.D."} +{"name": "van den Wolf Prof. Dr. Ada Cornelia Eva Sophia Jr, M.D. Ph.D.", "order": "FAMILY_FIRST", "given": "den Wolf Prof. Dr. Ada Cornelia Eva Sophia", "family": "van", "suffix": "Jr, M.D. Ph.D.", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "d. W. P. D. A. C. E. S. v.", "capitalized_force": "Van Den Wolf Prof. Dr. Ada Cornelia Eva Sophia Jr, M.D. Ph.D.", "generation": "Jr", "credentials": "M.D. Ph.D."} +{"name": "van den Wolf, Prof. Dr. Anna Cornelia Eva Sophia jr. M.D. Ph.D.", "order": "FAMILY_FIRST", "title": "Prof. Dr.", "given": "Anna", "middle": "Cornelia Eva Sophia", "family": "van den Wolf", "suffix": "jr. M.D. Ph.D.", "initials": "A. C. E. S. W.", "capitalized_force": "Prof. Dr. Anna Cornelia Eva Sophia van den Wolf Jr. M.D. Ph.D.", "generation": "jr.", "credentials": "M.D. Ph.D."} +{"name": "van den Wolf, prof. dr. Anna Cornelia Eva Sophia jr. m.d. ph.d.", "order": "FAMILY_FIRST", "title": "prof. dr.", "given": "Anna", "middle": "Cornelia Eva Sophia", "family": "van den Wolf", "suffix": "jr. m.d. ph.d.", "initials": "A. C. E. S. W.", "capitalized_force": "Prof. Dr. Anna Cornelia Eva Sophia van den Wolf Jr. M.D. Ph.D.", "generation": "jr.", "credentials": "m.d. ph.d."} {"name": "van der Berg, MA", "family": "van der Berg", "suffix": "MA", "initials": "B."} {"name": "van der Berg, PhD", "family": "van der Berg", "suffix": "PhD", "initials": "B."} {"name": "van der Berg, Sir", "title": "Sir", "family": "van der Berg", "initials": "B."} @@ -4035,38 +4039,38 @@ {"name": "van nguyen", "given": "van", "family": "nguyen", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "v. n.", "capitalized": "Van Nguyen"} {"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.", "capitalized_force": "Van. Den. Wolf Ada Cornelia Eva Sophia M.D. Ph.D."} {"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", "family": "von", "suffix": "yngri, M.A. í bókmenntafræði", "ambiguities": ["PARTICLE_OR_GIVEN", "SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: initial as given (shape)", "SUFFIX_OR_NAME: name as given (position)", "PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. d. S. J. V. F. v.", "capitalized_force": "Von Bjarnadóttir Dr. Sigríður Jóna Valgerður Fanndís Yngri, M.A. Í Bókmenntafræði"} +{"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"], "alternatives": ["SUFFIX_OR_NAME: initial as given (shape)", "SUFFIX_OR_NAME: name as given (position)", "PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. d. S. J. V. F. v.", "capitalized_force": "Von Bjarnadóttir Dr. Sigríður Jóna Valgerður Fanndís Yngri, M.A. Í Bókmenntafræði", "generation": "yngri", "credentials": "M.A. í bókmenntafræði"} {"name": "von Braun", "given": "von", "family": "Braun", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "v. B.", "capitalized_force": "Von Braun"} {"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"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. A. C. M. v.", "capitalized_force": "Von Bruhel Ada Cornelia Martina MD DDS"} -{"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"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. P. D. A. C. C. M. v.", "capitalized_force": "Von Bruhl Prof. Dr. Ada Cornelia Cesar Martin Jr, MD DDS"} +{"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"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. P. D. A. C. C. M. v.", "capitalized_force": "Von Bruhl Prof. Dr. Ada Cornelia Cesar Martin Jr, MD DDS", "generation": "Jr", "credentials": "MD DDS"} {"name": "von Brühl Ada Cornelia César Martín", "order": "FAMILY_FIRST", "given": "Brühl", "middle": "Ada Cornelia César Martín", "family": "von", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. A. C. C. M. v.", "capitalized_force": "Von Brühl Ada Cornelia César Martín"} {"name": "von Brühl Ada Cornelia César Martín M.D. Ph.D.", "order": "FAMILY_FIRST", "given": "Brühl", "middle": "Ada Cornelia César Martín", "family": "von", "suffix": "M.D. Ph.D.", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. A. C. C. M. v.", "capitalized_force": "Von Brühl Ada Cornelia César Martín M.D. Ph.D."} {"name": "von Brühl César Martín Ada Cornelia", "order": "FAMILY_FIRST", "given": "Brühl", "middle": "César Martín Ada Cornelia", "family": "von", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. C. M. A. C. v.", "capitalized_force": "Von Brühl César Martín Ada Cornelia"} -{"name": "von Brühl González Domingo Prof. Dr. Ada Cornelia César Martín Jr, MD DDS", "order": "FAMILY_FIRST", "given": "Brühl", "middle": "González Domingo Prof. Dr. Ada Cornelia César Martín", "family": "von", "suffix": "Jr, MD DDS", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. G. D. P. D. A. C. C. M. v.", "capitalized_force": "Von Brühl González Domingo Prof. Dr. Ada Cornelia César Martín Jr, MD DDS"} +{"name": "von Brühl González Domingo Prof. Dr. Ada Cornelia César Martín Jr, MD DDS", "order": "FAMILY_FIRST", "given": "Brühl", "middle": "González Domingo Prof. Dr. Ada Cornelia César Martín", "family": "von", "suffix": "Jr, MD DDS", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. G. D. P. D. A. C. C. M. v.", "capitalized_force": "Von Brühl González Domingo Prof. Dr. Ada Cornelia César Martín Jr, MD DDS", "generation": "Jr", "credentials": "MD DDS"} {"name": "von Brühl González Domingo Prof. Dr. Ada Cornelia César Martín MD DDS", "order": "FAMILY_FIRST", "given": "Brühl", "middle": "González Domingo Prof. Dr. Ada Cornelia César Martín", "family": "von", "suffix": "MD DDS", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. G. D. P. D. A. C. C. M. v.", "capitalized_force": "Von Brühl González Domingo Prof. Dr. Ada Cornelia César Martín MD DDS"} {"name": "von Brühl González Domingo Prop. Dr. Ada Cornelia César Martín MD DDS", "order": "FAMILY_FIRST", "given": "Brühl", "middle": "González Domingo Prop. Dr. Ada Cornelia César Martín", "family": "von", "suffix": "MD DDS", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. G. D. P. D. A. C. C. M. v.", "capitalized_force": "Von Brühl González Domingo Prop. Dr. Ada Cornelia César Martín MD DDS"} {"name": "von Brühl González Domingo, Ada Cornelia César Martín", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl González Domingo", "initials": "A. C. C. M. B. G. D."} -{"name": "von Brühl González Domingo, Prof. Dr. Ada Cornelia César Martín Jr, MD DDS", "order": "FAMILY_FIRST", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl González Domingo", "suffix": "Jr, MD DDS", "initials": "A. C. C. M. B. G. D."} +{"name": "von Brühl González Domingo, Prof. Dr. Ada Cornelia César Martín Jr, MD DDS", "order": "FAMILY_FIRST", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl González Domingo", "suffix": "Jr, MD DDS", "initials": "A. C. C. M. B. G. D.", "generation": "Jr", "credentials": "MD DDS"} {"name": "von Brühl González Domingo, Prof. Dr. Ada Cornelia César Martín M.D. Ph.D.", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl González Domingo", "suffix": "M.D. Ph.D.", "initials": "A. C. C. M. B. G. D."} {"name": "von Brühl González Domingo, Prof. Dr. Ada Cornelia César Martín MD DDS", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl González Domingo", "suffix": "MD DDS", "initials": "A. C. C. M. B. G. D."} {"name": "von Brühl González Domingo, Prop. Dr. Ada Cornelia César Martín MD DDS", "title": "Prop. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl González Domingo", "suffix": "MD DDS", "initials": "A. C. C. M. B. G. D."} -{"name": "von Brühl Prof. Dr. Ada Cornelia César Martín Jr, MD DDS", "order": "FAMILY_FIRST", "given": "Brühl", "middle": "Prof. Dr. Ada Cornelia César Martín", "family": "von", "suffix": "Jr, MD DDS", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. P. D. A. C. C. M. v.", "capitalized_force": "Von Brühl Prof. Dr. Ada Cornelia César Martín Jr, MD DDS"} -{"name": "von Brühl Prof. Dr. Mary Lou Cesare Martín Jr., Dr. Ph.D", "order": "FAMILY_FIRST", "title": "Dr.", "given": "Brühl", "middle": "Prof. Dr. Mary Lou Cesare Martín", "family": "von", "suffix": "Jr., Ph.D", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. P. D. M. L. C. M. v.", "capitalized_force": "Dr. Von Brühl Prof. Dr. Mary Lou Cesare Martín Jr., Ph.D"} -{"name": "von Brühl mevrouw Ada Cornelia César Martín jr., PhD", "order": "FAMILY_FIRST", "given": "Brühl", "middle": "mevrouw Ada Cornelia César Martín", "family": "von", "suffix": "jr., PhD", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. m. A. C. C. M. v.", "capitalized_force": "Von Brühl Mevrouw Ada Cornelia César Martín Jr., PhD"} +{"name": "von Brühl Prof. Dr. Ada Cornelia César Martín Jr, MD DDS", "order": "FAMILY_FIRST", "given": "Brühl", "middle": "Prof. Dr. Ada Cornelia César Martín", "family": "von", "suffix": "Jr, MD DDS", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. P. D. A. C. C. M. v.", "capitalized_force": "Von Brühl Prof. Dr. Ada Cornelia César Martín Jr, MD DDS", "generation": "Jr", "credentials": "MD DDS"} +{"name": "von Brühl Prof. Dr. Mary Lou Cesare Martín Jr., Dr. Ph.D", "order": "FAMILY_FIRST", "title": "Dr.", "given": "Brühl", "middle": "Prof. Dr. Mary Lou Cesare Martín", "family": "von", "suffix": "Jr., Ph.D", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. P. D. M. L. C. M. v.", "capitalized_force": "Dr. Von Brühl Prof. Dr. Mary Lou Cesare Martín Jr., Ph.D", "generation": "Jr.", "credentials": "Ph.D"} +{"name": "von Brühl mevrouw Ada Cornelia César Martín jr., PhD", "order": "FAMILY_FIRST", "given": "Brühl", "middle": "mevrouw Ada Cornelia César Martín", "family": "von", "suffix": "jr., PhD", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. m. A. C. C. M. v.", "capitalized_force": "Von Brühl Mevrouw Ada Cornelia César Martín Jr., PhD", "generation": "jr.", "credentials": "PhD"} {"name": "von Brühl, Ada Cornelia César Martín", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "initials": "A. C. C. M. B."} {"name": "von Brühl, Ada Cornelia César Martín MD DDS", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "suffix": "MD DDS", "initials": "A. C. C. M. B."} {"name": "von Brühl, Ada Cornelia César Martín MD DDS", "order": "FAMILY_FIRST", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "suffix": "MD DDS", "initials": "A. C. C. M. B."} {"name": "von Brühl, Anastasia Eleni César Martín", "given": "Anastasia", "middle": "Eleni César Martín", "family": "von Brühl", "initials": "A. E. C. M. B."} {"name": "von Brühl, Maria Giusepa Juana Teresa", "given": "Maria", "middle": "Giusepa Juana Teresa", "family": "von Brühl", "initials": "M. G. J. T. B."} -{"name": "von Brühl, Prof. Dr. Ada Cornelia César Martín Jr MD DDS", "order": "FAMILY_FIRST", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "suffix": "Jr MD DDS", "initials": "A. C. C. M. B."} +{"name": "von Brühl, Prof. Dr. Ada Cornelia César Martín Jr MD DDS", "order": "FAMILY_FIRST", "title": "Prof. Dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "suffix": "Jr MD DDS", "initials": "A. C. C. M. B.", "generation": "Jr", "credentials": "MD DDS"} {"name": "von Brühl, Prof. dr. Ada Cornelia César Martín, med. dr. fil. dr. jur. dr.", "order": "FAMILY_FIRST", "title": "Prof. dr. dr. dr. dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "suffix": "med. fil. jur.", "ambiguities": ["COMMA_STRUCTURE"], "initials": "A. C. C. M. B.", "capitalized_force": "Prof. Dr. Dr. Dr. Dr. Ada Cornelia César Martín von Brühl Med. Fil. Jur."} {"name": "von Brühl, dr. Anastasia Eleni César Martín, cand.odont.", "order": "FAMILY_FIRST", "title": "dr.", "given": "Anastasia", "middle": "Eleni César Martín", "family": "von Brühl", "suffix": "cand.odont.", "initials": "A. E. C. M. B.", "capitalized_force": "Dr. Anastasia Eleni César Martín von Brühl CAND.ODONT."} -{"name": "von Brühl, prof. dr. Ada Cornelia César Martín Jr, univ. bacc", "order": "FAMILY_FIRST", "title": "prof. dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "suffix": "Jr, univ. bacc", "ambiguities": ["COMMA_STRUCTURE"], "initials": "A. C. C. M. B.", "capitalized_force": "Prof. Dr. Ada Cornelia César Martín von Brühl Jr, Univ. Bacc"} -{"name": "von Brül Erika Cornelia Anna Isabelle II", "order": "FAMILY_FIRST", "given": "Brül", "middle": "Erika Cornelia Anna Isabelle", "family": "von", "suffix": "II", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. E. C. A. I. v.", "capitalized_force": "Von Brül Erika Cornelia Anna Isabelle II"} -{"name": "von Fischer, Dr. Paul Vinzent jr. MdB", "order": "FAMILY_FIRST", "title": "Dr.", "given": "Paul", "middle": "Vinzent", "family": "von Fischer", "suffix": "jr. MdB", "initials": "P. V. F.", "capitalized_force": "Dr. Paul Vinzent von Fischer Jr. MDB"} +{"name": "von Brühl, prof. dr. Ada Cornelia César Martín Jr, univ. bacc", "order": "FAMILY_FIRST", "title": "prof. dr.", "given": "Ada", "middle": "Cornelia César Martín", "family": "von Brühl", "suffix": "Jr, univ. bacc", "ambiguities": ["COMMA_STRUCTURE"], "initials": "A. C. C. M. B.", "capitalized_force": "Prof. Dr. Ada Cornelia César Martín von Brühl Jr, Univ. Bacc", "generation": "Jr", "credentials": "univ. bacc"} +{"name": "von Brül Erika Cornelia Anna Isabelle II", "order": "FAMILY_FIRST", "given": "Brül", "middle": "Erika Cornelia Anna Isabelle", "family": "von", "suffix": "II", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "B. E. C. A. I. v.", "capitalized_force": "Von Brül Erika Cornelia Anna Isabelle II", "generation": "II"} +{"name": "von Fischer, Dr. Paul Vinzent jr. MdB", "order": "FAMILY_FIRST", "title": "Dr.", "given": "Paul", "middle": "Vinzent", "family": "von Fischer", "suffix": "jr. MdB", "initials": "P. V. F.", "capitalized_force": "Dr. Paul Vinzent von Fischer Jr. MDB", "generation": "jr.", "credentials": "MdB"} {"name": "von Kovács Luca Sarolta Éva Erzsébet M.D. Ph.D.", "order": "FAMILY_FIRST", "given": "Kovács", "middle": "Luca Sarolta Éva Erzsébet", "family": "von", "suffix": "M.D. Ph.D.", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "K. L. S. É. E. v.", "capitalized_force": "Von Kovács Luca Sarolta Éva Erzsébet M.D. Ph.D."} {"name": "von Kovács, Luca Sarolta Éva Erzsébet M.D. Ph.D.", "given": "Luca", "middle": "Sarolta Éva Erzsébet", "family": "von Kovács", "suffix": "M.D. Ph.D.", "initials": "L. S. É. E. K."} -{"name": "von Miller Jones Mary Sue Marie II, MD DDS", "order": "FAMILY_FIRST", "given": "Miller", "middle": "Jones Mary Sue Marie", "family": "von", "suffix": "II, MD DDS", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "M. J. M. S. M. v.", "capitalized_force": "Von Miller Jones Mary Sue Marie II, MD DDS"} +{"name": "von Miller Jones Mary Sue Marie II, MD DDS", "order": "FAMILY_FIRST", "given": "Miller", "middle": "Jones Mary Sue Marie", "family": "von", "suffix": "II, MD DDS", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "M. J. M. S. M. v.", "capitalized_force": "Von Miller Jones Mary Sue Marie II, MD DDS", "generation": "II", "credentials": "MD DDS"} {"name": "von Miller Jones, Prof. Dr. Mary Sue Marie", "title": "Prof. Dr.", "given": "Mary", "middle": "Sue Marie", "family": "von Miller Jones", "initials": "M. S. M. M. J."} {"name": "von Vall Heinmann Laas Prof Anna Liina Eva Sofia MD, PhD", "order": "FAMILY_FIRST", "given": "Vall", "middle": "Heinmann Laas Prof Anna Liina Eva Sofia", "family": "von", "suffix": "MD, PhD", "ambiguities": ["PARTICLE_OR_GIVEN"], "alternatives": ["PARTICLE_OR_GIVEN: particle as family (vocabulary)"], "initials": "V. H. L. P. A. L. E. S. v.", "capitalized_force": "Von Vall Heinmann Laas Prof Anna Liina Eva Sofia MD, PhD"} {"name": "von Vall, Anna Liina Eva Sofia, MD, PhD", "given": "Anna", "middle": "Liina Eva Sofia", "family": "von Vall", "suffix": "MD, PhD", "initials": "A. L. E. S. V."} @@ -4074,8 +4078,8 @@ {"name": "von Wright González Domingo Ana Christina Lëja, professori MD DDS", "order": "FAMILY_FIRST", "given": "professori", "family": "von Wright González Domingo Ana Christina Lëja", "suffix": "MD DDS", "initials": "p. W. G. D. A. C. L.", "capitalized_force": "Professori von Wright González Domingo Ana Christina Lëja MD DDS"} {"name": "von Wright, Ana Christina Lëja", "given": "Ana", "middle": "Christina Lëja", "family": "von Wright", "initials": "A. C. L. W."} {"name": "von bergen wessels MD, pennie", "given": "pennie", "family": "von bergen wessels", "suffix": "MD", "initials": "p. b. w.", "capitalized": "Pennie von Bergen Wessels MD"} -{"name": "von bergen wessels MD, pennie III", "given": "pennie", "family": "von bergen wessels", "suffix": "MD, III", "initials": "p. b. w.", "capitalized": "Pennie von Bergen Wessels MD, III"} -{"name": "von bergen wessels, pennie III", "given": "pennie", "family": "von bergen wessels", "suffix": "III", "initials": "p. b. w.", "capitalized": "Pennie von Bergen Wessels III"} +{"name": "von bergen wessels MD, pennie III", "given": "pennie", "family": "von bergen wessels", "suffix": "MD, III", "initials": "p. b. w.", "capitalized": "Pennie von Bergen Wessels MD, III", "generation": "III", "credentials": "MD"} +{"name": "von bergen wessels, pennie III", "given": "pennie", "family": "von bergen wessels", "suffix": "III", "initials": "p. b. w.", "capitalized": "Pennie von Bergen Wessels III", "generation": "III"} {"name": "von bergen wessels, pennie MD", "given": "pennie", "family": "von bergen wessels", "suffix": "MD", "initials": "p. b. w.", "capitalized": "Pennie von Bergen Wessels MD"} {"name": "ván den Wólf Adá Cornelia Ẹ́va Sophia M.D. PhD.", "order": "FAMILY_FIRST", "given": "den Wólf Adá Cornelia Ẹ́va Sophia", "family": "ván", "suffix": "M.D. PhD.", "initials": "d. W. A. C. Ẹ. S. v.", "capitalized_force": "Ván Den Wólf Adá Cornelia Ẹ́va Sophia M.D. PhD."} {"name": "ván den Wólf, Adá Cornelia Ẹ́va Sophia M.D. PhD.", "given": "Adá", "middle": "Cornelia Ẹ́va Sophia", "family": "ván den Wólf", "suffix": "M.D. PhD.", "initials": "A. C. Ẹ. S. v. W.", "capitalized_force": "Adá Cornelia Ẹ́va Sophia Ván den Wólf M.D. PhD."} @@ -4138,7 +4142,7 @@ {"name": "ʊŋono Alaaji KALAM Alɛ Mustafa", "order": "FAMILY_FIRST", "given": "Alaaji", "middle": "KALAM Alɛ Mustafa", "family": "ʊŋono", "initials": "A. K. A. M. ʊ.", "capitalized_force": "Ʊŋono Alaaji Kalam Alɛ Mustafa"} {"name": "ʊŋono Alaaji Mustafa KALAM Alɛ", "given": "ʊŋono", "middle": "Alaaji Mustafa KALAM", "family": "Alɛ", "initials": "ʊ. A. M. K. A.", "capitalized_force": "Ʊŋono Alaaji Mustafa Kalam Alɛ"} {"name": "ʻIOLANI KAMAKA", "given": "ʻIOLANI", "family": "KAMAKA", "initials": "ʻ. K.", "capitalized": "ʻIolani Kamaka"} -{"name": "ʿAbbās III.", "given": "ʿAbbās", "suffix": "III.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "ʿ."} +{"name": "ʿAbbās III.", "given": "ʿAbbās", "suffix": "III.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "ʿ.", "generation": "III."} {"name": "ʿAbd al-ʿAzīz Ibn Marwān", "given": "ʿAbd", "middle": "al-ʿAzīz", "family": "Ibn Marwān", "initials": "ʿ. a. M.", "capitalized_force": "ʿAbd al-ʿAzīz ibn Marwān"} {"name": "ʿAbd-al-Qādir Badāʾūnī", "given": "ʿAbd-al-Qādir", "family": "Badāʾūnī", "initials": "ʿ. B.", "capitalized_force": "ʿAbd-Al-Qādir Badāʾūnī"} {"name": "ʿAbd-al-Ǧabbār Ibn-Aḥmad", "given": "ʿAbd-al-Ǧabbār", "family": "Ibn-Aḥmad", "initials": "ʿ. I.", "capitalized_force": "ʿAbd-Al-Ǧabbār ibn-Aḥmad"} @@ -4239,7 +4243,7 @@ {"name": "Љубомир Јовановић", "given": "Љубомир", "family": "Јовановић", "initials": "Љ. Ј."} {"name": "Абатуров, Константин Иванович", "given": "Константин", "middle": "Иванович", "family": "Абатуров", "initials": "К. И. А."} {"name": "Агеева, Валентина Васильевна", "given": "Валентина", "middle": "Васильевна", "family": "Агеева", "initials": "В. В. А."} -{"name": "Агриппина Младшая", "given": "Агриппина", "suffix": "Младшая", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "А."} +{"name": "Агриппина Младшая", "given": "Агриппина", "suffix": "Младшая", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "А.", "generation": "Младшая"} {"name": "Ада Карнэлія Сесар Марцін фон Бруль д-р", "given": "Ада", "middle": "Карнэлія Сесар Марцін фон Бруль", "family": "д-р", "initials": "А. К. С. М. ф. Б. д.", "capitalized_force": "Ада Карнэлія Сесар Марцін Фон Бруль Д-Р"} {"name": "Ада Корнелия фон Брюль Джуниор, тіс дәрігері", "given": "тіс", "middle": "дәрігері", "family": "Ада Корнелия фон Брюль Джуниор", "initials": "т. д. А. К. ф. Б. Д.", "capitalized_force": "Тіс Дәрігері Ада Корнелия Фон Брюль Джуниор"} {"name": "Адамович, Михаил Михайлович", "given": "Михаил", "middle": "Михайлович", "family": "Адамович", "initials": "М. М. А."} @@ -4287,7 +4291,7 @@ {"name": "Амосова, Ирина", "given": "Ирина", "family": "Амосова", "initials": "И. А."} {"name": "Ана Дабовић", "given": "Ана", "family": "Дабовић", "initials": "А. Д."} {"name": "Ана Иванова Димитрова", "given": "Ана", "middle": "Иванова", "family": "Димитрова", "initials": "А. И. Д."} -{"name": "Ана Хорват старији Џонс", "given": "Ана", "family": "Хорват", "suffix": "старији Џонс", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "А. Х.", "capitalized_force": "Ана Хорват Старији Џонс"} +{"name": "Ана Хорват старији Џонс", "given": "Ана", "family": "Хорват", "suffix": "старији Џонс", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "А. Х.", "capitalized_force": "Ана Хорват Старији Џонс", "generation": "старији", "credentials": "Џонс"} {"name": "Анастас Јовановић", "given": "Анастас", "family": "Јовановић", "initials": "А. Ј."} {"name": "Анатолий Александрович Вассерман", "given": "Анатолий", "middle": "Александрович", "family": "Вассерман", "initials": "А. А. В."} {"name": "Анатолий Николаевич Алябьев", "given": "Анатолий", "middle": "Николаевич", "family": "Алябьев", "initials": "А. Н. А."} @@ -4390,7 +4394,7 @@ {"name": "Вук Драшковић", "given": "Вук", "family": "Драшковић", "initials": "В. Д."} {"name": "Вустер Бертрам Вилберфорс Ҳенру Роберт", "order": "FAMILY_FIRST", "given": "Бертрам", "middle": "Вилберфорс Ҳенру Роберт", "family": "Вустер", "initials": "Б. В. Ҳ. Р. В."} {"name": "Віктор Пинзеник", "given": "Віктор", "family": "Пинзеник", "initials": "В. П."} -{"name": "Гай Плиний Старший Иванов", "given": "Гай", "family": "Плиний", "suffix": "Старший Иванов", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "Г. П."} +{"name": "Гай Плиний Старший Иванов", "given": "Гай", "family": "Плиний", "suffix": "Старший Иванов", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as family (position)"], "initials": "Г. П.", "generation": "Старший", "credentials": "Иванов"} {"name": "Галина Савова", "given": "Галина", "family": "Савова", "initials": "Г. С."} {"name": "Геннадий Вячеславович Игумнов", "given": "Геннадий", "middle": "Вячеславович", "family": "Игумнов", "initials": "Г. В. И."} {"name": "Геннадий Германович Комиссаров", "given": "Геннадий", "middle": "Германович", "family": "Комиссаров", "initials": "Г. Г. К."} @@ -4558,7 +4562,7 @@ {"name": "Медведев, Николай Дмитриевич", "given": "Николай", "middle": "Дмитриевич", "family": "Медведев", "initials": "Н. Д. М."} {"name": "Мельник Анна", "order": "FAMILY_FIRST", "given": "Анна", "family": "Мельник", "initials": "А. М."} {"name": "Микола Козленко", "given": "Микола", "family": "Козленко", "initials": "М. К."} -{"name": "Миленковић др Слађана Вера млађи, дипл. инж.", "order": "FAMILY_FIRST", "title": "дипл. инж.", "given": "др", "middle": "Слађана Вера", "family": "Миленковић", "suffix": "млађи", "initials": "д. С. В. М.", "capitalized_force": "Дипл. Инж. Миленковић Др Слађана Вера Млађи"} +{"name": "Миленковић др Слађана Вера млађи, дипл. инж.", "order": "FAMILY_FIRST", "title": "дипл. инж.", "given": "др", "middle": "Слађана Вера", "family": "Миленковић", "suffix": "млађи", "initials": "д. С. В. М.", "capitalized_force": "Дипл. Инж. Миленковић Др Слађана Вера Млађи", "generation": "млађи"} {"name": "Миленковић, Слађана Вера", "given": "Слађана", "middle": "Вера", "family": "Миленковић", "initials": "С. В. М."} {"name": "Милер Кете", "order": "FAMILY_FIRST", "given": "Кете", "family": "Милер", "initials": "К. М."} {"name": "Милер, Кете", "given": "Кете", "family": "Милер", "initials": "К. М."} @@ -4654,7 +4658,7 @@ {"name": "Петренко Анна Марія Богдан-Зиновій, доц., проф.", "title": "доц. проф.", "given": "Петренко", "middle": "Анна Марія", "family": "Богдан-Зиновій", "initials": "П. А. М. Б.", "capitalized_force": "Доц., Проф. Петренко Анна Марія Богдан-Зиновій"} {"name": "Петрова, Мария", "given": "Мария", "family": "Петрова", "initials": "М. П."} {"name": "Петрова, Мария", "order": "FAMILY_FIRST", "given": "Мария", "family": "Петрова", "initials": "М. П."} -{"name": "Питер Брейгель мл.", "given": "Питер", "family": "Брейгель", "suffix": "мл.", "initials": "П. Б.", "capitalized_force": "Питер Брейгель Мл."} +{"name": "Питер Брейгель мл.", "given": "Питер", "family": "Брейгель", "suffix": "мл.", "initials": "П. Б.", "capitalized_force": "Питер Брейгель Мл.", "generation": "мл."} {"name": "Повалишин, Владимир Михайлович", "given": "Владимир", "middle": "Михайлович", "family": "Повалишин", "initials": "В. М. П."} {"name": "Полунін Михайло Степанович", "order": "FAMILY_FIRST", "given": "Михайло", "middle": "Степанович", "family": "Полунін", "initials": "М. С. П."} {"name": "Полянский, Борис Владимирович", "given": "Борис", "middle": "Владимирович", "family": "Полянский", "initials": "Б. В. П."} @@ -4800,7 +4804,7 @@ {"name": "Янко Павлов", "given": "Янко", "family": "Павлов", "initials": "Я. П."} {"name": "Яҡупова Ирина", "order": "FAMILY_FIRST", "given": "Ирина", "family": "Яҡупова", "initials": "И. Я."} {"name": "Яҡупова, Ирина", "given": "Ирина", "family": "Яҡупова", "initials": "И. Я."} -{"name": "ван ден Волф проф. др Александра Ева Сара млађи, дипл. инж.", "order": "FAMILY_FIRST", "title": "дипл. инж.", "given": "ден", "middle": "Волф проф. др Александра Ева Сара", "family": "ван", "suffix": "млађи", "initials": "д. В. п. д. А. Е. С. в.", "capitalized_force": "Дипл. Инж. Ван Ден Волф Проф. Др Александра Ева Сара Млађи"} +{"name": "ван ден Волф проф. др Александра Ева Сара млађи, дипл. инж.", "order": "FAMILY_FIRST", "title": "дипл. инж.", "given": "ден", "middle": "Волф проф. др Александра Ева Сара", "family": "ван", "suffix": "млађи", "initials": "д. В. п. д. А. Е. С. в.", "capitalized_force": "Дипл. Инж. Ван Ден Волф Проф. Др Александра Ева Сара Млађи", "generation": "млађи"} {"name": "ван ден Вольф Алтынай Сулайманова Асель Сартбаева Илимдин кандидаты", "order": "FAMILY_FIRST", "given": "ден", "middle": "Вольф Алтынай Сулайманова Асель Сартбаева Илимдин кандидаты", "family": "ван", "initials": "д. В. А. С. А. С. И. к. в.", "capitalized_force": "Ван Ден Вольф Алтынай Сулайманова Асель Сартбаева Илимдин Кандидаты"} {"name": "ван ден Вольф Бекер Шмидт, Проф. Доктор. Алтынай Сулайманова Асель Сартбаева Илимдин кандидаты", "title": "Проф. Доктор.", "given": "Алтынай", "middle": "Сулайманова Асель Сартбаева Илимдин кандидаты", "family": "ван ден Вольф Бекер Шмидт", "initials": "А. С. А. С. И. к. в. д. В. Б. Ш.", "capitalized_force": "Проф. Доктор. Алтынай Сулайманова Асель Сартбаева Илимдин Кандидаты Ван Ден Вольф Бекер Шмидт"} {"name": "вон Брухи Гонзалес Доминго Проф. Док. Ада Корнелиа Сезар Мартин", "order": "FAMILY_FIRST", "given": "Брухи", "middle": "Гонзалес Доминго Проф. Док. Ада Корнелиа Сезар Мартин", "family": "вон", "initials": "Б. Г. Д. П. Д. А. К. С. М. в.", "capitalized_force": "Вон Брухи Гонзалес Доминго Проф. Док. Ада Корнелиа Сезар Мартин"} @@ -4822,8 +4826,8 @@ {"name": "проф. др Александра Ева Сара ван ден Волф Петровић Југовић дипл. инж.", "title": "проф.", "given": "др", "middle": "Александра Ева Сара ван ден Волф Петровић Југовић дипл.", "family": "инж.", "initials": "д. А. Е. С. в. д. В. П. Ј. д. и.", "capitalized_force": "Проф. Др Александра Ева Сара Ван Ден Волф Петровић Југовић Дипл. Инж."} {"name": "проф. фон Вольф Гонзалес Домінго Анастасія Єва Софія д-р", "order": "FAMILY_FIRST", "title": "проф.", "given": "Вольф", "middle": "Гонзалес Домінго Анастасія Єва Софія д-р", "family": "фон", "initials": "В. Г. Д. А. Є. С. д. ф.", "capitalized_force": "Проф. Фон Вольф Гонзалес Домінго Анастасія Єва Софія Д-Р"} {"name": "проф., д-р Ада Корнелия Сезар Мартин фон Брюль кесе, м. ф. д.", "title": "д-р", "given": "Ада", "middle": "Корнелия Сезар Мартин фон Брюль кесе", "family": "проф.", "suffix": "м. ф. д.", "ambiguities": ["COMMA_STRUCTURE"], "initials": "А. К. С. М. ф. Б. к. п.", "capitalized_force": "Д-Р Ада Корнелия Сезар Мартин Фон Брюль Кесе Проф. М. Ф. Д."} -{"name": "проф., д-р Ада Корнелия Сезар Мартин фон Брюль — мл., к. м. н.", "title": "д-р", "given": "Ада", "middle": "Корнелия Сезар Мартин фон Брюль —", "family": "проф.", "suffix": "мл., к. м. н.", "ambiguities": ["COMMA_STRUCTURE"], "initials": "А. К. С. М. ф. Б. —. п.", "capitalized_force": "Д-Р Ада Корнелия Сезар Мартин Фон Брюль — Проф. Мл., К. М. Н."} -{"name": "проф., д-р Ада Корнелия Сезар Мартин фон Брюль — мл., к.м.н.", "title": "д-р", "given": "Ада", "middle": "Корнелия Сезар Мартин фон Брюль —", "family": "проф.", "suffix": "мл., к.м.н.", "initials": "А. К. С. М. ф. Б. —. п.", "capitalized_force": "Д-Р Ада Корнелия Сезар Мартин Фон Брюль — Проф. Мл., К.М.Н."} +{"name": "проф., д-р Ада Корнелия Сезар Мартин фон Брюль — мл., к. м. н.", "title": "д-р", "given": "Ада", "middle": "Корнелия Сезар Мартин фон Брюль —", "family": "проф.", "suffix": "мл., к. м. н.", "ambiguities": ["COMMA_STRUCTURE"], "initials": "А. К. С. М. ф. Б. —. п.", "capitalized_force": "Д-Р Ада Корнелия Сезар Мартин Фон Брюль — Проф. Мл., К. М. Н.", "generation": "мл.", "credentials": "к. м. н."} +{"name": "проф., д-р Ада Корнелия Сезар Мартин фон Брюль — мл., к.м.н.", "title": "д-р", "given": "Ада", "middle": "Корнелия Сезар Мартин фон Брюль —", "family": "проф.", "suffix": "мл., к.м.н.", "initials": "А. К. С. М. ф. Б. —. п.", "capitalized_force": "Д-Р Ада Корнелия Сезар Мартин Фон Брюль — Проф. Мл., К.М.Н.", "generation": "мл.", "credentials": "к.м.н."} {"name": "уулу Төрөкул Махмудов, Мырза Чыңгыз Айтматов Исхак Раззаков Парламент мүчөсү", "given": "Мырза", "middle": "Чыңгыз Айтматов Исхак Раззаков Парламент мүчөсү", "family": "уулу Төрөкул Махмудов", "initials": "М. Ч. А. И. Р. П. м. у. Т. М.", "capitalized_force": "Мырза Чыңгыз Айтматов Исхак Раззаков Парламент Мүчөсү Уулу Төрөкул Махмудов"} {"name": "уулу Төрөкул Чыңгыз Айтматов Исхак Раззаков Парламент мүчөсү", "order": "FAMILY_FIRST", "given": "Төрөкул", "middle": "Чыңгыз Айтматов Исхак Раззаков Парламент мүчөсү", "family": "уулу", "initials": "Т. Ч. А. И. Р. П. м. у.", "capitalized_force": "Уулу Төрөкул Чыңгыз Айтматов Исхак Раззаков Парламент Мүчөсү"} {"name": "фон Бруль Ада Карнэлія Сесар Марцін д-р", "order": "FAMILY_FIRST", "given": "Бруль", "middle": "Ада Карнэлія Сесар Марцін д-р", "family": "фон", "initials": "Б. А. К. С. М. д. ф.", "capitalized_force": "Фон Бруль Ада Карнэлія Сесар Марцін Д-Р"} @@ -5038,8 +5042,8 @@ {"name": "اصغر شازیہ", "order": "FAMILY_FIRST", "given": "شازیہ", "family": "اصغر", "initials": "ش. ا."} {"name": "اصغر، شازیہ", "order": "FAMILY_FIRST", "given": "شازیہ", "family": "اصغر", "initials": "ش. ا."} {"name": "اقبال قریشی", "given": "اقبال", "family": "قریشی", "initials": "ا. ق."} -{"name": "الدكتور عايدة كورنيليا سيزار مارتن فون برول الإبن، طبيب وجراح", "title": "الدكتور", "given": "طبيب", "middle": "وجراح", "family": "عايدة كورنيليا سيزار مارتن فون برول", "suffix": "الإبن", "initials": "ط. و. ع. ك. س. م. ف. ب."} -{"name": "السيد أحمد رامي نجيب محفوظ أبو الأغا الابن، النائب", "given": "النائب", "family": "السيد أحمد رامي نجيب محفوظ أبو الأغا", "suffix": "الابن", "initials": "ا. ا. أ. ر. ن. م. ا."} +{"name": "الدكتور عايدة كورنيليا سيزار مارتن فون برول الإبن، طبيب وجراح", "title": "الدكتور", "given": "طبيب", "middle": "وجراح", "family": "عايدة كورنيليا سيزار مارتن فون برول", "suffix": "الإبن", "initials": "ط. و. ع. ك. س. م. ف. ب.", "generation": "الإبن"} +{"name": "السيد أحمد رامي نجيب محفوظ أبو الأغا الابن، النائب", "given": "النائب", "family": "السيد أحمد رامي نجيب محفوظ أبو الأغا", "suffix": "الابن", "initials": "ا. ا. أ. ر. ن. م. ا.", "generation": "الابن"} {"name": "العامر، كمال مجدي", "order": "FAMILY_FIRST", "given": "كمال", "middle": "مجدي", "family": "العامر", "initials": "ك. م. ا."} {"name": "النجار، سميرة", "order": "FAMILY_FIRST", "given": "سميرة", "family": "النجار", "initials": "س. ا."} {"name": "امید رضا ملایری", "given": "امید", "middle": "رضا", "family": "ملایری", "initials": "ا. ر. م."} @@ -5058,7 +5062,7 @@ {"name": "جمال محمد", "given": "جمال", "family": "محمد", "initials": "ج. م."} {"name": "جميل عز الدين", "given": "جميل", "middle": "عز", "family": "الدين", "initials": "ج. ع. ا."} {"name": "جورج إسحاق", "given": "جورج", "family": "إسحاق", "initials": "ج. إ."} -{"name": "جورج بوش الابن", "given": "جورج", "family": "بوش", "suffix": "الابن", "initials": "ج. ب."} +{"name": "جورج بوش الابن", "given": "جورج", "family": "بوش", "suffix": "الابن", "initials": "ج. ب.", "generation": "الابن"} {"name": "جورج ميشيل", "given": "جورج", "family": "ميشيل", "initials": "ج. م."} {"name": "جوزف پال", "given": "جوزف", "family": "پال", "initials": "ج. پ."} {"name": "جيانيس كريستو", "given": "جيانيس", "family": "كريستو", "initials": "ج. ك."} @@ -5289,7 +5293,7 @@ {"name": "هشام فؤاد", "given": "هشام", "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": "پ. آ. ک. س. م. و. ب.", "generation": "جونیور", "credentials": "دکترای دندانپزشکی"} {"name": "واټسن جان همیش", "order": "FAMILY_FIRST", "given": "جان", "middle": "همیش", "family": "واټسن", "initials": "ج. ه. و."} {"name": "واٽسن ميري سيو ھامش", "order": "FAMILY_FIRST", "given": "ميري", "middle": "سيو ھامش", "family": "واٽسن", "initials": "م. س. ھ. و."} {"name": "وداد أنطوان", "given": "وداد", "family": "أنطوان", "initials": "و. أ."} @@ -5303,7 +5307,7 @@ {"name": "يوسف السالم", "given": "يوسف", "family": "السالم", "initials": "ي. ا."} {"name": "يوسف مكي", "given": "يوسف", "family": "مكي", "initials": "ي. م."} {"name": "پردیس افکاری", "given": "پردیس", "family": "افکاری", "initials": "پ. ا."} -{"name": "پروفسور آدا کورنلیا سزار مارتین وان بروهل جونیور، دکترای دندانپزشکی", "given": "دکترای", "middle": "دندانپزشکی", "family": "پروفسور آدا کورنلیا سزار مارتین وان بروهل", "suffix": "جونیور", "initials": "د. د. پ. آ. ک. س. م. و. ب."} +{"name": "پروفسور آدا کورنلیا سزار مارتین وان بروهل جونیور، دکترای دندانپزشکی", "given": "دکترای", "middle": "دندانپزشکی", "family": "پروفسور آدا کورنلیا سزار مارتین وان بروهل", "suffix": "جونیور", "initials": "د. د. پ. آ. ک. س. م. و. ب.", "generation": "جونیور"} {"name": "پروفيسر ڊاڪٽر ايڊا ڪورنيليا سيزر مارٽن وان برل گونزالس ڊومنگو ايم ڊي ڊي ڊي ايس", "given": "پروفيسر", "middle": "ڊاڪٽر ايڊا ڪورنيليا سيزر مارٽن وان برل گونزالس ڊومنگو ايم ڊي ڊي ڊي", "family": "ايس", "initials": "پ. ڊ. ا. ڪ. س. م. و. ب. گ. ڊ. ا. ڊ. ڊ. ڊ. ا."} {"name": "پروفیسور ډاکټر اډا کورنیلیا ایوا سوفیا وون لیوه بیکر شمیت ایم ‌ډی ډیی ډیی ایس", "given": "پروفیسور", "middle": "ډاکټر اډا کورنیلیا ایوا سوفیا وون لیوه بیکر شمیت ایم ‌ډی ډیی ډیی", "family": "ایس", "initials": "پ. ډ. ا. ک. ا. س. و. ل. ب. ش. ا. ‌. ډ. ډ. ا."} {"name": "ژیلا", "given": "ژیلا", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "ژ."} @@ -5611,19 +5615,19 @@ {"name": "આઇરીન અદાણી", "given": "આઇરીન", "family": "અદાણી", "initials": "આ. અ."} {"name": "કિરણ", "given": "કિરણ", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "ક."} {"name": "કિરણ", "order": "FAMILY_FIRST", "family": "કિરણ", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "ક."} -{"name": "કુમાર શાહ શ્રી. પટેલ ખુશી કિંજલ જૂનિયર, એમપી", "order": "FAMILY_FIRST", "given": "એમપી", "family": "કુમાર શાહ શ્રી. પટેલ ખુશી કિંજલ", "suffix": "જૂનિયર", "initials": "એ. ક. શ. શ. પ. ખ. ક."} +{"name": "કુમાર શાહ શ્રી. પટેલ ખુશી કિંજલ જૂનિયર, એમપી", "order": "FAMILY_FIRST", "given": "એમપી", "family": "કુમાર શાહ શ્રી. પટેલ ખુશી કિંજલ", "suffix": "જૂનિયર", "initials": "એ. ક. શ. શ. પ. ખ. ક.", "generation": "જૂનિયર"} {"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": "પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન ફૉન્ બ્રાઑલ્", "suffix": "જૂનિયર", "initials": "એ. ડ. પ. ડ. એ. ક. સ. મ. ફ. બ."} -{"name": "ફૉન્ બ્રાઑલ્ પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન જૂનિયર, એમ.ડી. ડી.ડી.એસ.", "order": "FAMILY_FIRST", "given": "એમ.ડી.", "middle": "ડી.ડી.એસ.", "family": "ફૉન્ બ્રાઑલ્ પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન", "suffix": "જૂનિયર", "initials": "એ. ડ. ફ. બ. પ. ડ. એ. ક. સ. મ."} +{"name": "પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન ફૉન્ બ્રાઑલ્ જૂનિયર, એમ.ડી. ડી.ડી.એસ.", "given": "એમ.ડી.", "middle": "ડી.ડી.એસ.", "family": "પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન ફૉન્ બ્રાઑલ્", "suffix": "જૂનિયર", "initials": "એ. ડ. પ. ડ. એ. ક. સ. મ. ફ. બ.", "generation": "જૂનિયર"} +{"name": "ફૉન્ બ્રાઑલ્ પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન જૂનિયર, એમ.ડી. ડી.ડી.એસ.", "order": "FAMILY_FIRST", "given": "એમ.ડી.", "middle": "ડી.ડી.એસ.", "family": "ફૉન્ બ્રાઑલ્ પ્રો. ડૉ. એડા કૉર્નેલિયા સિઝર માર્ટિન", "suffix": "જૂનિયર", "initials": "એ. ડ. ફ. બ. પ. ડ. એ. ક. સ. મ.", "generation": "જૂનિયર"} {"name": "બ્રાઑલ્, એડા કૉર્નેલિયા સિઝર માર્ટિન ફૉન્", "given": "એડા", "middle": "કૉર્નેલિયા સિઝર માર્ટિન ફૉન્", "family": "બ્રાઑલ્", "initials": "એ. ક. સ. મ. ફ. બ."} {"name": "મુલર કૅથિ", "order": "FAMILY_FIRST", "given": "કૅથિ", "family": "મુલર", "initials": "ક. મ."} {"name": "મુલર, કૅથિ", "given": "કૅથિ", "family": "મુલર", "initials": "ક. મ."} {"name": "શાહ, પટેલ ખુશી કિંજલ કુમાર", "given": "પટેલ", "middle": "ખુશી કિંજલ કુમાર", "family": "શાહ", "initials": "પ. ખ. ક. ક. શ."} -{"name": "શ્રી. પટેલ ખુશી કિંજલ કુમાર શાહ જૂનિયર, એમપી", "given": "એમપી", "family": "શ્રી. પટેલ ખુશી કિંજલ કુમાર શાહ", "suffix": "જૂનિયર", "initials": "એ. શ. પ. ખ. ક. ક. શ."} +{"name": "શ્રી. પટેલ ખુશી કિંજલ કુમાર શાહ જૂનિયર, એમપી", "given": "એમપી", "family": "શ્રી. પટેલ ખુશી કિંજલ કુમાર શાહ", "suffix": "જૂનિયર", "initials": "એ. શ. પ. ખ. ક. ક. શ.", "generation": "જૂનિયર"} {"name": "સિનબાદ", "given": "સિનબાદ", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "સ."} {"name": "સિનબાદ", "order": "FAMILY_FIRST", "family": "સિનબાદ", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "સ."} {"name": "સ્ટૂબર જઝિલીયા હૅમીશ", "order": "FAMILY_FIRST", "given": "જઝિલીયા", "middle": "હૅમીશ", "family": "સ્ટૂબર", "initials": "જ. હ. સ."} @@ -5701,14 +5705,14 @@ {"name": "ಝೆಂಡಾಯಾ", "order": "FAMILY_FIRST", "family": "ಝೆಂಡಾಯಾ", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "ಝ."} {"name": "ಪಾಟೀಲ್ ಶ್ರೀ. ನಾರಯಣ ಕುಮಾರ್ ಶಿವ ರಾಮ ಕಿರಿ, ಎಮ್‌ಪಿ", "order": "FAMILY_FIRST", "given": "ಎಮ್‌ಪಿ", "family": "ಪಾಟೀಲ್ ಶ್ರೀ. ನಾರಯಣ ಕುಮಾರ್ ಶಿವ ರಾಮ ಕಿರಿ", "initials": "ಎ. ಪ. ಶ. ನ. ಕ. ಶ. ರ. ಕ."} {"name": "ಪಾಟೀಲ್, ನಾರಯಣ ಕುಮಾರ್ ಶಿವ ರಾಮ", "given": "ನಾರಯಣ", "middle": "ಕುಮಾರ್ ಶಿವ ರಾಮ", "family": "ಪಾಟೀಲ್", "initials": "ನ. ಕ. ಶ. ರ. ಪ."} -{"name": "ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ವಾನ್ ಬ್ರಾಲ್ ಜೂನಿಯರ್, ಎಂ.ಡಿ ಡಿ.ಡಿ.ಎಸ್", "given": "ಎಂ.ಡಿ", "middle": "ಡಿ.ಡಿ.ಎಸ್", "family": "ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ವಾನ್ ಬ್ರಾಲ್", "suffix": "ಜೂನಿಯರ್", "initials": "ಎ. ಡ. ಪ. ಡ. ಅ. ಕ. ಸ. ಮ. ವ. ಬ."} +{"name": "ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ವಾನ್ ಬ್ರಾಲ್ ಜೂನಿಯರ್, ಎಂ.ಡಿ ಡಿ.ಡಿ.ಎಸ್", "given": "ಎಂ.ಡಿ", "middle": "ಡಿ.ಡಿ.ಎಸ್", "family": "ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ವಾನ್ ಬ್ರಾಲ್", "suffix": "ಜೂನಿಯರ್", "initials": "ಎ. ಡ. ಪ. ಡ. ಅ. ಕ. ಸ. ಮ. ವ. ಬ.", "generation": "ಜೂನಿಯರ್"} {"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": "ವಾನ್ ಬ್ರಾಲ್ ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್", "suffix": "ಜೂನಿಯರ್", "initials": "ಎ. ಡ. ವ. ಬ. ಪ. ಡ. ಅ. ಕ. ಸ. ಮ."} +{"name": "ವಾನ್ ಬ್ರಾಲ್ ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್ ಜೂನಿಯರ್, ಎಂ.ಡಿ ಡಿ.ಡಿ.ಎಸ್", "order": "FAMILY_FIRST", "given": "ಎಂ.ಡಿ", "middle": "ಡಿ.ಡಿ.ಎಸ್", "family": "ವಾನ್ ಬ್ರಾಲ್ ಪ್ರೊ. ಡಾ. ಅಡಾ ಕಾರ್ನೆಲಿಯಾ ಸಿಸಾರ್ ಮಾರ್ಟಿನ್", "suffix": "ಜೂನಿಯರ್", "initials": "ಎ. ಡ. ವ. ಬ. ಪ. ಡ. ಅ. ಕ. ಸ. ಮ.", "generation": "ಜೂನಿಯರ್"} {"name": "ವಿಜಯ ಲಕ್ಷ್ಮಿ ಹರೀಶ್ ಯಶ್", "given": "ವಿಜಯ", "middle": "ಲಕ್ಷ್ಮಿ ಹರೀಶ್", "family": "ಯಶ್", "initials": "ವ. ಲ. ಹ. ಯ."} {"name": "ಶೆಟ್ಟಿ ರಶ್ಮಿಕಾ", "order": "FAMILY_FIRST", "given": "ರಶ್ಮಿಕಾ", "family": "ಶೆಟ್ಟಿ", "initials": "ರ. ಶ."} {"name": "ಶೆಟ್ಟಿ, ರಶ್ಮಿಕಾ", "given": "ರಶ್ಮಿಕಾ", "family": "ಶೆಟ್ಟಿ", "initials": "ರ. ಶ."} @@ -5719,7 +5723,7 @@ {"name": "ಸ್ಟೋಬರ್, ಝಝಿಲಿಯಾ ಹಮಿಶ್", "given": "ಝಝಿಲಿಯಾ", "middle": "ಹಮಿಶ್", "family": "ಸ್ಟೋಬರ್", "initials": "ಝ. ಹ. ಸ."} {"name": "അശ്വതി നായർ", "given": "അശ്വതി", "family": "നായർ", "initials": "അ. ന."} {"name": "എയ്‌ഡ കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ വാൻ ബ്ര്യൂൾ എം.ഡി. ഡി.ഡി.എസ്", "given": "എയ്‌ഡ", "middle": "കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ വാൻ ബ്ര്യൂൾ എം.ഡി.", "family": "ഡി.ഡി.എസ്", "initials": "എ. ക. സ. മ. വ. ബ. എ. ഡ."} -{"name": "കറുവാപ്പറമ്പിൽ ശ്രീ. തോമസ് കുരുവിള അന്തോണി ജൂനിയർ, എംപി", "order": "FAMILY_FIRST", "given": "എംപി", "family": "കറുവാപ്പറമ്പിൽ ശ്രീ. തോമസ് കുരുവിള അന്തോണി", "suffix": "ജൂനിയർ", "initials": "എ. ക. ശ. ത. ക. അ."} +{"name": "കറുവാപ്പറമ്പിൽ ശ്രീ. തോമസ് കുരുവിള അന്തോണി ജൂനിയർ, എംപി", "order": "FAMILY_FIRST", "given": "എംപി", "family": "കറുവാപ്പറമ്പിൽ ശ്രീ. തോമസ് കുരുവിള അന്തോണി", "suffix": "ജൂനിയർ", "initials": "എ. ക. ശ. ത. ക. അ.", "generation": "ജൂനിയർ"} {"name": "കറുവാപ്പറമ്പിൽ, തോമസ് കുരുവിള അന്തോണി", "given": "തോമസ്", "middle": "കുരുവിള അന്തോണി", "family": "കറുവാപ്പറമ്പിൽ", "initials": "ത. ക. അ. ക."} {"name": "കാത്തി മുള്ളർ", "given": "കാത്തി", "family": "മുള്ളർ", "initials": "ക. മ."} {"name": "ജോൺ ചാണ്ടി പടവീട്ടിൽ", "given": "ജോൺ", "middle": "ചാണ്ടി", "family": "പടവീട്ടിൽ", "initials": "ജ. ച. പ."} @@ -5733,7 +5737,7 @@ {"name": "ബ്ര്യൂൾ, എയ്‌ഡ കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ വാൻ", "given": "എയ്‌ഡ", "middle": "കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ വാൻ", "family": "ബ്ര്യൂൾ", "initials": "എ. ക. സ. മ. വ. ബ."} {"name": "മുള്ളർ കാത്തി", "order": "FAMILY_FIRST", "given": "കാത്തി", "family": "മുള്ളർ", "initials": "ക. മ."} {"name": "മുള്ളർ, കാത്തി", "given": "കാത്തി", "family": "മുള്ളർ", "initials": "ക. മ."} -{"name": "വാൻ ബ്ര്യൂൾ പ്രൊഫ. ഡോ. എയ്‌ഡ കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ ജൂനിയർ, എം.ഡി. ഡി.ഡി.എസ്", "order": "FAMILY_FIRST", "given": "എം.ഡി.", "middle": "ഡി.ഡി.എസ്", "family": "വാൻ ബ്ര്യൂൾ പ്രൊഫ. ഡോ. എയ്‌ഡ കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ", "suffix": "ജൂനിയർ", "initials": "എ. ഡ. വ. ബ. പ. ഡ. എ. ക. സ. മ."} +{"name": "വാൻ ബ്ര്യൂൾ പ്രൊഫ. ഡോ. എയ്‌ഡ കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ ജൂനിയർ, എം.ഡി. ഡി.ഡി.എസ്", "order": "FAMILY_FIRST", "given": "എം.ഡി.", "middle": "ഡി.ഡി.എസ്", "family": "വാൻ ബ്ര്യൂൾ പ്രൊഫ. ഡോ. എയ്‌ഡ കോർണീലിയ സീസ൪ മാ൪ട്ടിൻ", "suffix": "ജൂനിയർ", "initials": "എ. ഡ. വ. ബ. പ. ഡ. എ. ക. സ. മ.", "generation": "ജൂനിയർ"} {"name": "സസിലിയ ഹാമിഷ് സ്‌റ്റോബർ", "given": "സസിലിയ", "middle": "ഹാമിഷ്", "family": "സ്‌റ്റോബർ", "initials": "സ. ഹ. സ."} {"name": "സിൻബാദ്", "given": "സിൻബാദ്", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "initials": "സ."} {"name": "സിൻബാദ്", "order": "FAMILY_FIRST", "family": "സിൻബാദ്", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as given (position)"], "initials": "സ."} @@ -6034,7 +6038,7 @@ {"name": "ア゛イ タロウ", "given": "ア゛イ", "family": "タロウ"} {"name": "アインシュタイン・アルベルト", "order": "FAMILY_FIRST", "given": "アルベルト", "family": "アインシュタイン"} {"name": "アルベルト・アインシュタイン", "given": "アルベルト", "family": "アインシュタイン"} -{"name": "エリザベス二世", "given": "エリザベス", "suffix": "二世", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"]} +{"name": "エリザベス二世", "given": "エリザベス", "suffix": "二世", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"], "generation": "二世"} {"name": "ジェニファー・ソフィア・フォン・スミス・ジュニア博士", "given": "ソフィア", "middle": "フォン スミス ジュニア博士", "family": "ジェニファー"} {"name": "ジョン ・ スミス", "given": "ジョン", "family": "スミス"} {"name": "セシリア・ローズ・ブラウン", "given": "セシリア", "middle": "ローズ", "family": "ブラウン"} @@ -6048,7 +6052,7 @@ {"name": "マイケル.", "given": "マイケル.", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"]} {"name": "マイケル·ジャクソン", "given": "マイケル", "family": "ジャクソン"} {"name": "マイケル・ジャクソン", "given": "マイケル", "family": "ジャクソン"} -{"name": "ロバート・ダウニー・ジュニア", "given": "ロバート", "family": "ダウニー", "suffix": "ジュニア"} +{"name": "ロバート・ダウニー・ジュニア", "given": "ロバート", "family": "ダウニー", "suffix": "ジュニア", "generation": "ジュニア"} {"name": "ㄱㄴ 김", "given": "ㄱㄴ", "family": "김", "initials": "ㄱ."} {"name": "一郎安藤", "family": "一郎安藤"} {"name": "三橋淳", "family": "三橋淳"} @@ -6255,7 +6259,7 @@ {"name": "田中、太郎", "given": "田中、太郎", "ambiguities": ["GIVEN_OR_FAMILY"], "alternatives": ["GIVEN_OR_FAMILY: name as family (position)"]} {"name": "田中『ハナ』花子", "given": "花子", "family": "田中", "nickname": "ハナ"} {"name": "田中さん", "family": "田中", "suffix": "さん"} -{"name": "田中さん II", "family": "田中", "suffix": "さん II"} +{"name": "田中さん II", "family": "田中", "suffix": "さん II", "generation": "II", "credentials": "さん"} {"name": "田中さん V.", "given": "田中さん", "family": "V.", "initials": "V."} {"name": "田中さん v", "given": "田中さん", "family": "v", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: generation as suffix (vocabulary)"], "initials": "v.", "capitalized": "田中さん V"} {"name": "田中さん 様.", "family": "田中", "suffix": "さん 様."} @@ -6322,11 +6326,11 @@ {"name": "陳·陳·怡君·教授,小·達印·博士", "order": "FAMILY_FIRST", "given": "小", "middle": "達印", "family": "陳 陳 怡君", "suffix": "教授, 博士"} {"name": "陳俊傑", "family": "陳俊傑"} {"name": "陳婷", "family": "陳婷"} -{"name": "陳子媚 二世", "family": "陳子媚", "suffix": "二世"} +{"name": "陳子媚 二世", "family": "陳子媚", "suffix": "二世", "generation": "二世"} {"name": "陳子媚先生,小惠儀太平紳士", "order": "FAMILY_FIRST", "given": "小惠儀", "family": "陳子媚先生", "suffix": "太平紳士"} {"name": "陳子媚惠儀", "order": "FAMILY_FIRST", "family": "陳子媚惠儀"} -{"name": "陳怡君 二世", "family": "陳怡君", "suffix": "二世"} -{"name": "陳怡君二世", "family": "陳怡君", "suffix": "二世"} +{"name": "陳怡君 二世", "family": "陳怡君", "suffix": "二世", "generation": "二世"} +{"name": "陳怡君二世", "family": "陳怡君", "suffix": "二世", "generation": "二世"} {"name": "陳怡君,醫學博士", "family": "陳怡君", "suffix": "醫學博士"} {"name": "陳明忠", "family": "陳明忠"} {"name": "雅婷", "family": "雅婷"} @@ -6340,7 +6344,7 @@ {"name": "韩旭", "family": "韩旭"} {"name": "韩红", "family": "韩红"} {"name": "馮·陳·怡君·達印", "order": "FAMILY_FIRST", "given": "陳", "middle": "怡君 達印", "family": "馮"} -{"name": "馮·陳·怡君·達印·二世醫學博士", "order": "FAMILY_FIRST", "given": "陳", "middle": "怡君 達印", "family": "馮", "suffix": "二世 醫學博士"} +{"name": "馮·陳·怡君·達印·二世醫學博士", "order": "FAMILY_FIRST", "given": "陳", "middle": "怡君 達印", "family": "馮", "suffix": "二世 醫學博士", "generation": "二世", "credentials": "醫學博士"} {"name": "馮定國", "family": "馮定國"} {"name": "駒井玲子", "family": "駒井玲子"} {"name": "马丁·路德·金", "given": "马丁", "middle": "路德", "family": "金"} @@ -6402,7 +6406,7 @@ {"name": "김민준박사님", "given": "민준", "family": "김", "suffix": "박사님"} {"name": "김민준씨", "given": "민준", "family": "김", "suffix": "씨"} {"name": "김민준씨 (Jimmy)", "given": "민준", "family": "김", "suffix": "씨", "nickname": "Jimmy"} -{"name": "김민준씨 Jr.", "given": "민준", "family": "김", "suffix": "씨 Jr."} +{"name": "김민준씨 Jr.", "given": "민준", "family": "김", "suffix": "씨 Jr.", "generation": "Jr.", "credentials": "씨"} {"name": "김민준씨, J.씨", "family": "김민준", "suffix": "씨, J.씨"} {"name": "김민준씨, MA PhD", "family": "김민준", "suffix": "씨, MA PhD"} {"name": "김민준씨, V.", "given": "V.", "family": "김민준", "suffix": "씨", "initials": "V."} @@ -6436,7 +6440,7 @@ {"name": "남다름", "given": "다름", "family": "남"} {"name": "노유상", "given": "유상", "family": "노"} {"name": "도민호", "given": "민호", "family": "도"} -{"name": "로버트 다우니 주니어", "given": "다우니", "family": "로버트", "suffix": "주니어"} +{"name": "로버트 다우니 주니어", "given": "다우니", "family": "로버트", "suffix": "주니어", "generation": "주니어"} {"name": "류효영", "given": "효영", "family": "류"} {"name": "마이클·잭슨", "given": "마이클", "family": "잭슨"} {"name": "마틴 킹, MA", "given": "틴", "middle": "킹", "family": "마", "suffix": "MA", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (declared)"]} diff --git a/tools/differential/snapshot.py b/tools/differential/snapshot.py index 7ff787e0f..e0dd1a5cd 100644 --- a/tools/differential/snapshot.py +++ b/tools/differential/snapshot.py @@ -5,7 +5,10 @@ ambiguity kinds, initials() and the two case-repair views. The case views are recorded only where they move something: `capitalized` where capitalized() renders other than the name as parsed, `capitalized_force` where capitalized(force=True) -renders other than capitalized() does (#826). +renders other than capitalized() does (#826). The suffix's two views +(rules/R8) are recorded where the suffix holds a generation: +`generation` then, and `credentials` beside it where the suffix holds +both, so a suffix with no `generation` recorded is all credentials. tests/v2/test_snapshot.py fails when the tree's readings stop matching it. A change that moves readings re-records, and the PR diff of snapshot.jsonl is the list of names it moved -- one line per name, so @@ -212,6 +215,10 @@ def row(name: str, order: str | None, v2: dict[str, Any] | None, for view in CASE_VIEWS: if v2[f"_{view}"]: out[view] = v2[f"_{view}"] + if v2.get("_generation"): + out["generation"] = v2["_generation"] + if v2["_credentials"]: + out["credentials"] = v2["_credentials"] return out @@ -245,10 +252,15 @@ def alternatives(p: ParsedName) -> list[str]: if (alt := getattr(a, "alternative", None)) is not None] +#: The suffix's views a row records (rules/R8), in the order row() +#: writes them. +SUFFIX_VIEWS = ("generation", "credentials") + #: The keys a row came to record after the snapshot existed, each with #: the change that added it: a snapshot recorded before it carries none #: of them, so a comparison against it leaves them out. -RECORDED_LATER = ((CASE_VIEWS, "#826"), (("alternatives",), "#752 phase 2m")) +RECORDED_LATER = ((CASE_VIEWS, "#826"), (("alternatives",), "#752 phase 2m"), + (SUFFIX_VIEWS, "3.0's 4b (#326)")) #: The key of a snapshot's first line since #752 phase 2m, naming the #: `RECORDED_LATER` keys the tree that recorded it could record, so a @@ -260,14 +272,17 @@ def alternatives(p: ParsedName) -> list[str]: def recorded_keys() -> tuple[str, ...]: """The `RECORDED_LATER` keys the imported nameparser records: the - case views, which every 2.x tree renders, and the alternatives where - its Ambiguity has the field (2.7).""" + case views, which every 2.x tree renders, the alternatives where + its Ambiguity has the field (2.7), and the suffix's views where + ParsedName has them (3.0).""" import dataclasses import nameparser fields = {f.name for f in dataclasses.fields(nameparser.Ambiguity)} - return CASE_VIEWS + (("alternatives",) if "alternative" in fields - else ()) + return (CASE_VIEWS + + (("alternatives",) if "alternative" in fields else ()) + + (SUFFIX_VIEWS if hasattr(nameparser.ParsedName, "generation") + else ())) def recorded(text: str) -> frozenset[str] | None: @@ -393,6 +408,9 @@ def build(policy: Policy) -> Parser: v2["_ambiguities"] = sorted({a.kind.name for a in p.ambiguities}) v2["_alternatives"] = alternatives(p) v2["_initials"] = p.initials() or "" + # none from a tree before 3.0, which `--base` reads through this + v2["_generation"] = getattr(p, "generation", "") + v2["_credentials"] = getattr(p, "credentials", "") v2.update(case_views(str(p), str(parsers[order].capitalized(p)), str(parsers[order].capitalized(p, force=True)))) rows.append(row(name, order, v2)) From 18843285ba7fb60182ddb11a28f8fb666712f723 Mon Sep 17 00:00:00 2001 From: Derek Gulbranson Date: Thu, 29 Oct 2026 17:44:40 -0700 Subject: [PATCH 2/6] Keep the writer's separators in the suffix views; review fixes (4b) Two words of one view are separated by a comma only where one was typed between them (rules/R1). R8's examples, Accepted bullets and decisions pointers follow the design-docs review. Co-Authored-By: Claude Opus 5.5 --- AGENTS.md | 2 +- docs/design/decisions/A1-ambiguity-report.md | 2 +- .../R8-generation-and-credentials-views.md | 10 +++---- .../decisions/suffix-field-composition.md | 2 +- ...R1-fields-are-views-of-the-parsed-words.md | 2 +- .../R8-generation-and-credentials-views.md | 30 +++++++++++-------- docs/design/vocabulary-model-rfc.md | 4 +-- docs/release_log.rst | 2 +- nameparser/_pipeline/_vocab.py | 4 +-- nameparser/_types.py | 16 ++++++---- tests/v2/rules_budget.json | 4 +-- tests/v2/test_types.py | 13 ++++++-- tools/differential/README.md | 6 +++- tools/differential/corpus_rules.jsonl | 4 +++ tools/differential/snapshot.jsonl | 6 +++- 15 files changed, 67 insertions(+), 40 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index e0d94a3b0..8076124c6 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -30,7 +30,7 @@ Three committed contributor docs carry the parser's normative rules and their re **Counting claims.** A bare count in prose is either an assertion or a liability, keyed by who observes its staleness: asserted counts (a test holds the number) fail CI at change time — the useful kind; dated snapshots ("51 sites at spec time") cannot go stale; standing present-tense prose counts are the forbidden class — promote to an assertion, add a date, or state the invariant and let a test count. After changing how many times something runs, sweep for counts, not for the thing's name. -**Release-log claims.** Quantified or universal behavior claims in release bullets must come from the snapshot's diff since the last release, be verified against rules examples, or -- for a view the snapshot cannot see -- carry a recompute recipe stored with the design entry the bullet cites; never write one from memory. `uv run python tools/differential/snapshot.py --since v` prints every corpus name the release moved, grouped by changed field; v2.4.1 is the first tag carrying a snapshot, and for an older release `compare.py --baseline ` prints the same report against the PyPI wheel, closing with the entries compared and how many moved names are Latin-only. Both say how many moved names only `corpus_cldr.jsonl` holds. The snapshot records the seven role fields, ambiguity kinds, `initials()` and the two case-repair views (`capitalized()` and `capitalized(force=True)`, each only where it changes the text, #826) for every name, so an initials or case count is read off it directly -- with two limits. A case view holds the whole repaired name, so in a name repair changes, a role move that changes the rendering moves the view too, with or without a word recased: read a view move that comes with a role move by its words' case, not by whether it moved (#808's `John Smith, otr/l` moved both, `'John Smith OTR/L'` -> `'Otr/L John Smith'`). And `--since` a tag whose snapshot predates #826 (v2.5.0 and earlier) does not compare the views at all, so 2.6.0's case claims come from `compare.py --baseline 2.5.0`. `corpus_cldr.jsonl`'s fictional renderings are in it: count them out of a release figure (both tools print how many moved names only that file holds), or say the figure includes them. A render view the snapshot does not record -- `str()` under a custom format, `initials()` under a custom spec -- stays invisible to it, and for those the first two sources cannot reach a claim: the snapshot is byte-identical across the change, and an example line witnesses an output without counting anything. The DEFAULT `str()` is mostly invisible too, the snapshot seeing it only through a case view where repair changes the text: #754's render defaults moved `str()` for 1,034 corpus entries and the case views for 159, so a change to the default rendering is measured by rendering every entry in both trees (decisions/R6's 2026-10-29 entry holds the recipe). A recipe names the corpus files, the policy sweep, and -- the part that is easy to omit and fatal -- THE COMPARATOR, which must be something the shipped tree is not: #408's first recipe said to compare `initials()` against a folded-first partition, which is what `initials()` now IS, so it reproduced 0 where the bullet claimed 660 and was the only stated provenance for the number. Run the recipe as written before shipping the bullet. Cross-version numbers (a released wheel, the pre-change tree) are dated snapshots under Counting claims, since nothing in the repository re-runs them. The same standard binds decisions entries and PR bodies: a claim that a change restores the released reading is measured over the whole moved population against the wheel, never spot-checked (#625 claimed its 774 moves landed on the 1.4.0 and 2.3.0 readings from three names; measured, the tree matched 2.3.0 on 0 of 258 moved texts, master on 152), and a population size is re-counted from its recipe, never copied from another entry (the same entry carried #624's 137,810 for a grid of 395,148). Code comments citing rule IDs follow the excerpt discipline, checked by tests/v2/test_doc_citations.py: a rule's quotable text is its fields' prose (When, Tolerated, Then and its bullets, Because, and the Except, Precedence and Accepted bullets), and its fences and the footer below `---`, where the `Signal:` line stands, are not; `rules/H` names the H section, whose Background is quotable; a decisions citation may paraphrase, but what it quotes must be verbatim; and a reference with no quote must still name something that exists. The check's reach is a quote within four words of the ID or chained to one that is: a quote further off reads exactly like a name written in double quotes, so it is NOT checked, and the second review of #632 found 14 such quotes stale by hand. Keep a quote beside its ID. Quotes of AGENTS.md itself are not checked at all. **A citation comment holds three things: the quote, a line saying which clause this code implements, and `decisions/X (#N)` pointers to the entries that hold the history.** A code-local reason a reader of that line needs may stay beside them (why an index is safe to keep, why a test runs last), but issue history, measurements and restated examples belong in decisions/, where they are dated and kept current; in a comment they are a second copy that goes stale where nobody looks. #760 trimmed five blocks of 59 to 100 lines that had grown that way (`_post_rules._mark_suffix_entries`, group's P3 both-sides test, its S2/P2/P4 chain head and S4 chain emitter, and the honorific peel's scope in `_script_segment`), moving into dated decisions bullets what those entries lacked. Two of the moved claims no longer held: a policy example that had stopped reaching its case, and a credential said to land as a title that lands as a suffix. +**Release-log claims.** Quantified or universal behavior claims in release bullets must come from the snapshot's diff since the last release, be verified against rules examples, or -- for a view the snapshot cannot see -- carry a recompute recipe stored with the design entry the bullet cites; never write one from memory. `uv run python tools/differential/snapshot.py --since v` prints every corpus name the release moved, grouped by changed field; v2.4.1 is the first tag carrying a snapshot, and for an older release `compare.py --baseline ` prints the same report against the PyPI wheel, closing with the entries compared and how many moved names are Latin-only. Both say how many moved names only `corpus_cldr.jsonl` holds. The snapshot records the seven role fields, ambiguity kinds, `initials()`, the two case-repair views (`capitalized()` and `capitalized(force=True)`, each only where it changes the text, #826) and, since 3.0, the suffix's `generation` and `credentials` views (where the suffix holds a generation, rules/R8) for every name, so an initials, case or generation count is read off it directly -- with two limits. A case view holds the whole repaired name, so in a name repair changes, a role move that changes the rendering moves the view too, with or without a word recased: read a view move that comes with a role move by its words' case, not by whether it moved (#808's `John Smith, otr/l` moved both, `'John Smith OTR/L'` -> `'Otr/L John Smith'`). And `--since` a tag whose snapshot predates #826 (v2.5.0 and earlier) does not compare the views at all, so 2.6.0's case claims come from `compare.py --baseline 2.5.0`. `corpus_cldr.jsonl`'s fictional renderings are in it: count them out of a release figure (both tools print how many moved names only that file holds), or say the figure includes them. A render view the snapshot does not record -- `str()` under a custom format, `initials()` under a custom spec -- stays invisible to it, and for those the first two sources cannot reach a claim: the snapshot is byte-identical across the change, and an example line witnesses an output without counting anything. The DEFAULT `str()` is mostly invisible too, the snapshot seeing it only through a case view where repair changes the text: #754's render defaults moved `str()` for 1,034 corpus entries and the case views for 159, so a change to the default rendering is measured by rendering every entry in both trees (decisions/R6's 2026-10-29 entry holds the recipe). A recipe names the corpus files, the policy sweep, and -- the part that is easy to omit and fatal -- THE COMPARATOR, which must be something the shipped tree is not: #408's first recipe said to compare `initials()` against a folded-first partition, which is what `initials()` now IS, so it reproduced 0 where the bullet claimed 660 and was the only stated provenance for the number. Run the recipe as written before shipping the bullet. Cross-version numbers (a released wheel, the pre-change tree) are dated snapshots under Counting claims, since nothing in the repository re-runs them. The same standard binds decisions entries and PR bodies: a claim that a change restores the released reading is measured over the whole moved population against the wheel, never spot-checked (#625 claimed its 774 moves landed on the 1.4.0 and 2.3.0 readings from three names; measured, the tree matched 2.3.0 on 0 of 258 moved texts, master on 152), and a population size is re-counted from its recipe, never copied from another entry (the same entry carried #624's 137,810 for a grid of 395,148). Code comments citing rule IDs follow the excerpt discipline, checked by tests/v2/test_doc_citations.py: a rule's quotable text is its fields' prose (When, Tolerated, Then and its bullets, Because, and the Except, Precedence and Accepted bullets), and its fences and the footer below `---`, where the `Signal:` line stands, are not; `rules/H` names the H section, whose Background is quotable; a decisions citation may paraphrase, but what it quotes must be verbatim; and a reference with no quote must still name something that exists. The check's reach is a quote within four words of the ID or chained to one that is: a quote further off reads exactly like a name written in double quotes, so it is NOT checked, and the second review of #632 found 14 such quotes stale by hand. Keep a quote beside its ID. Quotes of AGENTS.md itself are not checked at all. **A citation comment holds three things: the quote, a line saying which clause this code implements, and `decisions/X (#N)` pointers to the entries that hold the history.** A code-local reason a reader of that line needs may stay beside them (why an index is safe to keep, why a test runs last), but issue history, measurements and restated examples belong in decisions/, where they are dated and kept current; in a comment they are a second copy that goes stale where nobody looks. #760 trimmed five blocks of 59 to 100 lines that had grown that way (`_post_rules._mark_suffix_entries`, group's P3 both-sides test, its S2/P2/P4 chain head and S4 chain emitter, and the honorific peel's scope in `_script_segment`), moving into dated decisions bullets what those entries lacked. Two of the moved claims no longer held: a policy example that had stopped reaching its case, and a credential said to land as a title that lands as a suffix. **Writing the user docs (docs/*.rst) has its own AGENTS.md too.** `docs/AGENTS.md` carries the style the docs are written in — tables as indexes, subheadings per task, measured claims, recipe doctests — distilled from PR #588. It loads the same way as the docs/design/ one below; if your tool does not do nested discovery, read it before editing a `.rst` file under docs/. diff --git a/docs/design/decisions/A1-ambiguity-report.md b/docs/design/decisions/A1-ambiguity-report.md index b55370d9d..604a46dc1 100644 --- a/docs/design/decisions/A1-ambiguity-report.md +++ b/docs/design/decisions/A1-ambiguity-report.md @@ -30,7 +30,7 @@ Open: none in this file. - 2026-10-21 #793 — AMENDS #626's list of reports worded where the field is settled, for the comma's credential reading. The listed-member report after a family comma said "read as a credential" of a word the listing form binds as a title (`John, Si.`, `John, Ma.`), so that field was not settled by the wording alone. It now names the role the comma stage binds, "a title" or "a credential", worded at the emitter rather than through `field_tail`, since nothing later moves a word of the part the binding empties. The measurement is decisions/suffix-acronym-collisions' 2026-10-21 (#793) entry. -- 2026-10-26 #752 (phase 2m) (its DECLINED `languages` superseded by 2026-10-29 #754, 4a's follow-up, decisions/vocabulary-model) — A REPORT CARRIES THE READING IT DID NOT TAKE. decisions/vocabulary-model's 2026-10-23 #752 entry planned it: an `Ambiguity` carries the reading the parse did not take, and a word the credential's run takes by position alone is told from a word with a declared name reading by that reading's source, so it needs no new ambiguity kind. Derek decided on 2026-10-26 to ship it in 2.7 and to hold the reading taken, `Token.reading`, for 3.0. +- 2026-10-26 #752 (phase 2m) (its DECLINED `languages` superseded by 2026-10-29 #754, 4a's follow-up, decisions/vocabulary-model; its ACCEPTED `post-nominal` reading of a listed suffix word superseded by 2026-10-29 #754, sub-phase 4b, decisions/R8) — A REPORT CARRIES THE READING IT DID NOT TAKE. decisions/vocabulary-model's 2026-10-23 #752 entry planned it: an `Ambiguity` carries the reading the parse did not take, and a word the credential's run takes by position alone is told from a word with a declared name reading by that reading's source, so it needs no new ambiguity kind. Derek decided on 2026-10-26 to ship it in 2.7 and to hold the reading taken, `Token.reading`, for 3.0. DECIDED: `Ambiguity.alternative: Reading | None`, declared `compare=False`, so two reports and two names compare as before and `ParsedName.comparison_key` is untouched. `Reading` is a frozen, slotted, picklable value of three fields, exported with its two enums: `kind` (`ReadingKind`: credential, generation, agnomen, post-nominal, title, particle, conjunction, initial, name), `role`, and `source` (`ReadingSource`). Its FIELD is the one the word would land in had the call gone the other way with every other word of the name read as the parse read it, which is what a caller moving one word needs. A non-name reading names its field by what it is: the suffix for a credential, a generation, an agnomen or another post-nominal, the title for a title, the family for a particle (rules/P2). A name reading takes the field the positional read gives one more name word in its place: the last name word's under the order that read the part (`JOHN SMITH MA` gives `family`, under FAMILY_FIRST `middle`), the given part's given or middle name after a family comma, the family before one, the maiden name in a marker's clause, and the given name of the listing form where the comma's decision bound the part as a credential run (`John Smith Jr., AD` gives `given`). Where the name piece in front would take the word in, it lands where that piece lands, named at assemble from the piece's final role: a particle chain, which runs to the end of the part's name words (`Juan de la Vega VI` under FAMILY_FIRST gives `given`, the chain's field), a lone particle not opening the part, which stood unchained only for want of a word behind it, and a bound given name opening the part where a family comma or a given-name title licenses its join (`Rahman, Abdul MB ChB` gives `given`, `Sir abdul VI` too); a particle P6 attached is not trailing once the word stands behind it, so it takes nothing in, and a bound join is no chain though `abu` is a particle too (`Smith, Abu Mary VI` gives `middle`). A never-given particle opening the part takes the word into the family by rules/P1's fold, in every order and part (`Dr. mc VI`, `Smith, Dr. de VI` give `family`). O5's lone word names the other primary field from its final role, after any move, and `middle_as_family` folds a middle into the family as it folds the parse's. DECIDED: four sources, where the RFC's "Readings on the parse" named three. `vocabulary` is a listed word in the reading's category, `declared` a word the vocabulary also declares a name (the derived markers of decisions/vocabulary-model's 2026-10-25 #752 entry, and a given name written short), `shape` a roman numeral, dotted letters or a one-letter initial, and `position` an ordinary word nothing lists, a name only by where it stands: `John Smith PhD Jones` gives `position` for `Jones` where `JOHN SMITH MA` gives `declared` for `MA`, which is the case the plan needed the source for. A shape-admitted member of the ambiguous class carries the class's tag beside the shape tag, so the shape tag decides that it declares no name. DECIDED: every emitter of every fork kind fills it at its decision site (mechanisms.md#AMBIGUITY-AT-THE-DECISION-SITE). Two stages run before the field exists, classify's connective-or-initial letter and group's particle chain, and defer it (`_state.Deferred.JOINED` and `UNCHAINED`) for assign to name off the positions it reads: the connective's join takes in the name word on each side, so where those stand in two pieces the joined unit takes the place of the first (`JOSE E MARIA SANTOS` gives `given`), and where both are already inside the letter's own piece the join changes nothing the piece did not hold and the letter lands where its piece lands, named at assemble (`MARIA DA SILVA E SOUZA`, a case row, gives `family`); a join that would leave the name one word is none, rules/P3 keeping a single-letter connective in a three-word name a name word, so there too the letter keeps its own field (`JOHN E SMITH` gives `middle`), where a family comma's surname is the word that lets the given part join (`SMITH, JOHN E MARY` gives `given`); the unchained particle stands as one more unit in front of its piece. One assign cannot place stays unnamed and surfaces as no alternative, in two shapes on 2026-10-26: a connective letter opening its part, which has no word before it to join, so no field could hold the reading (`E SMITH JONES`, a case row since; `e j smith` and `e and e` in the committed corpora), and in the case sweep the chain's report in `Freiherr von Berg Dr. and Ed. Prof.`, under each order, whose chained piece ends in a title a connective's join made. The first was found by the design-docs review; rules/A1 names it. The three kinds that report a shape (comma-structure, unbalanced-delimiter, segmentation) carry none; `order` is reserved and emitted nowhere. diff --git a/docs/design/decisions/R8-generation-and-credentials-views.md b/docs/design/decisions/R8-generation-and-credentials-views.md index bfec951eb..80b38b5f7 100644 --- a/docs/design/decisions/R8-generation-and-credentials-views.md +++ b/docs/design/decisions/R8-generation-and-credentials-views.md @@ -5,17 +5,17 @@ - `ParsedName.generation` and `ParsedName.credentials` partition `suffix` by the reading each word took, a generation or an agnomen in the first and every other word in the second; they are views, not roles, so `suffix`, `as_dict()`, `replace()`'s fields and the repr are unchanged, item 4 of decisions/vocabulary-model's #754 output-model entry — 2026-10-29 #754, sub-phase 4b. - A listed suffix word's kind is read from the reading index (`_reading_index.suffix_kind_of`, through `_vocab.suffix_kind`), since the compiled sets do not record it — 2026-10-29 #754, sub-phase 4b. -Elsewhere: the field's composition and the 2026-08-16 decision not to split it, which this one supersedes for the views while keeping the field, decisions/suffix-field-composition. +Elsewhere: the field's composition and the 2026-08-16 decision to keep it one field, which still stands, decisions/suffix-field-composition; whether `credentials` should leave the honorifics out, CLDR having no third field, is a value question under the RFC's Phase 4, Left open (docs/design/vocabulary-model-rfc.md). -Open: whether `credentials` should leave the honorifics out, CLDR having no third field (the RFC's Phase 4, Left open). +Open: none in this file. ## Log -- 2026-10-29 #754, sub-phase 4b (#326) — IMPLEMENTED item 4 of decisions/vocabulary-model's 2026-10-28 #754 entry. What the implementation decided, beyond that entry: +- 2026-10-29 #754, sub-phase 4b (#326) — IMPLEMENTED item 4 of decisions/vocabulary-model's 2026-10-28 #754 entry. SUPERSEDES: decisions/A1's 2026-10-26 #752 ACCEPTED clause that a listed suffix word neither a generation by its tag nor an agnomen reads as `post-nominal`, `jr` and `esq` alike. What the implementation decided, beyond that entry: 1. **The kind of a listed suffix word comes from the reading index.** `jr` and `esq` compile into `suffix_words` with the same tags, so 4a read both as `post-nominal` and pinned the gap with strict xfails. `_vocab.suffix_kind` now asks `_reading_index.suffix_kind_of` for a word tagged `vocab:suffix-word`, a memo whose hit costs no frame, so `Token.reading` and `Ambiguity.alternative` move together: a lone `Jr` names a `generation` alternative where it named a `post-nominal` one, and a credential written as a word (`博士`) reads `credential`. The vocabulary's courtesy, honorific, professional honorific and status kinds have no reading kind of their own and stay `post-nominal`. `_vocab` imports `_reading_index` for it, which tests/v2/test_layering.py's table records. 2. **The kind is read whatever the reading's default.** `st`, a Czech generation written `default = false`, reads `generation` when a caller's `Lexicon` lists it, while its `languages` name no file, since none holds it on. A pack turning such a reading on (phase 3's `cs`, 3f) then needs nothing more for the kind; a word only a caller's own `Lexicon` lists has no row and reads `post-nominal`. - 3. **Each word is placed by its own reading.** A `joined` mark is not only the second word of a split credential (`Ph.` `D.`, which takes the first word's reading) but every word of a suffix run written without commas (`Jr. III PhD`), so a view places each word by its reading and joins it to the word before with a space only where that word is in the same view. A connective goes with the word before it (`PhD and MD`). + 3. **Each word is placed by its own reading, and separated as the writer separated it.** A `joined` mark is not only the second word of a split credential (`Ph.` `D.`, which takes the first word's reading) but every word of a suffix run written without commas (`Jr. III PhD`), so a view places each word by its reading. Two words of one view are separated by a comma where the writer typed one anywhere between them and by a space where not, R1's separator, so `MD Jr. PhD` gives credentials 'MD PhD'; the first draft started a new comma-joined entry wherever a word of the other view stood between, writing a comma nobody typed ('MD, PhD'), found by the design-docs review. A connective goes with the word before it (`PhD and MD`, `Jr. and III`), so one joining a generation to a credential dangles at the end of the generation (`Jr. and MD` gives generation 'Jr. and'), accepted rather than given a rule of its own, no corpus name holding the shape. 4. **A suffix word with no reading is a credential.** `replace()` and `Parser.revise()` write tokens with no `Token.reading` (4a), so `replace(suffix="Jr.")` reads credentials 'Jr.': nothing records what the word was read as, and the catch-all is the view that claims least. 5. **The views stay out of `as_dict()`, `--json` and the repr**, as `family_base` and the other derived views do: `as_dict()` is the seven fields `replace()` takes back. They are `render()` keys and assertable fields of a rule's example lines. 6. **The snapshot records them** (`tools/differential/snapshot.py`, a `RECORDED_LATER` pair): `generation` where the suffix holds one, and `credentials` beside it where the suffix holds both, so a row with neither is a suffix of credentials only, or none. No other key moved on recording. - - Measured 2026-10-29 on the 4b branch over the committed snapshot (`tools/differential/snapshot.jsonl`, 6,560 readings, rules/R8's own examples included): 1,067 rows hold a suffix, 481 of them a generation, 136 a generation and credentials both. Recompute: count rows with `suffix`, `generation` and `credentials` in the snapshot. Over `cldr_fields.jsonl`, 576 distinct (text, order) renderings carry CLDR's `generation` or `credentials`; 65 parse to exactly CLDR's suffix words, and all 65 split into CLDR's two fields. Recompute: parse each distinct text under its order (`givenFirst` as `GIVEN_FIRST`, `surnameFirst` as `FAMILY_FIRST`, any other order the default), keep those whose `suffix` words, commas removed, equal CLDR's `generation` and `credentials` words together, and compare each view's words with its field's. The RFC's 615 and 75 (2026-10-28) counted renderings, not distinct texts. + - Measured 2026-10-29 on the 4b branch over the committed snapshot (`tools/differential/snapshot.jsonl`, 6,564 readings, rules/R8's own examples included): 1,071 rows hold a suffix, 485 of them a generation, 139 a generation and credentials both. Recompute: count rows with `suffix`, `generation` and `credentials` in the snapshot. Over `cldr_fields.jsonl`, 576 distinct (text, order) renderings carry CLDR's `generation` or `credentials`; 65 parse to exactly CLDR's suffix words, and all 65 split into CLDR's two fields. Recompute: parse each distinct text under its order (`givenFirst` as `GIVEN_FIRST`, `surnameFirst` as `FAMILY_FIRST`, any other order the default), keep those whose `suffix` words, commas removed, equal CLDR's `generation` and `credentials` words together, and compare each view's words with its field's. The RFC's 615 and 75 (2026-10-28) counted renderings, not distinct (text, order) pairs. diff --git a/docs/design/decisions/suffix-field-composition.md b/docs/design/decisions/suffix-field-composition.md index 9fec70700..78b7b8fa8 100644 --- a/docs/design/decisions/suffix-field-composition.md +++ b/docs/design/decisions/suffix-field-composition.md @@ -6,7 +6,7 @@ Elsewhere: generation and credential are separate kinds in the vocabulary, though they still compile into the one field, decisions/vocabulary-model's 2026-10-15/16 entry (item 3). The field stays one, and since 3.0 two views partition it by the reading each word took, `generation` and `credentials`, the honorifics in the second (#326, decisions/R8). -Open: whether the honorifics belong in `suffix` at all is deliberately undecided here; whether `credentials` should leave them out is decisions/R8's. +Open: [#326](https://github.com/derek73/python-nameparser/issues/326) — whether the honorifics belong in `suffix` at all, deliberately undecided here (the views' side of it is decisions/R8's). ## Log diff --git a/docs/design/rules/R1-fields-are-views-of-the-parsed-words.md b/docs/design/rules/R1-fields-are-views-of-the-parsed-words.md index 6f0c4afc7..e872dff82 100644 --- a/docs/design/rules/R1-fields-are-views-of-the-parsed-words.md +++ b/docs/design/rules/R1-fields-are-views-of-the-parsed-words.md @@ -4,7 +4,7 @@ **Then:** every field is a view computed from the parsed words at read time, joining its words in written order — except folded family words — O3's fold and, since #379, P6's attached tussenvoegsel — which render before the rest of the family wherever they stood in the string. -- **Words are separated as the writer separated them.** The suffix view is the one place this is visible, because it is the only field that can hold parts the writer comma-separated: a run of post-nominals written with spaces renders with spaces, and one written with commas keeps them. +- **Words are separated as the writer separated them.** The suffix and its two views (R8) are the one place this is visible, because they are the only views that can hold parts the writer comma-separated: a run of post-nominals written with spaces renders with spaces, and one written with commas keeps them. - **The separator is the comma the writer typed**, read off the words' positions once their roles are known; the semicolon, a hyphen or slash standing alone and a delimiter the configuration names are separators too where C10 drops them, and so is any name word standing between two post-nominals. **Because:** a field is a way of reading the parse, not a stored string. diff --git a/docs/design/rules/R8-generation-and-credentials-views.md b/docs/design/rules/R8-generation-and-credentials-views.md index 7b1061806..38178b817 100644 --- a/docs/design/rules/R8-generation-and-credentials-views.md +++ b/docs/design/rules/R8-generation-and-credentials-views.md @@ -2,7 +2,7 @@ **When:** the suffix of a parsed name is read by what each of its words is, as in "Smith, John, Jr., MD, Esq.". -**Then:** the suffix splits into two views that partition it, the generation holding its words read as a generation or an agnomen and the credentials holding every other word, each joining its words in written order as the suffix joins them. +**Then:** the suffix splits into two views that partition it, the generation holding its words read as a generation or an agnomen and the credentials holding every other word, each joining its words in written order and separating two of them as the writer did (R1), by a comma where one stands anywhere between them and by a space where none does. **Because:** a generation numbers the bearer among relatives of the same name while a credential is earned, and CLDR's person-name fields keep the two apart and format them differently. A caller wanting one had to re-read the suffix against vocabulary they would have had to rebuild (#326). Both are views, so the suffix field itself does not change. @@ -12,7 +12,13 @@ "Smith, John, Jr., MD, Esq." → suffix="Jr., MD, Esq." "Dr. Juan Q. Xavier de la Vega III" → generation="III" "Pedro Alves Filho" → generation="Filho" -"John Smith PhD" → credentials="PhD" +"John Smith Esq." → credentials="Esq." +"王小明先生" → credentials="先生" +"John Smith Jr. III PhD" → generation="Jr. III" +"John Smith Jr. III PhD" → credentials="PhD" +"John Smith Ph. D. Jr." → credentials="Ph. D." +"John Smith, MD Jr. PhD" → credentials="MD PhD" +"John Smith, MD, Jr. PhD" → credentials="MD, PhD" "John Smith PhD" → generation="" "John Smith" → generation="" · boundary "John Smith" → credentials="" @@ -20,24 +26,22 @@ **Except:** -- **A word of the suffix vocabulary that is neither a generation nor a credential** (a courtesy, an honorific, a status) is in the credentials, CLDR's catch-all, since CLDR has no third field; its reading's kind, a post-nominal word, tells it apart for a caller who needs it. +- **A connective in the suffix** is in the view of the word before it, being read as neither a generation nor a credential. ``` - "John Smith Esq." → credentials="Esq." - "王小明先生" → credentials="先生" - ``` -- **A word written in a run without commas** joins the word before it with a space where both are in the same view, and opens an entry of its own where they are not, so the two kinds of word in one run come apart; a connective goes with the word before it. - ``` - "John Smith Jr. III PhD" → generation="Jr. III" - "John Smith Jr. III PhD" → credentials="PhD" - "John Smith Ph. D. Jr." → credentials="Ph. D." + "John Smith, Jr. and III" → generation="Jr. and III" "John Smith, PhD and MD Jr." → credentials="PhD and MD" ``` **Accepted:** +- A word of the suffix vocabulary that is neither a generation nor a credential (a courtesy, an honorific, a status) is in the credentials, CLDR's catch-all, since CLDR has no third field; its reading's kind, a post-nominal word, tells it apart for a caller who needs it. +- A connective joining a generation to a credential is left at the end of the generation, the view of the word before it. + ``` + "John Smith, Jr. and MD" → generation="Jr. and" + ``` - A suffix word with no reading, one that `replace()` or `Parser.revise()` wrote, is in the credentials whatever it is, since nothing records what it was read as. -- A listed word's kind is the shipped vocabulary's, read whatever the reading's default, so a word only a caller's own `Lexicon` lists is in the credentials, a generation word included. +- The kind of a word listed as a suffix word is the shipped vocabulary's, read whatever the reading's default, so a word only a caller's own `Lexicon` lists is in the credentials, a generation word included, and so is a generation word a caller lists as an acronym. --- -**Signal:** none in the name: the reading each suffix word took +**Signal:** none in the name: the reading each suffix word took, and the separators the writer typed between them **history:** decisions/R8 · **implemented:** nameparser/_types.py, nameparser/_pipeline/_vocab.py diff --git a/docs/design/vocabulary-model-rfc.md b/docs/design/vocabulary-model-rfc.md index 966ad374f..1871b43d5 100644 --- a/docs/design/vocabulary-model-rfc.md +++ b/docs/design/vocabulary-model-rfc.md @@ -272,7 +272,7 @@ Languages with one to three candidates (`tr` `bay`, `it` `sig`, `lt` `jaun`, `ms ## Phase 4: order, shape and the output model -Status: **the output model is agreed** (2026-10-28, #754), and sub-phase 4a has landed, `Reading.languages` with it (2026-10-29, decisions/vocabulary-model's 2026-10-29 #754, sub-phase 4a and 4a's follow-up entries). The record is decisions/vocabulary-model's 2026-10-28 #754 entry; the output-model and work-order subsections below are the design its items describe. The first two subsections, order and shape and the rules a pack can choose, are as written before and are amended only where the design reaches them. Phase 4 is 3.0 work. The core API (`parse`, `Parser`, `Lexicon`, `Policy`, `Locale`, `ParsedName`) is frozen for 3.0 except for additions (decisions/3-0-reevaluations, 2026-10-28 #925, THE CORE API), so every change below says whether it is an addition. +Status: **the output model is agreed** (2026-10-28, #754), and sub-phases 4a, 4b and 4e have landed, `Reading.languages` with 4a (2026-10-29: decisions/vocabulary-model's 2026-10-29 #754, sub-phase 4a and 4a's follow-up entries, decisions/R8's for 4b and decisions/R6's for 4e). The record is decisions/vocabulary-model's 2026-10-28 #754 entry; the output-model and work-order subsections below are the design its items describe. The first two subsections, order and shape and the rules a pack can choose, are as written before and are amended only where the design reaches them. Phase 4 is 3.0 work. The core API (`parse`, `Parser`, `Lexicon`, `Policy`, `Locale`, `ParsedName`) is frozen for 3.0 except for additions (decisions/3-0-reevaluations, 2026-10-28 #925, THE CORE API), so every change below says whether it is an addition. ### Order is not shape @@ -389,7 +389,7 @@ Each sub-phase is one PR, measured on its own base as phase 2's and phase 3's ar | 4b | `generation` and `credentials` (#326); a listed suffix word's kind read from 3a's index, which 4a could not split (`Jr` and `Esq.` both read `post-nominal` there). Landed (decisions/R8's 2026-10-29 entry) | 4a (neutral); 3a for the kind | | 4c | `patronymic`: the vocabulary's patronymic particles, and the RU and TR_AZ rules writing the reading | 4a (neutral) | | 4d | `surname2`: O6's stable tag | — (neutral) | -| 4e | the render defaults and `ParsedName.order` | — | +| 4e | the render defaults and `ParsedName.order`. Landed (decisions/R6's 2026-10-29 entry) | — | | 4f | `[rules]` compiled into a `Locale`'s policy patch; RU and TR_AZ rebuilt from their files | 3b | | 4g | the compound given name, a rule kind (#704) | 4f | | 4h | the shape inventory per order (#469), starting with the title between a family and a given name under `FAMILY_FIRST` | — | diff --git a/docs/release_log.rst b/docs/release_log.rst index 2e241a6b0..04c6f5248 100644 --- a/docs/release_log.rst +++ b/docs/release_log.rst @@ -7,7 +7,7 @@ Release Log **Additions** - **Add Locale.languages, a choice of languages for the default vocabulary.** ``parser_for(Locale(code="pt", lexicon=Lexicon.empty(), languages=frozenset({"pt"}))).parse("ANA SILVA E SOUZA")`` gives family ``SILVA E SOUZA``, where the default reads family ``SOUZA``, the ``E`` an initial: a chosen language's reading of a word it has a vocabulary reading of wins, and the other languages' vocabulary readings of that word leave, while its readings as a name and the readings shared by every language stay, so under ``pt`` ``John Smith DO`` reads family ``DO``. A pack choosing no language parses as before. See :doc:`locales`. :issue:`753` - - **Add ParsedName.generation and ParsedName.credentials, the suffix split by kind.** ``parse("Smith, John, Jr., MD, Esq.")`` gives generation ``Jr.`` and credentials ``MD, Esq.``, where 1.4.0 through 2.8.0 gave only suffix ``Jr., MD, Esq.``, which is unchanged. They are views like ``family_base``: render keys, not fields of ``as_dict()``. An honorific after a name (``Esq.``, ``さん``) is a credential, and a suffix written by ``replace()`` is all credentials. ``Token.reading`` reads ``Jr.`` and ``Sr.`` as a generation. :issue:`326`, :issue:`754` + - **Add ParsedName.generation and ParsedName.credentials, the suffix split by kind.** ``parse("Smith, John, Jr., MD, Esq.")`` gives generation ``Jr.`` and credentials ``MD, Esq.``, where 1.4.0 through 2.8.0 gave only suffix ``Jr., MD, Esq.``, which is unchanged. They are views like ``family_base``: render keys, not fields of ``as_dict()``. An honorific after a name (``Esq.``, ``さん``) is a credential, and a suffix written by ``replace()`` is all credentials. ``Token.reading`` reads ``Jr.`` and ``Sr.`` as a generation, and ``Ambiguity.alternative`` of a lone ``Jr`` names a generation where 2.7.0 and 2.8.0 named a post-nominal. :issue:`326`, :issue:`754` - **Add Token.reading, the reading the parse took for each word.** ``parse("John Smith PhD Jones").tokens[-1].reading`` is ``Reading('credential' as 'suffix', 'position')``, the reading 2.7's ``Ambiguity.alternative`` gave only for the other side of a fork, and ``ReadingKind`` gains ``patronymic``. The field is not compared, and a ``ParsedName`` pickled by 2.x loads with no readings. :issue:`754` - **Add Reading.languages, the language files that list a word the way it was read.** ``parse("Dr. Juan de la Vega III").tokens[2].reading.languages`` is ``('es', 'fr', 'it', 'nl', 'pt')`` for the particle ``de``, and ``Ambiguity.alternative`` names its files too; a reading by shape or position names none. It is not compared, and a ``Reading`` pickled by 2.7 or 2.8 loads with none. The first parse in a process that meets a listed word loads the reading index once: about 1 ms, or about 16 ms where Python writes no bytecode cache. :issue:`754`, :issue:`753` diff --git a/nameparser/_pipeline/_vocab.py b/nameparser/_pipeline/_vocab.py index 2b760d720..2bcacdea9 100644 --- a/nameparser/_pipeline/_vocab.py +++ b/nameparser/_pipeline/_vocab.py @@ -2203,8 +2203,8 @@ def suffix_kind(text: str, "credential": ReadingKind.CREDENTIAL} -# rules/R8: "A listed word's kind is the shipped vocabulary's, read -# whatever the reading's default" -- the kind the views partition the +# rules/R8: "The kind of a word listed as a suffix word is the shipped +# vocabulary's, read whatever the reading's default" -- the kind the views partition the # suffix by (decisions/R8, #326). A memo, C-level on a hit, so a suffix # word read before costs no frame; bounded since its key is the # caller's text. diff --git a/nameparser/_types.py b/nameparser/_types.py index 7b5ebaf5d..c8dc11aff 100644 --- a/nameparser/_types.py +++ b/nameparser/_types.py @@ -1347,7 +1347,7 @@ def nickname(self) -> str: def maiden(self) -> str: return self._text_for(Role.MAIDEN) - # -- derived views (filters over roles + STABLE tags only) ---------- + # -- derived views (filters over roles, STABLE tags and readings) --- @property # rules/R2: "the family name splits into further views: the @@ -1391,25 +1391,29 @@ def given_names(self) -> str: def _suffix_view(self, generation: bool) -> str: # the `generation` / `credentials` partition of `suffix`, each # word placed by the reading it took ('D.' after 'Ph.' takes - # the credential's), a `joined` word attaching with a space as - # in `suffix` where the word before it is in the same view - # ('Jr. III PhD' gives 'Jr. III' and 'PhD'), and a connective - # going with the word it follows ('PhD and MD') + # the credential's) and a connective going with the word it + # follows ('PhD and MD'); two words of one view are separated + # as the writer separated them, by a comma where one stands + # anywhere between them and by a space where none does + # ('MD Jr. PhD' gives 'MD PhD', 'MD, Jr. PhD' gives 'MD, PhD') parts: list[str] = [] before: bool | None = None + comma = False for tok in self.tokens: if tok.role is not Role.SUFFIX: continue + comma = comma or "joined" not in tok.tags kind = tok.reading.kind if tok.reading is not None else None if kind is ReadingKind.CONJUNCTION and before is not None: keep = before else: keep = (kind in _GENERATION_KINDS) is generation if keep: - if before and "joined" in tok.tags: + if parts and not comma: parts[-1] += " " + tok.text else: parts.append(tok.text) + comma = False before = keep return ", ".join(parts) diff --git a/tests/v2/rules_budget.json b/tests/v2/rules_budget.json index eb9d90552..433a069d3 100644 --- a/tests/v2/rules_budget.json +++ b/tests/v2/rules_budget.json @@ -49,14 +49,14 @@ "P7": {"words": 138, "then_words": 64, "because_sentences": 3, "except": 0, "precedence": 0, "accepted": 1, "accepted_words": 28}, "P8": {"words": 496, "then_words": 431, "because_sentences": 2, "except": 0, "precedence": 0, "accepted": 2, "accepted_words": 309}, "P9": {"words": 405, "then_words": 265, "because_sentences": 1, "except": 2, "precedence": 0, "accepted": 0, "accepted_words": 0}, - "R1": {"words": 176, "then_words": 145, "because_sentences": 1, "except": 0, "precedence": 0, "accepted": 1, "accepted_words": 146}, + "R1": {"words": 180, "then_words": 149, "because_sentences": 1, "except": 0, "precedence": 0, "accepted": 1, "accepted_words": 146}, "R2": {"words": 264, "then_words": 18, "because_sentences": 1, "except": 2, "precedence": 0, "accepted": 2, "accepted_words": 85}, "R3": {"words": 534, "then_words": 414, "because_sentences": 2, "except": 1, "precedence": 0, "accepted": 2, "accepted_words": 221}, "R4": {"words": 1016, "then_words": 729, "because_sentences": 1, "except": 4, "precedence": 0, "accepted": 4, "accepted_words": 520}, "R5": {"words": 250, "then_words": 154, "because_sentences": 2, "except": 0, "precedence": 0, "accepted": 0, "accepted_words": 0}, "R6": {"words": 400, "then_words": 265, "because_sentences": 2, "except": 1, "precedence": 0, "accepted": 5, "accepted_words": 289}, "R7": {"words": 142, "then_words": 30, "because_sentences": 2, "except": 0, "precedence": 1, "accepted": 2, "accepted_words": 74}, - "R8": {"words": 219, "then_words": 40, "because_sentences": 3, "except": 2, "precedence": 0, "accepted": 2, "accepted_words": 57}, + "R8": {"words": 163, "then_words": 61, "because_sentences": 3, "except": 1, "precedence": 0, "accepted": 4, "accepted_words": 145}, "S1": {"words": 306, "then_words": 26, "because_sentences": 1, "except": 2, "precedence": 3, "accepted": 0, "accepted_words": 0}, "S2": {"words": 657, "then_words": 119, "because_sentences": 1, "except": 0, "precedence": 7, "accepted": 3, "accepted_words": 222}, "S3": {"words": 960, "then_words": 398, "because_sentences": 3, "except": 4, "precedence": 5, "accepted": 6, "accepted_words": 343}, diff --git a/tests/v2/test_types.py b/tests/v2/test_types.py index ade183ffa..b60f19d97 100644 --- a/tests/v2/test_types.py +++ b/tests/v2/test_types.py @@ -311,12 +311,19 @@ def test_derived_views_filter_on_stable_particle_tag() -> None: # comma-joined as the suffix is, each view in written order ("Smith, John, Jr., MD, Esq.", "Jr.", "MD, Esq."), ("John Smith, PhD, Jr., III", "Jr., III", "PhD"), - # a run written without commas comes apart by kind; a split - # credential stays whole, and a connective goes with the word - # before it + # a run written without commas comes apart by kind, two words of + # one view keeping the separator written between them (a comma + # anywhere in the gap, else a space); a split credential stays + # whole ("John Smith Jr. III PhD", "Jr. III", "PhD"), ("John Smith Ph. D. Jr.", "Jr.", "Ph. D."), + ("John Smith, MD Jr. PhD", "Jr.", "MD PhD"), + ("John Smith, MD, Jr. PhD", "Jr.", "MD, PhD"), + # a connective goes with the word before it, dangling where the + # word after it is in the other view (rules/R8's Accepted) ("John Smith, PhD and MD Jr.", "Jr.", "PhD and MD"), + ("John Smith, Jr. and III", "Jr. and III", ""), + ("John Smith, Jr. and MD", "Jr. and", "MD"), ("Doe, Jane, and Jr.", "Jr.", "and"), # an agnomen is a generation; an honorific, a credential ("Pedro Alves Filho", "Filho", ""), diff --git a/tools/differential/README.md b/tools/differential/README.md index 625588ce9..7d4feb983 100644 --- a/tools/differential/README.md +++ b/tools/differential/README.md @@ -38,7 +38,11 @@ read differently from the 2.0 surface (3 names on 2026-10-13); Since 2.7 a line also holds `alternatives`, the reading each ambiguity report did not take, one per report in report order, so a report losing its alternative beside an identical -one still moves the line (#752 phase 2m). Empty values are left out, +one still moves the line (#752 phase 2m). Since 3.0 it holds the +suffix's two views (rules/R8, #326): `generation` where the suffix +holds one, and `credentials` beside it where the suffix holds both, +so a line with neither has a suffix of credentials only, or none. +Empty values are left out, so a reading that gains a field shows as one added key. The file's first line is a header, `{"recorded": [...]}`, naming the keys added after the snapshot existed that the recording tree could record: a diff --git a/tools/differential/corpus_rules.jsonl b/tools/differential/corpus_rules.jsonl index d32add012..3e1078f67 100644 --- a/tools/differential/corpus_rules.jsonl +++ b/tools/differential/corpus_rules.jsonl @@ -511,6 +511,8 @@ "John Smith, Jr do" "John Smith, Jr vd" "John Smith, Jr." +"John Smith, Jr. and III" +"John Smith, Jr. and MD" "John Smith, Jr., Dr., Prof." "John Smith, Jr., Lt.Gov." "John Smith, Jr., abdul Dr. Smith" @@ -527,8 +529,10 @@ "John Smith, MD - PhD" "John Smith, MD / PhD" "John Smith, MD ; PhD" +"John Smith, MD Jr. PhD" "John Smith, MD – PhD" "John Smith, MD, Bart" +"John Smith, MD, Jr. PhD" "John Smith, MD, Ma" "John Smith, MD, Ms" "John Smith, MD, R.A.I." diff --git a/tools/differential/snapshot.jsonl b/tools/differential/snapshot.jsonl index b78d43122..673870652 100644 --- a/tools/differential/snapshot.jsonl +++ b/tools/differential/snapshot.jsonl @@ -1830,6 +1830,8 @@ {"name": "John Smith, Jr vd", "given": "John", "family": "Smith", "suffix": "Jr vd", "initials": "J. S.", "capitalized_force": "John Smith, Jr VD", "generation": "Jr", "credentials": "vd"} {"name": "John Smith, Jr.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} {"name": "John Smith, Jr. Ph. D.", "given": "John", "family": "Smith", "suffix": "Jr. Ph. D.", "initials": "J. S.", "generation": "Jr.", "credentials": "Ph. D."} +{"name": "John Smith, Jr. and III", "given": "John", "family": "Smith", "suffix": "Jr. and III", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "generation": "Jr. and III"} +{"name": "John Smith, Jr. and MD", "given": "John", "family": "Smith", "suffix": "Jr. and MD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "generation": "Jr. and", "credentials": "MD"} {"name": "John Smith, Jr., Dr., Prof.", "title": "Dr. Prof.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} {"name": "John Smith, Jr., Lt.Gov.", "title": "Lt.Gov.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} {"name": "John Smith, Jr., abdul Dr. Smith", "title": "Dr.", "given": "John", "family": "Smith", "suffix": "Jr., abdul Smith", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "capitalized_force": "Dr. John Smith, Jr., Abdul Smith", "generation": "Jr.", "credentials": "abdul Smith"} @@ -1846,9 +1848,11 @@ {"name": "John Smith, MD - PhD", "given": "John", "family": "Smith", "suffix": "MD, PhD", "initials": "J. S."} {"name": "John Smith, MD / PhD", "given": "John", "family": "Smith", "suffix": "MD, PhD", "initials": "J. S."} {"name": "John Smith, MD ; PhD", "given": "John", "family": "Smith", "suffix": "MD, PhD", "initials": "J. S."} +{"name": "John Smith, MD Jr. PhD", "given": "John", "family": "Smith", "suffix": "MD Jr. PhD", "initials": "J. S.", "generation": "Jr.", "credentials": "MD PhD"} {"name": "John Smith, MD MEng", "given": "John", "family": "Smith", "suffix": "MD MEng", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "capitalized_force": "John Smith, MD MENG"} {"name": "John Smith, MD – PhD", "given": "John", "family": "Smith", "suffix": "MD – PhD", "initials": "J. S."} {"name": "John Smith, MD, Bart", "given": "John", "family": "Smith", "suffix": "MD, Bart", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S."} +{"name": "John Smith, MD, Jr. PhD", "given": "John", "family": "Smith", "suffix": "MD, Jr. PhD", "initials": "J. S.", "generation": "Jr.", "credentials": "MD, PhD"} {"name": "John Smith, MD, Ma", "given": "John", "family": "Smith", "suffix": "MD, Ma", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "capitalized_force": "John Smith, MD, MA"} {"name": "John Smith, MD, Ms", "given": "John", "family": "Smith", "suffix": "MD, Ms", "initials": "J. S.", "capitalized_force": "John Smith, MD, MS"} {"name": "John Smith, MD, R.A.I.", "given": "John", "family": "Smith", "suffix": "MD, R.A.I.", "initials": "J. S."} @@ -3333,7 +3337,7 @@ {"name": "Smith, Ph. D.", "family": "Smith", "suffix": "Ph. D.", "initials": "S."} {"name": "Smith, Ph. D. III", "family": "Smith", "suffix": "Ph. D. III", "initials": "S.", "generation": "III", "credentials": "Ph. D."} {"name": "Smith, Ph. D. Jr.", "family": "Smith", "suffix": "Ph. D. Jr.", "initials": "S.", "generation": "Jr.", "credentials": "Ph. D."} -{"name": "Smith, Ph. D. Jr. MD", "family": "Smith", "suffix": "Ph. D. Jr. MD", "initials": "S.", "generation": "Jr.", "credentials": "Ph. D., MD"} +{"name": "Smith, Ph. D. Jr. MD", "family": "Smith", "suffix": "Ph. D. Jr. MD", "initials": "S.", "generation": "Jr.", "credentials": "Ph. D. MD"} {"name": "Smith, Ph. D. MD", "family": "Smith", "suffix": "Ph. D. MD", "initials": "S."} {"name": "Smith, Ph.D. Jr.", "family": "Smith", "suffix": "Ph.D. Jr.", "initials": "S.", "generation": "Jr.", "credentials": "Ph.D."} {"name": "Smith, PhD", "family": "Smith", "suffix": "PhD", "initials": "S."} From 85150e863fa877198f261cd645a2173f7aaa3da5 Mon Sep 17 00:00:00 2001 From: Derek Gulbranson Date: Thu, 29 Oct 2026 17:49:13 -0700 Subject: [PATCH 3/6] Word R8's separator by the suffix's own commas; second review fixes (4b) Co-Authored-By: Claude Opus 5.5 --- .../R8-generation-and-credentials-views.md | 4 ++-- .../R8-generation-and-credentials-views.md | 9 ++++---- nameparser/_types.py | 7 +++--- tests/v2/rules_budget.json | 2 +- tests/v2/test_types.py | 22 ++++++++++++++++++- tools/differential/corpus_rules.jsonl | 1 + tools/differential/snapshot.jsonl | 1 + 7 files changed, 35 insertions(+), 11 deletions(-) diff --git a/docs/design/decisions/R8-generation-and-credentials-views.md b/docs/design/decisions/R8-generation-and-credentials-views.md index 80b38b5f7..781b2f266 100644 --- a/docs/design/decisions/R8-generation-and-credentials-views.md +++ b/docs/design/decisions/R8-generation-and-credentials-views.md @@ -14,8 +14,8 @@ Open: none in this file. - 2026-10-29 #754, sub-phase 4b (#326) — IMPLEMENTED item 4 of decisions/vocabulary-model's 2026-10-28 #754 entry. SUPERSEDES: decisions/A1's 2026-10-26 #752 ACCEPTED clause that a listed suffix word neither a generation by its tag nor an agnomen reads as `post-nominal`, `jr` and `esq` alike. What the implementation decided, beyond that entry: 1. **The kind of a listed suffix word comes from the reading index.** `jr` and `esq` compile into `suffix_words` with the same tags, so 4a read both as `post-nominal` and pinned the gap with strict xfails. `_vocab.suffix_kind` now asks `_reading_index.suffix_kind_of` for a word tagged `vocab:suffix-word`, a memo whose hit costs no frame, so `Token.reading` and `Ambiguity.alternative` move together: a lone `Jr` names a `generation` alternative where it named a `post-nominal` one, and a credential written as a word (`博士`) reads `credential`. The vocabulary's courtesy, honorific, professional honorific and status kinds have no reading kind of their own and stay `post-nominal`. `_vocab` imports `_reading_index` for it, which tests/v2/test_layering.py's table records. 2. **The kind is read whatever the reading's default.** `st`, a Czech generation written `default = false`, reads `generation` when a caller's `Lexicon` lists it, while its `languages` name no file, since none holds it on. A pack turning such a reading on (phase 3's `cs`, 3f) then needs nothing more for the kind; a word only a caller's own `Lexicon` lists has no row and reads `post-nominal`. - 3. **Each word is placed by its own reading, and separated as the writer separated it.** A `joined` mark is not only the second word of a split credential (`Ph.` `D.`, which takes the first word's reading) but every word of a suffix run written without commas (`Jr. III PhD`), so a view places each word by its reading. Two words of one view are separated by a comma where the writer typed one anywhere between them and by a space where not, R1's separator, so `MD Jr. PhD` gives credentials 'MD PhD'; the first draft started a new comma-joined entry wherever a word of the other view stood between, writing a comma nobody typed ('MD, PhD'), found by the design-docs review. A connective goes with the word before it (`PhD and MD`, `Jr. and III`), so one joining a generation to a credential dangles at the end of the generation (`Jr. and MD` gives generation 'Jr. and'), accepted rather than given a rule of its own, no corpus name holding the shape. + 3. **Each word is placed by its own reading, and separated as the writer separated it.** A `joined` mark is not only the second word of a split credential (`Ph.` `D.`, which takes the first word's reading) but every word of a suffix run written without commas (`Jr. III PhD`), so a view places each word by its reading. Two words of one view are separated by a comma where the suffix holds one anywhere between them, R1's separator (a typed comma, or a semicolon, hyphen, slash or delimiter C10 drops: `MD / Jr. / PhD` gives credentials 'MD, PhD'), and by a space where not, so `MD Jr. PhD` gives credentials 'MD PhD'; the first draft started a new comma-joined entry wherever a word of the other view stood between, writing a comma nobody typed ('MD, PhD'), found by the design-docs review. A connective goes with the word before it (`PhD and MD`, `Jr. and III`), so one joining a generation to a credential dangles at the end of the generation (`Jr. and MD` gives generation 'Jr. and'), accepted rather than given a rule of its own, no corpus name holding the shape. 4. **A suffix word with no reading is a credential.** `replace()` and `Parser.revise()` write tokens with no `Token.reading` (4a), so `replace(suffix="Jr.")` reads credentials 'Jr.': nothing records what the word was read as, and the catch-all is the view that claims least. 5. **The views stay out of `as_dict()`, `--json` and the repr**, as `family_base` and the other derived views do: `as_dict()` is the seven fields `replace()` takes back. They are `render()` keys and assertable fields of a rule's example lines. 6. **The snapshot records them** (`tools/differential/snapshot.py`, a `RECORDED_LATER` pair): `generation` where the suffix holds one, and `credentials` beside it where the suffix holds both, so a row with neither is a suffix of credentials only, or none. No other key moved on recording. - - Measured 2026-10-29 on the 4b branch over the committed snapshot (`tools/differential/snapshot.jsonl`, 6,564 readings, rules/R8's own examples included): 1,071 rows hold a suffix, 485 of them a generation, 139 a generation and credentials both. Recompute: count rows with `suffix`, `generation` and `credentials` in the snapshot. Over `cldr_fields.jsonl`, 576 distinct (text, order) renderings carry CLDR's `generation` or `credentials`; 65 parse to exactly CLDR's suffix words, and all 65 split into CLDR's two fields. Recompute: parse each distinct text under its order (`givenFirst` as `GIVEN_FIRST`, `surnameFirst` as `FAMILY_FIRST`, any other order the default), keep those whose `suffix` words, commas removed, equal CLDR's `generation` and `credentials` words together, and compare each view's words with its field's. The RFC's 615 and 75 (2026-10-28) counted renderings, not distinct (text, order) pairs. + - Measured 2026-10-29 on the 4b branch over the committed snapshot (`tools/differential/snapshot.jsonl`, 6,565 readings, rules/R8's own examples included): 1,072 rows hold a suffix, 486 of them a generation, 140 a generation and credentials both. Recompute: count rows with `suffix`, `generation` and `credentials` in the snapshot. Over `cldr_fields.jsonl`, 576 distinct (text, order) renderings carry CLDR's `generation` or `credentials`; 65 parse to exactly CLDR's suffix words, and all 65 split into CLDR's two fields. Recompute: parse each distinct text under its order (`givenFirst` as `GIVEN_FIRST`, `surnameFirst` as `FAMILY_FIRST`, any other order the default), keep those whose `suffix` words, commas removed, equal CLDR's `generation` and `credentials` words together, and compare each view's words with its field's. The RFC's 615 and 75 (2026-10-28) counted renderings, not distinct (text, order) pairs. diff --git a/docs/design/rules/R8-generation-and-credentials-views.md b/docs/design/rules/R8-generation-and-credentials-views.md index 38178b817..cd8e6b4f1 100644 --- a/docs/design/rules/R8-generation-and-credentials-views.md +++ b/docs/design/rules/R8-generation-and-credentials-views.md @@ -2,7 +2,7 @@ **When:** the suffix of a parsed name is read by what each of its words is, as in "Smith, John, Jr., MD, Esq.". -**Then:** the suffix splits into two views that partition it, the generation holding its words read as a generation or an agnomen and the credentials holding every other word, each joining its words in written order and separating two of them as the writer did (R1), by a comma where one stands anywhere between them and by a space where none does. +**Then:** the suffix splits into two views that partition it, the generation holding its words read as a generation or an agnomen and the credentials holding every other word, each joining its words in written order and separating two of them by a comma where the suffix holds one anywhere between them, R1's separator, and by a space where it holds none. **Because:** a generation numbers the bearer among relatives of the same name while a credential is earned, and CLDR's person-name fields keep the two apart and format them differently. A caller wanting one had to re-read the suffix against vocabulary they would have had to rebuild (#326). Both are views, so the suffix field itself does not change. @@ -19,6 +19,8 @@ "John Smith Ph. D. Jr." → credentials="Ph. D." "John Smith, MD Jr. PhD" → credentials="MD PhD" "John Smith, MD, Jr. PhD" → credentials="MD, PhD" +"John Smith, MD / Jr. / PhD" → credentials="MD, PhD" +"John Smith, PhD and MD Jr." → credentials="PhD and MD" "John Smith PhD" → generation="" "John Smith" → generation="" · boundary "John Smith" → credentials="" @@ -29,7 +31,6 @@ - **A connective in the suffix** is in the view of the word before it, being read as neither a generation nor a credential. ``` "John Smith, Jr. and III" → generation="Jr. and III" - "John Smith, PhD and MD Jr." → credentials="PhD and MD" ``` **Accepted:** @@ -40,8 +41,8 @@ "John Smith, Jr. and MD" → generation="Jr. and" ``` - A suffix word with no reading, one that `replace()` or `Parser.revise()` wrote, is in the credentials whatever it is, since nothing records what it was read as. -- The kind of a word listed as a suffix word is the shipped vocabulary's, read whatever the reading's default, so a word only a caller's own `Lexicon` lists is in the credentials, a generation word included, and so is a generation word a caller lists as an acronym. +- The kind of a word listed as a suffix word is the shipped vocabulary's, read whatever the reading's default, so a word a caller's own `Lexicon` lists in `suffix_words` alone is in the credentials, a generation word included, and so is a generation word a caller lists as an acronym; one the caller also lists in `suffix_words_ambiguous` or `agnomens` reads as a generation or an agnomen by that marker. --- -**Signal:** none in the name: the reading each suffix word took, and the separators the writer typed between them +**Signal:** none in the name: the reading each suffix word took **history:** decisions/R8 · **implemented:** nameparser/_types.py, nameparser/_pipeline/_vocab.py diff --git a/nameparser/_types.py b/nameparser/_types.py index c8dc11aff..9e7787744 100644 --- a/nameparser/_types.py +++ b/nameparser/_types.py @@ -1393,9 +1393,10 @@ def _suffix_view(self, generation: bool) -> str: # word placed by the reading it took ('D.' after 'Ph.' takes # the credential's) and a connective going with the word it # follows ('PhD and MD'); two words of one view are separated - # as the writer separated them, by a comma where one stands - # anywhere between them and by a space where none does - # ('MD Jr. PhD' gives 'MD PhD', 'MD, Jr. PhD' gives 'MD, PhD') + # by a comma where `suffix` holds one anywhere between them (an + # entry boundary, a word not `joined`) and by a space where it + # holds none ('MD Jr. PhD' gives 'MD PhD', 'MD, Jr. PhD' and + # 'MD / Jr. / PhD' give 'MD, PhD') parts: list[str] = [] before: bool | None = None comma = False diff --git a/tests/v2/rules_budget.json b/tests/v2/rules_budget.json index 433a069d3..af84be849 100644 --- a/tests/v2/rules_budget.json +++ b/tests/v2/rules_budget.json @@ -56,7 +56,7 @@ "R5": {"words": 250, "then_words": 154, "because_sentences": 2, "except": 0, "precedence": 0, "accepted": 0, "accepted_words": 0}, "R6": {"words": 400, "then_words": 265, "because_sentences": 2, "except": 1, "precedence": 0, "accepted": 5, "accepted_words": 289}, "R7": {"words": 142, "then_words": 30, "because_sentences": 2, "except": 0, "precedence": 1, "accepted": 2, "accepted_words": 74}, - "R8": {"words": 163, "then_words": 61, "because_sentences": 3, "except": 1, "precedence": 0, "accepted": 4, "accepted_words": 145}, + "R8": {"words": 163, "then_words": 61, "because_sentences": 3, "except": 1, "precedence": 0, "accepted": 4, "accepted_words": 166}, "S1": {"words": 306, "then_words": 26, "because_sentences": 1, "except": 2, "precedence": 3, "accepted": 0, "accepted_words": 0}, "S2": {"words": 657, "then_words": 119, "because_sentences": 1, "except": 0, "precedence": 7, "accepted": 3, "accepted_words": 222}, "S3": {"words": 960, "then_words": 398, "because_sentences": 3, "except": 4, "precedence": 5, "accepted": 6, "accepted_words": 343}, diff --git a/tests/v2/test_types.py b/tests/v2/test_types.py index b60f19d97..4682e731c 100644 --- a/tests/v2/test_types.py +++ b/tests/v2/test_types.py @@ -5,7 +5,7 @@ import pytest -from nameparser import FAMILY_FIRST, GIVEN_FIRST, Lexicon, Locale, Policy, parse +from nameparser import FAMILY_FIRST, GIVEN_FIRST, Lexicon, Locale, Parser, Policy, parse from nameparser._types import ( STABLE_TAGS, Ambiguity, AmbiguityKind, ParsedName, Reading, Role, Segmentation, Span, Token, @@ -319,6 +319,8 @@ def test_derived_views_filter_on_stable_particle_tag() -> None: ("John Smith Ph. D. Jr.", "Jr.", "Ph. D."), ("John Smith, MD Jr. PhD", "Jr.", "MD PhD"), ("John Smith, MD, Jr. PhD", "Jr.", "MD, PhD"), + # any entry boundary the suffix renders as a comma (rules/R1) + ("John Smith, MD / Jr. / PhD", "Jr.", "MD, PhD"), # a connective goes with the word before it, dangling where the # word after it is in the other view (rules/R8's Accepted) ("John Smith, PhD and MD Jr.", "Jr.", "PhD and MD"), @@ -335,6 +337,24 @@ def test_the_suffix_views_partition_it_by_reading( assert (pn.generation, pn.credentials) == (generation, credentials) +@pytest.mark.parametrize("field,kind", [ + # a caller's word in `suffix_words` alone has no row to read a kind + # from; its gate's marker or the agnomen set gives it one by its tag + ({"suffix_words": {"zzz"}}, "post-nominal"), + ({"suffix_words": {"zzz"}, "suffix_words_ambiguous": {"zzz"}}, + "generation"), + ({"suffix_words": {"zzz"}, "suffix_words_ambiguous": {"zzz"}, + "agnomens": {"zzz"}}, "agnomen"), +]) +def test_a_callers_suffix_word_reads_by_its_marker_else_post_nominal( + field: dict[str, set[str]], kind: str) -> None: + pn = Parser(lexicon=Lexicon.default().add(**field)).parse( + "Pedro Alves Silva zzz") + (tok,) = pn.tokens_for("suffix") + assert tok.reading is not None and tok.reading.kind.value == kind + assert pn.generation == ("" if kind == "post-nominal" else "zzz") + + def test_a_suffix_word_with_no_reading_is_a_credential() -> None: # replace() records no reading, so nothing says what the word was # read as (rules/R8's Accepted) diff --git a/tools/differential/corpus_rules.jsonl b/tools/differential/corpus_rules.jsonl index 3e1078f67..7808d66f6 100644 --- a/tools/differential/corpus_rules.jsonl +++ b/tools/differential/corpus_rules.jsonl @@ -527,6 +527,7 @@ "John Smith, MA; PhD" "John Smith, MD - Chief of Surgery" "John Smith, MD - PhD" +"John Smith, MD / Jr. / PhD" "John Smith, MD / PhD" "John Smith, MD ; PhD" "John Smith, MD Jr. PhD" diff --git a/tools/differential/snapshot.jsonl b/tools/differential/snapshot.jsonl index 673870652..cbc6e50a1 100644 --- a/tools/differential/snapshot.jsonl +++ b/tools/differential/snapshot.jsonl @@ -1846,6 +1846,7 @@ {"name": "John Smith, MA; PhD", "given": "John", "family": "Smith", "suffix": "MA; PhD", "initials": "J. S."} {"name": "John Smith, MD - Chief of Surgery", "title": "Chief of Surgery", "given": "John", "family": "Smith", "suffix": "MD", "initials": "J. S."} {"name": "John Smith, MD - PhD", "given": "John", "family": "Smith", "suffix": "MD, PhD", "initials": "J. S."} +{"name": "John Smith, MD / Jr. / PhD", "given": "John", "family": "Smith", "suffix": "MD, Jr., PhD", "initials": "J. S.", "generation": "Jr.", "credentials": "MD, PhD"} {"name": "John Smith, MD / PhD", "given": "John", "family": "Smith", "suffix": "MD, PhD", "initials": "J. S."} {"name": "John Smith, MD ; PhD", "given": "John", "family": "Smith", "suffix": "MD, PhD", "initials": "J. S."} {"name": "John Smith, MD Jr. PhD", "given": "John", "family": "Smith", "suffix": "MD Jr. PhD", "initials": "J. S.", "generation": "Jr.", "credentials": "MD PhD"} From 87154a6d2556da32894e0b5b2cecab38255106be Mon Sep 17 00:00:00 2001 From: Derek Gulbranson Date: Thu, 29 Oct 2026 18:05:48 -0700 Subject: [PATCH 4/6] Read a listed suffix word's kind at classify, by its glued stem (4b review) A delimiter glued to a generation word ('Jr.;', 'III;', 'V;') put it in credentials: the kind was looked up from the token text. Classify now writes a kind tag from the stem it reads every word by, assemble drops it from the published token, and one test walks every suffix-set word. R8 records names unpickled from 2.x and name words in the suffix. Co-Authored-By: Claude Opus 5.5 --- .../R8-generation-and-credentials-views.md | 6 +-- .../R8-generation-and-credentials-views.md | 8 +++- docs/release_log.rst | 2 +- nameparser/_pipeline/_assemble.py | 13 +++++- nameparser/_pipeline/_classify.py | 11 ++++- nameparser/_pipeline/_state.py | 8 ++++ nameparser/_pipeline/_vocab.py | 44 ++++++++++--------- tests/v2/pipeline/test_assemble.py | 41 +++++++++++------ tests/v2/rules_budget.json | 2 +- tests/v2/test_types.py | 24 ++++++++++ tools/differential/snapshot.jsonl | 2 +- 11 files changed, 117 insertions(+), 44 deletions(-) diff --git a/docs/design/decisions/R8-generation-and-credentials-views.md b/docs/design/decisions/R8-generation-and-credentials-views.md index 781b2f266..78603ca5c 100644 --- a/docs/design/decisions/R8-generation-and-credentials-views.md +++ b/docs/design/decisions/R8-generation-and-credentials-views.md @@ -12,10 +12,10 @@ Open: none in this file. ## Log - 2026-10-29 #754, sub-phase 4b (#326) — IMPLEMENTED item 4 of decisions/vocabulary-model's 2026-10-28 #754 entry. SUPERSEDES: decisions/A1's 2026-10-26 #752 ACCEPTED clause that a listed suffix word neither a generation by its tag nor an agnomen reads as `post-nominal`, `jr` and `esq` alike. What the implementation decided, beyond that entry: - 1. **The kind of a listed suffix word comes from the reading index.** `jr` and `esq` compile into `suffix_words` with the same tags, so 4a read both as `post-nominal` and pinned the gap with strict xfails. `_vocab.suffix_kind` now asks `_reading_index.suffix_kind_of` for a word tagged `vocab:suffix-word`, a memo whose hit costs no frame, so `Token.reading` and `Ambiguity.alternative` move together: a lone `Jr` names a `generation` alternative where it named a `post-nominal` one, and a credential written as a word (`博士`) reads `credential`. The vocabulary's courtesy, honorific, professional honorific and status kinds have no reading kind of their own and stay `post-nominal`. `_vocab` imports `_reading_index` for it, which tests/v2/test_layering.py's table records. + 1. **The kind of a listed suffix word comes from the reading index.** `jr` and `esq` compile into `suffix_words` with the same tags, so 4a read both as `post-nominal` and pinned the gap with strict xfails. Classify writes a kind tag beside `vocab:suffix-word` (`vocab:generation-word`, `vocab:credential-word`), asking `_reading_index.suffix_kind_of` through `_vocab.listed_word_kind_tag`, a memo whose hit costs no frame, and `_vocab.suffix_kind` reads the tag, so `Token.reading` and `Ambiguity.alternative` move together: a lone `Jr` names a `generation` alternative where it named a `post-nominal` one, and a credential written as a word (`博士`) reads `credential`. The vocabulary's courtesy, honorific, professional honorific and status kinds have no reading kind of their own and stay `post-nominal`. `_vocab` imports `_reading_index` for it, which tests/v2/test_layering.py's table records. The first draft looked the kind up in `suffix_kind` from the token's text, which keeps a delimiter glued on (rules/C10): `John Smith, Jr.; MD` read `Jr.;` post-nominal and put it in the credentials, as `John Smith, V; MD` did a numeral, found by the orchestrating review of #947. Classify reads every word by its glued stem already, so the kind is read there, by the key every other tag of the word is read by, and assemble drops the two tags from the published token, `Token.reading` carrying the kind out: `Token` compares its tags, and a published tag would make a name unequal to its own 2.x pickle (tests/v2/test_types.py's 2.8.0 fixture, `…de la Vega III`, caught it); a declared delimiter glued to either end (`Jr./`, `-Jr.`) reads alike, and `test_every_suffix_words_reading_alternative_and_index_kind_agree` walks every suffix-set word (826 on 2026-10-29) holding the reading taken, the alternative and the index's kind to one answer. 2. **The kind is read whatever the reading's default.** `st`, a Czech generation written `default = false`, reads `generation` when a caller's `Lexicon` lists it, while its `languages` name no file, since none holds it on. A pack turning such a reading on (phase 3's `cs`, 3f) then needs nothing more for the kind; a word only a caller's own `Lexicon` lists has no row and reads `post-nominal`. 3. **Each word is placed by its own reading, and separated as the writer separated it.** A `joined` mark is not only the second word of a split credential (`Ph.` `D.`, which takes the first word's reading) but every word of a suffix run written without commas (`Jr. III PhD`), so a view places each word by its reading. Two words of one view are separated by a comma where the suffix holds one anywhere between them, R1's separator (a typed comma, or a semicolon, hyphen, slash or delimiter C10 drops: `MD / Jr. / PhD` gives credentials 'MD, PhD'), and by a space where not, so `MD Jr. PhD` gives credentials 'MD PhD'; the first draft started a new comma-joined entry wherever a word of the other view stood between, writing a comma nobody typed ('MD, PhD'), found by the design-docs review. A connective goes with the word before it (`PhD and MD`, `Jr. and III`), so one joining a generation to a credential dangles at the end of the generation (`Jr. and MD` gives generation 'Jr. and'), accepted rather than given a rule of its own, no corpus name holding the shape. - 4. **A suffix word with no reading is a credential.** `replace()` and `Parser.revise()` write tokens with no `Token.reading` (4a), so `replace(suffix="Jr.")` reads credentials 'Jr.': nothing records what the word was read as, and the catch-all is the view that claims least. + 4. **A suffix word with no reading is a credential.** `replace()` and `Parser.revise()` write tokens with no `Token.reading` (4a), and a `ParsedName` unpickled from 2.x has none either, so `replace(suffix="Jr.")` reads credentials 'Jr.' and the 2.8 pickle of `Dr. Juan Q. de la Vega III` credentials 'III': nothing records what the word was read as, and the catch-all is the view that claims least. A name word a run took into the suffix by position is a credential too, 4a's reading of it (`Smith, Jr., John` gives credentials 'John'). 5. **The views stay out of `as_dict()`, `--json` and the repr**, as `family_base` and the other derived views do: `as_dict()` is the seven fields `replace()` takes back. They are `render()` keys and assertable fields of a rule's example lines. 6. **The snapshot records them** (`tools/differential/snapshot.py`, a `RECORDED_LATER` pair): `generation` where the suffix holds one, and `credentials` beside it where the suffix holds both, so a row with neither is a suffix of credentials only, or none. No other key moved on recording. - - Measured 2026-10-29 on the 4b branch over the committed snapshot (`tools/differential/snapshot.jsonl`, 6,565 readings, rules/R8's own examples included): 1,072 rows hold a suffix, 486 of them a generation, 140 a generation and credentials both. Recompute: count rows with `suffix`, `generation` and `credentials` in the snapshot. Over `cldr_fields.jsonl`, 576 distinct (text, order) renderings carry CLDR's `generation` or `credentials`; 65 parse to exactly CLDR's suffix words, and all 65 split into CLDR's two fields. Recompute: parse each distinct text under its order (`givenFirst` as `GIVEN_FIRST`, `surnameFirst` as `FAMILY_FIRST`, any other order the default), keep those whose `suffix` words, commas removed, equal CLDR's `generation` and `credentials` words together, and compare each view's words with its field's. The RFC's 615 and 75 (2026-10-28) counted renderings, not distinct (text, order) pairs. + - Measured 2026-10-29 on the 4b branch over the committed snapshot (`tools/differential/snapshot.jsonl`, 6,565 readings, rules/R8's own examples included): 1,072 rows hold a suffix, 487 of them a generation, 141 a generation and credentials both. Recompute: count rows with `suffix`, `generation` and `credentials` in the snapshot. Over `cldr_fields.jsonl`, 576 distinct (text, order) renderings carry CLDR's `generation` or `credentials`; 65 parse to exactly CLDR's suffix words, and all 65 split into CLDR's two fields. Recompute: parse each distinct text under its order (`givenFirst` as `GIVEN_FIRST`, `surnameFirst` as `FAMILY_FIRST`, any other order the default), keep those whose `suffix` words, commas removed, equal CLDR's `generation` and `credentials` words together, and compare each view's words with its field's. The RFC's 615 and 75 (2026-10-28) counted renderings, not distinct (text, order) pairs. diff --git a/docs/design/rules/R8-generation-and-credentials-views.md b/docs/design/rules/R8-generation-and-credentials-views.md index cd8e6b4f1..cd6631c6a 100644 --- a/docs/design/rules/R8-generation-and-credentials-views.md +++ b/docs/design/rules/R8-generation-and-credentials-views.md @@ -40,9 +40,13 @@ ``` "John Smith, Jr. and MD" → generation="Jr. and" ``` -- A suffix word with no reading, one that `replace()` or `Parser.revise()` wrote, is in the credentials whatever it is, since nothing records what it was read as. +- A suffix word with no reading, one that `replace()` or `Parser.revise()` wrote or in a name unpickled from 2.x, is in the credentials whatever it is, since nothing records what it was read as. +- A name word in the suffix, one a run took in by where it stands, is in the credentials, the catch-all. + ``` + "Smith, Jr., John" → credentials="John" + ``` - The kind of a word listed as a suffix word is the shipped vocabulary's, read whatever the reading's default, so a word a caller's own `Lexicon` lists in `suffix_words` alone is in the credentials, a generation word included, and so is a generation word a caller lists as an acronym; one the caller also lists in `suffix_words_ambiguous` or `agnomens` reads as a generation or an agnomen by that marker. --- **Signal:** none in the name: the reading each suffix word took -**history:** decisions/R8 · **implemented:** nameparser/_types.py, nameparser/_pipeline/_vocab.py +**history:** decisions/R8 · **implemented:** nameparser/_types.py, nameparser/_pipeline/_vocab.py, nameparser/_pipeline/_classify.py diff --git a/docs/release_log.rst b/docs/release_log.rst index 69f07f98a..80e8a1649 100644 --- a/docs/release_log.rst +++ b/docs/release_log.rst @@ -7,7 +7,7 @@ Release Log **Additions** - **Add Locale.languages, a choice of languages for the default vocabulary.** ``parser_for(Locale(code="pt", lexicon=Lexicon.empty(), languages=frozenset({"pt"}))).parse("ANA SILVA E SOUZA")`` gives family ``SILVA E SOUZA``, where the default reads family ``SOUZA``, the ``E`` an initial: a chosen language's reading of a word it has a vocabulary reading of wins, and the other languages' vocabulary readings of that word leave, while its readings as a name and the readings shared by every language stay, so under ``pt`` ``John Smith DO`` reads family ``DO``. A generation word another language collides with is read only under its own language: ``Jiří Dienstbier ml.`` gives suffix ``ml.`` under ``cs``, and the Czech, Slovak, Slovenian and Croatian ``ml.`` and ``st.`` and the French ``père`` read this way. A pack choosing no language parses as before. See :doc:`locales`. :issue:`753` - - **Add ParsedName.generation and ParsedName.credentials, the suffix split by kind.** ``parse("Smith, John, Jr., MD, Esq.")`` gives generation ``Jr.`` and credentials ``MD, Esq.``, where 1.4.0 through 2.8.0 gave only suffix ``Jr., MD, Esq.``, which is unchanged. They are views like ``family_base``: render keys, not fields of ``as_dict()``. An honorific after a name (``Esq.``, ``さん``) is a credential, and a suffix written by ``replace()`` is all credentials. ``Token.reading`` reads ``Jr.`` and ``Sr.`` as a generation, and ``Ambiguity.alternative`` of a lone ``Jr`` names a generation where 2.7.0 and 2.8.0 named a post-nominal. :issue:`326`, :issue:`754` + - **Add ParsedName.generation and ParsedName.credentials, the suffix split by kind.** ``parse("Smith, John, Jr., MD, Esq.")`` gives generation ``Jr.`` and credentials ``MD, Esq.``, where 1.4.0 through 2.8.0 gave only suffix ``Jr., MD, Esq.``, which is unchanged. They are views like ``family_base``: render keys, not fields of ``as_dict()``. An honorific after a name (``Esq.``, ``さん``) is a credential, and a suffix written by ``replace()``, or in a name unpickled from 2.x, is all credentials. ``Token.reading`` reads ``Jr.`` and ``Sr.`` as a generation, and ``Ambiguity.alternative`` of a lone ``Jr`` names a generation where 2.7.0 and 2.8.0 named a post-nominal. :issue:`326`, :issue:`754` - **Add Token.reading, the reading the parse took for each word.** ``parse("John Smith PhD Jones").tokens[-1].reading`` is ``Reading('credential' as 'suffix', 'position')``, the reading 2.7's ``Ambiguity.alternative`` gave only for the other side of a fork, and ``ReadingKind`` gains ``patronymic``. The field is not compared, and a ``ParsedName`` pickled by 2.x loads with no readings. :issue:`754` - **Add Reading.languages, the language files that list a word the way it was read.** ``parse("Dr. Juan de la Vega III").tokens[2].reading.languages`` is ``('es', 'fr', 'it', 'nl', 'pt')`` for the particle ``de``, and ``Ambiguity.alternative`` names its files too; a reading by shape or position names none. It is not compared, and a ``Reading`` pickled by 2.7 or 2.8 loads with none. The first parse in a process that meets a listed word loads the reading index once: about 1 ms, or about 16 ms where Python writes no bytecode cache. :issue:`754`, :issue:`753` diff --git a/nameparser/_pipeline/_assemble.py b/nameparser/_pipeline/_assemble.py index fdbb3140e..ec3e26b57 100644 --- a/nameparser/_pipeline/_assemble.py +++ b/nameparser/_pipeline/_assemble.py @@ -37,7 +37,8 @@ from nameparser._lexicon import _VOCAB_FIELDS, Lexicon, _normalize from nameparser._pipeline._state import ( - AGNOMEN_TAG, AMBIGUOUS_ACRONYM_TAG, AMBIGUOUS_WORD_TAG, FIELD_READING, + AGNOMEN_TAG, AMBIGUOUS_ACRONYM_TAG, AMBIGUOUS_WORD_TAG, + CREDENTIAL_WORD_TAG, FIELD_READING, GENERATION_WORD_TAG, NAME_ROLES, SHAPE_ACRONYM_TAG, SPLIT_CREDENTIAL_TAG, SPLIT_MEMBER_TAG, TITLE_AMBIGUOUS_TAG, Beside, Deferred, ParseState, PendingAmbiguity, Structure, WorkToken, @@ -196,6 +197,10 @@ def _split_partner(tokens: tuple[WorkToken, ...], dropped: set[int], _reading = functools.lru_cache(maxsize=1024)(Reading) +#: classify's kind tags for a listed suffix word (rules/R8), which no +#: published token carries: `Token.reading` names the kind. +_KIND_TAGS = frozenset({GENERATION_WORD_TAG, CREDENTIAL_WORD_TAG}) + #: The tags that say a list or a shape made a word a suffix: without #: one, a suffix word stands there by position, unless the vocabulary #: lists it (a bracketed member, which classify leaves untagged). @@ -424,6 +429,12 @@ def assemble(state: ParseState) -> ParsedName: langs = () reading = (_reading(kind, role, source, langs) if langs else _READINGS[kind, role, source]) + if not tags.isdisjoint(_KIND_TAGS): + # the kind tags serve the stages and this one, whatever the + # word's field (a lone 'Jr' is a given name); the reading + # carries the kind out, and a published tag would make a + # name unequal to its own 2.x pickle (Token compares tags) + tags = tags - _KIND_TAGS final[i] = Token(t.text, t.span, role, tags, reading) # No alphanumeric character among the SURVIVING tokens means no # name: a bare '.' or '- -' is not a person. v1 kept such input diff --git a/nameparser/_pipeline/_classify.py b/nameparser/_pipeline/_classify.py index 8b19f9675..972efd905 100644 --- a/nameparser/_pipeline/_classify.py +++ b/nameparser/_pipeline/_classify.py @@ -33,6 +33,8 @@ "vocab:after-given-title", "vocab:title-ambiguous", "vocab:suffix", "vocab:suffix-word", "vocab:suffix-ambiguous", "vocab:suffix-word-ambiguous", "vocab:agnomen", +"vocab:generation-word", "vocab:credential-word" (read by the later +stages and dropped by assemble, Token.reading carrying the kind out), "vocab:particle-ambiguous", "vocab:bound-given", "vocab:given-abbreviation", "vocab:maiden-marker", "vocab:maiden-marker-cont"; in a namespace of its own, @@ -78,7 +80,8 @@ from nameparser._pipeline._vocab import ( BUILTIN_GLUED_DELIMITERS, SPLIT_CHUNK, SPLIT_PAIR_OPENS, _INITIAL, caps_shape_candidate, composed_len, glued_cores, glued_stem, is_cased_paired_initials, - is_initial, is_one_case, period_joined_vocab, split_pair, + is_initial, is_one_case, listed_word_kind_tag, period_joined_vocab, + split_pair, suffix_as_written, tag_marker_runs, title_readings, ) from nameparser._pipeline._pieces import own_words @@ -156,6 +159,12 @@ def _tags_for(token: WorkToken, n: str, state: ParseState, tags.add(AGNOMEN_TAG) elif n in lex.suffix_words: tags.add("vocab:suffix-word") + # rules/R8: "The kind of a word listed as a suffix word is the + # shipped vocabulary's" -- read here, from the word as this + # stage reads it (decisions/R8, #326) + kind_tag = listed_word_kind_tag(n) + if kind_tag is not None: + tags.add(kind_tag) if n in lex.suffix_acronyms_ambiguous: tags.add(AMBIGUOUS_ACRONYM_TAG) # rules/P7: "A one-letter word written with its period is an diff --git a/nameparser/_pipeline/_state.py b/nameparser/_pipeline/_state.py index 519c95a56..7f407b49e 100644 --- a/nameparser/_pipeline/_state.py +++ b/nameparser/_pipeline/_state.py @@ -101,6 +101,14 @@ class WorkToken: AMBIGUOUS_WORD_TAG = "vocab:suffix-word-ambiguous" AGNOMEN_TAG = "vocab:agnomen" +#: Beside "vocab:suffix-word" on a word whose shipped reading index +#: kind is a generation (`jr`) or a credential written as a word +#: (`博士`), which the compiled sets do not record (rules/R8, 3.0's 4b): +#: written by classify from the word as it reads it, a delimiter glued +#: on removed (`Jr.;`, rules/C10), and read by `_vocab.suffix_kind`. +GENERATION_WORD_TAG = "vocab:generation-word" +CREDENTIAL_WORD_TAG = "vocab:credential-word" + #: On a word of `Lexicon.titles_ambiguous` whichever way classify read #: it (rules/H9): read as a title it carries "vocab:title" too, read #: out of the title it carries this alone, which is how assign finds diff --git a/nameparser/_pipeline/_vocab.py b/nameparser/_pipeline/_vocab.py index 2bcacdea9..880d83aa3 100644 --- a/nameparser/_pipeline/_vocab.py +++ b/nameparser/_pipeline/_vocab.py @@ -45,7 +45,7 @@ Layering: imports _lexicon, _policy, and _pipeline._state (WorkToken, comma_bucket, PendingReading -- read-only, never a whole ParseState), and _reading_index for the one fact no compiled set records, the kind -of a listed suffix word (suffix_kind, 3.0's 4b). +of a listed suffix word (listed_word_kind_tag, 3.0's 4b). """ from __future__ import annotations @@ -63,7 +63,7 @@ from nameparser._reading_index import suffix_kind_of from nameparser._pipeline._state import ( AGNOMEN_TAG, AMBIGUOUS_ACRONYM_TAG, AMBIGUOUS_WORD_TAG, COMMA_CHARS, - Deferred, + CREDENTIAL_WORD_TAG, Deferred, GENERATION_WORD_TAG, GIVEN_ABBREVIATION_TAG, SHAPE_ACRONYM_TAG, TITLE_AMBIGUOUS_TAG, PendingReading, ReadingKind, ReadingSource, Role, WorkToken, comma_bucket, @@ -2182,40 +2182,42 @@ def suffix_kind(text: str, predicate.""" if AGNOMEN_TAG in tags: return ReadingKind.AGNOMEN, ReadingSource.VOCABULARY - if AMBIGUOUS_WORD_TAG in tags: + if AMBIGUOUS_WORD_TAG in tags or GENERATION_WORD_TAG in tags: return ReadingKind.GENERATION, ReadingSource.VOCABULARY if _ROMAN.match(text.rstrip(".")) is not None: listed = "vocab:suffix" in tags or "vocab:suffix-word" in tags return (ReadingKind.GENERATION, ReadingSource.VOCABULARY if listed else ReadingSource.SHAPE) if "vocab:suffix-word" in tags: - return _listed_word_kind(text), ReadingSource.VOCABULARY + return (ReadingKind.CREDENTIAL if CREDENTIAL_WORD_TAG in tags + else ReadingKind.POST_NOMINAL), ReadingSource.VOCABULARY return (ReadingKind.CREDENTIAL, ReadingSource.SHAPE if SHAPE_ACRONYM_TAG in tags else ReadingSource.VOCABULARY) -#: The suffix kinds of the vocabulary a parse names a listed suffix -#: word by; the word kinds with no reading kind of their own (a -#: courtesy, an honorific, a status) read as a post-nominal word. -_LISTED_WORD_KINDS = {"generation": ReadingKind.GENERATION, - "agnomen": ReadingKind.AGNOMEN, - "credential": ReadingKind.CREDENTIAL} +#: The tag naming a listed suffix word's kind in the shipped reading +#: index, for the kinds with a reading kind of their own; a courtesy, an +#: honorific or a status reads as a post-nominal word, and an agnomen +#: has its own set and tag. +_LISTED_WORD_KIND_TAGS = {"generation": GENERATION_WORD_TAG, + "credential": CREDENTIAL_WORD_TAG} # rules/R8: "The kind of a word listed as a suffix word is the shipped -# vocabulary's, read whatever the reading's default" -- the kind the views partition the -# suffix by (decisions/R8, #326). A memo, C-level on a hit, so a suffix -# word read before costs no frame; bounded since its key is the -# caller's text. +# vocabulary's, read whatever the reading's default" -- the kind the +# views partition the suffix by (decisions/R8, #326). A memo, C-level +# on a hit, so a suffix word read before costs no frame; bounded since +# its key is the caller's text. @functools.lru_cache(maxsize=4096) -def _listed_word_kind(text: str) -> ReadingKind: - """The kind of a listed suffix word, which the compiled sets do not - record (`jr` and `esq` both compile into `suffix_words`): read from - the shipped files' reading index (3.0's 4b, #326), so a word only a - caller's `Lexicon` lists reads as a post-nominal word.""" - kind = suffix_kind_of(_normalize(text)) - return _LISTED_WORD_KINDS.get(kind or "", ReadingKind.POST_NOMINAL) +def listed_word_kind_tag(n: str) -> str | None: + """The kind tag classify writes beside "vocab:suffix-word" on a word + whose normalized form `n` is the one it read (a delimiter glued on + removed, rules/C10): the kind the compiled sets do not record (`jr` + and `esq` both compile into `suffix_words`), read from the shipped + files' reading index (3.0's 4b), so a word only a caller's + `Lexicon` lists has none.""" + return _LISTED_WORD_KIND_TAGS.get(suffix_kind_of(n) or "") def name_reading(token: WorkToken, role: Role | Deferred) -> PendingReading: diff --git a/tests/v2/pipeline/test_assemble.py b/tests/v2/pipeline/test_assemble.py index 0ee87de50..a9a16c83d 100644 --- a/tests/v2/pipeline/test_assemble.py +++ b/tests/v2/pipeline/test_assemble.py @@ -414,19 +414,34 @@ def test_a_suffix_word_reads_as_its_vocabulary_kind( assert tok.reading.kind.value == kind -@pytest.mark.parametrize("word,kind", [ - ("Jr", "generation"), ("Junior", "generation"), ("Esq", "post-nominal"), -]) -def test_a_suffix_words_reading_and_alternative_name_one_kind( - word: str, kind: str) -> None: - # a lone suffix word reads as a name and names the suffix reading - # it did not take; behind a name it takes that reading. One - # predicate (`_vocab.suffix_kind`) names both - (amb,) = parse(word).ambiguities - assert amb.alternative is not None - assert amb.alternative.kind.value == kind - (tok,) = parse(f"John Smith {word}").tokens_for(Role.SUFFIX) - assert tok.reading is not None and tok.reading.kind is amb.alternative.kind +def test_every_suffix_words_reading_alternative_and_index_kind_agree( + ) -> None: + # One walk over every suffix-set word, not a case per word (826 on + # 2026-10-29): behind a name the word takes its suffix reading, a + # lone word that reports a fork names that reading as the one not + # taken, and both carry the kind the shipped reading index gives + # it. One predicate (`_vocab.suffix_kind`) names the two readings + # (rules/R8, decisions/R8) + from nameparser._reading_index import suffix_kind_of + lex = Lexicon.default() + kinds = {"generation": "generation", "agnomen": "agnomen", + "credential": "credential"} + words = sorted(lex.suffix_words | lex.suffix_acronyms + | lex.suffix_words_ambiguous + | lex.suffix_acronyms_ambiguous) + assert len(words) > 800 + mismatched = [] + for word in words: + want = kinds.get(suffix_kind_of(word) or "", "post-nominal") + taken = [t.reading.kind.value if t.reading else None + for t in parse(f"John Smith {word}").tokens_for(Role.SUFFIX)] + not_taken = [a.alternative.kind.value + for a in parse(word).ambiguities + if a.alternative is not None + and a.alternative.role is Role.SUFFIX] + if taken != [want] or any(k != want for k in not_taken): + mismatched.append((word, want, taken, not_taken)) + assert not mismatched, mismatched[:10] # -- Reading.languages (3.0, 4a's follow-up): the files holding it ------ diff --git a/tests/v2/rules_budget.json b/tests/v2/rules_budget.json index af84be849..004a549c1 100644 --- a/tests/v2/rules_budget.json +++ b/tests/v2/rules_budget.json @@ -56,7 +56,7 @@ "R5": {"words": 250, "then_words": 154, "because_sentences": 2, "except": 0, "precedence": 0, "accepted": 0, "accepted_words": 0}, "R6": {"words": 400, "then_words": 265, "because_sentences": 2, "except": 1, "precedence": 0, "accepted": 5, "accepted_words": 289}, "R7": {"words": 142, "then_words": 30, "because_sentences": 2, "except": 0, "precedence": 1, "accepted": 2, "accepted_words": 74}, - "R8": {"words": 163, "then_words": 61, "because_sentences": 3, "except": 1, "precedence": 0, "accepted": 4, "accepted_words": 166}, + "R8": {"words": 163, "then_words": 61, "because_sentences": 3, "except": 1, "precedence": 0, "accepted": 5, "accepted_words": 194}, "S1": {"words": 306, "then_words": 26, "because_sentences": 1, "except": 2, "precedence": 3, "accepted": 0, "accepted_words": 0}, "S2": {"words": 657, "then_words": 119, "because_sentences": 1, "except": 0, "precedence": 7, "accepted": 3, "accepted_words": 222}, "S3": {"words": 960, "then_words": 398, "because_sentences": 3, "except": 4, "precedence": 5, "accepted": 6, "accepted_words": 343}, diff --git a/tests/v2/test_types.py b/tests/v2/test_types.py index 4682e731c..7246a848a 100644 --- a/tests/v2/test_types.py +++ b/tests/v2/test_types.py @@ -327,6 +327,13 @@ def test_derived_views_filter_on_stable_particle_tag() -> None: ("John Smith, Jr. and III", "Jr. and III", ""), ("John Smith, Jr. and MD", "Jr. and", "MD"), ("Doe, Jane, and Jr.", "Jr.", "and"), + # a delimiter glued on (rules/C10) reads the word as without it, + # its text keeping the delimiter as the suffix does + ("John Smith, Jr.; MD", "Jr.;", "MD"), + ("Smith, John, Jr.; MD", "Jr.;", "MD"), + ("John Smith, III; MD", "III;", "MD"), + ("John Smith, V; MD", "V;", "MD"), + ("John Smith, MD; Jr.", "Jr.", "MD;"), # an agnomen is a generation; an honorific, a credential ("Pedro Alves Filho", "Filho", ""), ("王小明先生", "", "先生"), @@ -1002,3 +1009,20 @@ def test_with_field_tokens_rejects_mismatched_roles() -> None: with pytest.raises(ValueError, match="has role family, not given"): name._with_field_tokens( {Role.GIVEN: (Token("x", None, Role.FAMILY),)}) + + +@pytest.mark.parametrize("delimiter", ["/", "-", "+", "&"]) +@pytest.mark.parametrize("text,generation", [ + ("John Smith, Jr.{d} MD", "Jr.{d}"), + ("John Smith, III{d} MD", "III{d}"), + ("John Smith, MD {d}Jr.", "{d}Jr."), +]) +def test_a_declared_delimiter_glued_to_a_generation_keeps_it_one( + delimiter: str, text: str, generation: str) -> None: + # the spelling sweep over the delimiter a caller declares, glued to + # either end (rules/C10): classify reads the stem's kind + pn = Parser(policy=Policy( + extra_suffix_delimiters=frozenset({delimiter}))).parse( + text.format(d=delimiter)) + assert (pn.generation, pn.credentials) == ( + generation.format(d=delimiter), "MD") diff --git a/tools/differential/snapshot.jsonl b/tools/differential/snapshot.jsonl index cbc6e50a1..7fac1b588 100644 --- a/tools/differential/snapshot.jsonl +++ b/tools/differential/snapshot.jsonl @@ -1898,7 +1898,7 @@ {"name": "John Smith, V Jr.", "given": "John", "family": "Smith", "suffix": "V Jr.", "initials": "J. S.", "generation": "V Jr."} {"name": "John Smith, V MD", "given": "John", "family": "Smith", "suffix": "V MD", "initials": "J. S.", "generation": "V", "credentials": "MD"} {"name": "John Smith, V.", "given": "John", "family": "Smith", "suffix": "V.", "initials": "J. S.", "generation": "V."} -{"name": "John Smith, V; MD", "given": "John", "family": "Smith", "suffix": "V; MD", "initials": "J. S."} +{"name": "John Smith, V; MD", "given": "John", "family": "Smith", "suffix": "V; MD", "initials": "J. S.", "generation": "V;", "credentials": "MD"} {"name": "John Smith, Vice", "title": "Vice", "given": "John", "family": "Smith", "initials": "J. S."} {"name": "John Smith, X.Y. P.Q.", "given": "John", "family": "Smith", "suffix": "X.Y. P.Q.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S."} {"name": "John Smith, X.Y.Z.", "given": "John", "family": "Smith", "suffix": "X.Y.Z.", "initials": "J. S."} From 90941442299862d35239dd96b6bb076a1222cddf Mon Sep 17 00:00:00 2001 From: Derek Gulbranson Date: Thu, 29 Oct 2026 18:10:19 -0700 Subject: [PATCH 5/6] Record R8's glued-delimiter costs (4b, fix-commit review) Co-Authored-By: Claude Opus 5.5 --- docs/design/decisions/R8-generation-and-credentials-views.md | 4 ++-- docs/design/rules/R8-generation-and-credentials-views.md | 5 +++++ tests/v2/rules_budget.json | 2 +- tests/v2/test_types.py | 3 +++ tools/differential/corpus_rules.jsonl | 2 ++ tools/differential/snapshot.jsonl | 2 ++ 6 files changed, 15 insertions(+), 3 deletions(-) diff --git a/docs/design/decisions/R8-generation-and-credentials-views.md b/docs/design/decisions/R8-generation-and-credentials-views.md index 78603ca5c..24b02d946 100644 --- a/docs/design/decisions/R8-generation-and-credentials-views.md +++ b/docs/design/decisions/R8-generation-and-credentials-views.md @@ -12,10 +12,10 @@ Open: none in this file. ## Log - 2026-10-29 #754, sub-phase 4b (#326) — IMPLEMENTED item 4 of decisions/vocabulary-model's 2026-10-28 #754 entry. SUPERSEDES: decisions/A1's 2026-10-26 #752 ACCEPTED clause that a listed suffix word neither a generation by its tag nor an agnomen reads as `post-nominal`, `jr` and `esq` alike. What the implementation decided, beyond that entry: - 1. **The kind of a listed suffix word comes from the reading index.** `jr` and `esq` compile into `suffix_words` with the same tags, so 4a read both as `post-nominal` and pinned the gap with strict xfails. Classify writes a kind tag beside `vocab:suffix-word` (`vocab:generation-word`, `vocab:credential-word`), asking `_reading_index.suffix_kind_of` through `_vocab.listed_word_kind_tag`, a memo whose hit costs no frame, and `_vocab.suffix_kind` reads the tag, so `Token.reading` and `Ambiguity.alternative` move together: a lone `Jr` names a `generation` alternative where it named a `post-nominal` one, and a credential written as a word (`博士`) reads `credential`. The vocabulary's courtesy, honorific, professional honorific and status kinds have no reading kind of their own and stay `post-nominal`. `_vocab` imports `_reading_index` for it, which tests/v2/test_layering.py's table records. The first draft looked the kind up in `suffix_kind` from the token's text, which keeps a delimiter glued on (rules/C10): `John Smith, Jr.; MD` read `Jr.;` post-nominal and put it in the credentials, as `John Smith, V; MD` did a numeral, found by the orchestrating review of #947. Classify reads every word by its glued stem already, so the kind is read there, by the key every other tag of the word is read by, and assemble drops the two tags from the published token, `Token.reading` carrying the kind out: `Token` compares its tags, and a published tag would make a name unequal to its own 2.x pickle (tests/v2/test_types.py's 2.8.0 fixture, `…de la Vega III`, caught it); a declared delimiter glued to either end (`Jr./`, `-Jr.`) reads alike, and `test_every_suffix_words_reading_alternative_and_index_kind_agree` walks every suffix-set word (826 on 2026-10-29) holding the reading taken, the alternative and the index's kind to one answer. + 1. **The kind of a listed suffix word comes from the reading index.** `jr` and `esq` compile into `suffix_words` with the same tags, so 4a read both as `post-nominal` and pinned the gap with strict xfails. Classify writes a kind tag beside `vocab:suffix-word` (`vocab:generation-word`, `vocab:credential-word`), asking `_reading_index.suffix_kind_of` through `_vocab.listed_word_kind_tag`, a memo whose hit costs no frame, and `_vocab.suffix_kind` reads the tag, so `Token.reading` and `Ambiguity.alternative` move together: a lone `Jr` names a `generation` alternative where it named a `post-nominal` one, and a credential written as a word (`博士`) reads `credential`. The vocabulary's courtesy, honorific, professional honorific and status kinds have no reading kind of their own and stay `post-nominal`. `_vocab` imports `_reading_index` for it, which tests/v2/test_layering.py's table records. The first draft looked the kind up in `suffix_kind` from the token's text, which keeps a delimiter glued on (rules/C10): `John Smith, Jr.; MD` read `Jr.;` post-nominal and put it in the credentials, as `John Smith, V; MD` did a numeral, found by the orchestrating review of #947. Classify reads every word by its glued stem already, so the kind is read there, by the key every other tag of the word is read by, and assemble drops the two tags from the published token, `Token.reading` carrying the kind out: `Token` compares its tags, and a published tag would make a name unequal to its own 2.x pickle (tests/v2/test_types.py's 2.8.0 fixture, `…de la Vega III`, caught it); a declared delimiter glued to either end (`Jr./`, `-Jr.`) reads alike, while before the first comma, where C10 reads a glued delimiter as part of the word and classify cuts no stem, `John Smith Jr.; MD` keeps `Jr.;` in the credentials, recorded as rules/R8's cost rather than read differently from C10 (the fix commit's review); a view keeps the delimiter in its word's text, as the suffix does, so `John Smith, Jr.; MD` gives generation 'Jr.;'; and `test_every_suffix_words_reading_alternative_and_index_kind_agree` walks every suffix-set word (826 on 2026-10-29) holding the reading taken, the alternative and the index's kind to one answer. 2. **The kind is read whatever the reading's default.** `st`, a Czech generation written `default = false`, reads `generation` when a caller's `Lexicon` lists it, while its `languages` name no file, since none holds it on. A pack turning such a reading on (phase 3's `cs`, 3f) then needs nothing more for the kind; a word only a caller's own `Lexicon` lists has no row and reads `post-nominal`. 3. **Each word is placed by its own reading, and separated as the writer separated it.** A `joined` mark is not only the second word of a split credential (`Ph.` `D.`, which takes the first word's reading) but every word of a suffix run written without commas (`Jr. III PhD`), so a view places each word by its reading. Two words of one view are separated by a comma where the suffix holds one anywhere between them, R1's separator (a typed comma, or a semicolon, hyphen, slash or delimiter C10 drops: `MD / Jr. / PhD` gives credentials 'MD, PhD'), and by a space where not, so `MD Jr. PhD` gives credentials 'MD PhD'; the first draft started a new comma-joined entry wherever a word of the other view stood between, writing a comma nobody typed ('MD, PhD'), found by the design-docs review. A connective goes with the word before it (`PhD and MD`, `Jr. and III`), so one joining a generation to a credential dangles at the end of the generation (`Jr. and MD` gives generation 'Jr. and'), accepted rather than given a rule of its own, no corpus name holding the shape. 4. **A suffix word with no reading is a credential.** `replace()` and `Parser.revise()` write tokens with no `Token.reading` (4a), and a `ParsedName` unpickled from 2.x has none either, so `replace(suffix="Jr.")` reads credentials 'Jr.' and the 2.8 pickle of `Dr. Juan Q. de la Vega III` credentials 'III': nothing records what the word was read as, and the catch-all is the view that claims least. A name word a run took into the suffix by position is a credential too, 4a's reading of it (`Smith, Jr., John` gives credentials 'John'). 5. **The views stay out of `as_dict()`, `--json` and the repr**, as `family_base` and the other derived views do: `as_dict()` is the seven fields `replace()` takes back. They are `render()` keys and assertable fields of a rule's example lines. 6. **The snapshot records them** (`tools/differential/snapshot.py`, a `RECORDED_LATER` pair): `generation` where the suffix holds one, and `credentials` beside it where the suffix holds both, so a row with neither is a suffix of credentials only, or none. No other key moved on recording. - - Measured 2026-10-29 on the 4b branch over the committed snapshot (`tools/differential/snapshot.jsonl`, 6,565 readings, rules/R8's own examples included): 1,072 rows hold a suffix, 487 of them a generation, 141 a generation and credentials both. Recompute: count rows with `suffix`, `generation` and `credentials` in the snapshot. Over `cldr_fields.jsonl`, 576 distinct (text, order) renderings carry CLDR's `generation` or `credentials`; 65 parse to exactly CLDR's suffix words, and all 65 split into CLDR's two fields. Recompute: parse each distinct text under its order (`givenFirst` as `GIVEN_FIRST`, `surnameFirst` as `FAMILY_FIRST`, any other order the default), keep those whose `suffix` words, commas removed, equal CLDR's `generation` and `credentials` words together, and compare each view's words with its field's. The RFC's 615 and 75 (2026-10-28) counted renderings, not distinct (text, order) pairs. + - Measured 2026-10-29 on the 4b branch over the committed snapshot (`tools/differential/snapshot.jsonl`, 6,567 readings, rules/R8's own examples included): 1,074 rows hold a suffix, 488 of them a generation, 142 a generation and credentials both. Recompute: count rows with `suffix`, `generation` and `credentials` in the snapshot. Over `cldr_fields.jsonl`, 576 distinct (text, order) renderings carry CLDR's `generation` or `credentials`; 65 parse to exactly CLDR's suffix words, and all 65 split into CLDR's two fields. Recompute: parse each distinct text under its order (`givenFirst` as `GIVEN_FIRST`, `surnameFirst` as `FAMILY_FIRST`, any other order the default), keep those whose `suffix` words, commas removed, equal CLDR's `generation` and `credentials` words together, and compare each view's words with its field's. The RFC's 615 and 75 (2026-10-28) counted renderings, not distinct (text, order) pairs. diff --git a/docs/design/rules/R8-generation-and-credentials-views.md b/docs/design/rules/R8-generation-and-credentials-views.md index cd6631c6a..94425089a 100644 --- a/docs/design/rules/R8-generation-and-credentials-views.md +++ b/docs/design/rules/R8-generation-and-credentials-views.md @@ -41,6 +41,11 @@ "John Smith, Jr. and MD" → generation="Jr. and" ``` - A suffix word with no reading, one that `replace()` or `Parser.revise()` wrote or in a name unpickled from 2.x, is in the credentials whatever it is, since nothing records what it was read as. +- A word with a delimiter glued on keeps it in the view, as the suffix keeps it (C10), so the view can end in the delimiter; and before the first comma, where C10 reads the delimiter as part of the word, a generation word with one glued on is not read as the generation word and is in the credentials. + ``` + "John Smith, Jr.; MD" → generation="Jr.;" + "John Smith Jr.; MD" → credentials="Jr.; MD" + ``` - A name word in the suffix, one a run took in by where it stands, is in the credentials, the catch-all. ``` "Smith, Jr., John" → credentials="John" diff --git a/tests/v2/rules_budget.json b/tests/v2/rules_budget.json index 004a549c1..58aca858f 100644 --- a/tests/v2/rules_budget.json +++ b/tests/v2/rules_budget.json @@ -56,7 +56,7 @@ "R5": {"words": 250, "then_words": 154, "because_sentences": 2, "except": 0, "precedence": 0, "accepted": 0, "accepted_words": 0}, "R6": {"words": 400, "then_words": 265, "because_sentences": 2, "except": 1, "precedence": 0, "accepted": 5, "accepted_words": 289}, "R7": {"words": 142, "then_words": 30, "because_sentences": 2, "except": 0, "precedence": 1, "accepted": 2, "accepted_words": 74}, - "R8": {"words": 163, "then_words": 61, "because_sentences": 3, "except": 1, "precedence": 0, "accepted": 5, "accepted_words": 194}, + "R8": {"words": 163, "then_words": 61, "because_sentences": 3, "except": 1, "precedence": 0, "accepted": 6, "accepted_words": 254}, "S1": {"words": 306, "then_words": 26, "because_sentences": 1, "except": 2, "precedence": 3, "accepted": 0, "accepted_words": 0}, "S2": {"words": 657, "then_words": 119, "because_sentences": 1, "except": 0, "precedence": 7, "accepted": 3, "accepted_words": 222}, "S3": {"words": 960, "then_words": 398, "because_sentences": 3, "except": 4, "precedence": 5, "accepted": 6, "accepted_words": 343}, diff --git a/tests/v2/test_types.py b/tests/v2/test_types.py index 7246a848a..e763ed082 100644 --- a/tests/v2/test_types.py +++ b/tests/v2/test_types.py @@ -334,6 +334,9 @@ def test_derived_views_filter_on_stable_particle_tag() -> None: ("John Smith, III; MD", "III;", "MD"), ("John Smith, V; MD", "V;", "MD"), ("John Smith, MD; Jr.", "Jr.", "MD;"), + # before the first comma C10 reads the delimiter as the word's, so + # the word is no generation word there (rules/R8's Accepted) + ("John Smith Jr.; MD", "", "Jr.; MD"), # an agnomen is a generation; an honorific, a credential ("Pedro Alves Filho", "Filho", ""), ("王小明先生", "", "先生"), diff --git a/tools/differential/corpus_rules.jsonl b/tools/differential/corpus_rules.jsonl index 7808d66f6..19e9f87ae 100644 --- a/tools/differential/corpus_rules.jsonl +++ b/tools/differential/corpus_rules.jsonl @@ -437,6 +437,7 @@ "John Smith Jr., Mr. and Mrs. AD" "John Smith Jr., Sir AD" "John Smith Jr., þingmaður" +"John Smith Jr.; MD" "John Smith K.C." "John Smith M. D." "John Smith M.A." @@ -517,6 +518,7 @@ "John Smith, Jr., Lt.Gov." "John Smith, Jr., abdul Dr. Smith" "John Smith, Jr., van der Berg Prof." +"John Smith, Jr.; MD" "John Smith, LEED AP" "John Smith, M. D." "John Smith, M.D./Ph.D." diff --git a/tools/differential/snapshot.jsonl b/tools/differential/snapshot.jsonl index 7fac1b588..ac55d6019 100644 --- a/tools/differential/snapshot.jsonl +++ b/tools/differential/snapshot.jsonl @@ -1741,6 +1741,7 @@ {"name": "John Smith Jr., PhD", "given": "John", "family": "Smith", "suffix": "Jr., PhD", "initials": "J. S.", "generation": "Jr.", "credentials": "PhD"} {"name": "John Smith Jr., Sir AD", "title": "Sir", "given": "John", "family": "Smith", "suffix": "Jr., AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "generation": "Jr.", "credentials": "AD"} {"name": "John Smith Jr., þingmaður", "given": "John", "family": "Smith", "suffix": "Jr., þingmaður", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "capitalized_force": "John Smith Jr., Þingmaður", "generation": "Jr.", "credentials": "þingmaður"} +{"name": "John Smith Jr.; MD", "given": "John", "family": "Smith", "suffix": "Jr.; MD", "initials": "J. S."} {"name": "John Smith K.C.", "given": "John", "middle": "Smith", "family": "K.C.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)"], "initials": "J. S. K."} {"name": "John Smith M. D.", "given": "John", "middle": "Smith M.", "family": "D.", "initials": "J. S. M. D."} {"name": "John Smith M.A.", "given": "John", "family": "Smith", "suffix": "M.A.", "initials": "J. S."} @@ -1836,6 +1837,7 @@ {"name": "John Smith, Jr., Lt.Gov.", "title": "Lt.Gov.", "given": "John", "family": "Smith", "suffix": "Jr.", "initials": "J. S.", "generation": "Jr."} {"name": "John Smith, Jr., abdul Dr. Smith", "title": "Dr.", "given": "John", "family": "Smith", "suffix": "Jr., abdul Smith", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "capitalized_force": "Dr. John Smith, Jr., Abdul Smith", "generation": "Jr.", "credentials": "abdul Smith"} {"name": "John Smith, Jr., van der Berg Prof.", "title": "Prof.", "given": "John", "family": "Smith", "suffix": "Jr., van der Berg", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "capitalized_force": "Prof. John Smith, Jr., Van Der Berg", "generation": "Jr.", "credentials": "van der Berg"} +{"name": "John Smith, Jr.; MD", "given": "John", "family": "Smith", "suffix": "Jr.; MD", "initials": "J. S.", "generation": "Jr.;", "credentials": "MD"} {"name": "John Smith, LEED AP", "given": "John", "family": "Smith", "suffix": "LEED AP", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S."} {"name": "John Smith, M. D.", "given": "M.", "middle": "D.", "family": "John Smith", "initials": "M. D. J. S."} {"name": "John Smith, M.D./Ph.D.", "given": "John", "family": "Smith", "suffix": "M.D./Ph.D.", "initials": "J. S."} From 17405bd0a3995ea57d8686aa1ba1607f2d939d48 Mon Sep 17 00:00:00 2001 From: Derek Gulbranson Date: Thu, 29 Oct 2026 18:20:22 -0700 Subject: [PATCH 6/6] Restore the sweep's alternative check; R8's period-joined cost (4b review) Co-Authored-By: Claude Opus 5.5 --- .../R8-generation-and-credentials-views.md | 4 ++-- .../rules/R8-generation-and-credentials-views.md | 8 +++++++- nameparser/_pipeline/_assemble.py | 3 +-- tests/v2/pipeline/test_assemble.py | 14 +++++++++++--- tests/v2/rules_budget.json | 2 +- tests/v2/test_types.py | 9 +++++++-- tools/differential/corpus_rules.jsonl | 3 +++ tools/differential/snapshot.jsonl | 3 +++ 8 files changed, 35 insertions(+), 11 deletions(-) diff --git a/docs/design/decisions/R8-generation-and-credentials-views.md b/docs/design/decisions/R8-generation-and-credentials-views.md index 24b02d946..82caa2f6c 100644 --- a/docs/design/decisions/R8-generation-and-credentials-views.md +++ b/docs/design/decisions/R8-generation-and-credentials-views.md @@ -12,10 +12,10 @@ Open: none in this file. ## Log - 2026-10-29 #754, sub-phase 4b (#326) — IMPLEMENTED item 4 of decisions/vocabulary-model's 2026-10-28 #754 entry. SUPERSEDES: decisions/A1's 2026-10-26 #752 ACCEPTED clause that a listed suffix word neither a generation by its tag nor an agnomen reads as `post-nominal`, `jr` and `esq` alike. What the implementation decided, beyond that entry: - 1. **The kind of a listed suffix word comes from the reading index.** `jr` and `esq` compile into `suffix_words` with the same tags, so 4a read both as `post-nominal` and pinned the gap with strict xfails. Classify writes a kind tag beside `vocab:suffix-word` (`vocab:generation-word`, `vocab:credential-word`), asking `_reading_index.suffix_kind_of` through `_vocab.listed_word_kind_tag`, a memo whose hit costs no frame, and `_vocab.suffix_kind` reads the tag, so `Token.reading` and `Ambiguity.alternative` move together: a lone `Jr` names a `generation` alternative where it named a `post-nominal` one, and a credential written as a word (`博士`) reads `credential`. The vocabulary's courtesy, honorific, professional honorific and status kinds have no reading kind of their own and stay `post-nominal`. `_vocab` imports `_reading_index` for it, which tests/v2/test_layering.py's table records. The first draft looked the kind up in `suffix_kind` from the token's text, which keeps a delimiter glued on (rules/C10): `John Smith, Jr.; MD` read `Jr.;` post-nominal and put it in the credentials, as `John Smith, V; MD` did a numeral, found by the orchestrating review of #947. Classify reads every word by its glued stem already, so the kind is read there, by the key every other tag of the word is read by, and assemble drops the two tags from the published token, `Token.reading` carrying the kind out: `Token` compares its tags, and a published tag would make a name unequal to its own 2.x pickle (tests/v2/test_types.py's 2.8.0 fixture, `…de la Vega III`, caught it); a declared delimiter glued to either end (`Jr./`, `-Jr.`) reads alike, while before the first comma, where C10 reads a glued delimiter as part of the word and classify cuts no stem, `John Smith Jr.; MD` keeps `Jr.;` in the credentials, recorded as rules/R8's cost rather than read differently from C10 (the fix commit's review); a view keeps the delimiter in its word's text, as the suffix does, so `John Smith, Jr.; MD` gives generation 'Jr.;'; and `test_every_suffix_words_reading_alternative_and_index_kind_agree` walks every suffix-set word (826 on 2026-10-29) holding the reading taken, the alternative and the index's kind to one answer. + 1. **The kind of a listed suffix word comes from the reading index.** `jr` and `esq` compile into `suffix_words` with the same tags, so 4a read both as `post-nominal` and pinned the gap with strict xfails. Classify writes a kind tag beside `vocab:suffix-word` (`vocab:generation-word`, `vocab:credential-word`), asking `_reading_index.suffix_kind_of` through `_vocab.listed_word_kind_tag`, a memo whose hit costs no frame, and `_vocab.suffix_kind` reads the tag, so `Token.reading` and `Ambiguity.alternative` move together: a lone `Jr` names a `generation` alternative where it named a `post-nominal` one, and a credential written as a word (`博士`) reads `credential`. The vocabulary's courtesy, honorific, professional honorific and status kinds have no reading kind of their own and stay `post-nominal`. `_vocab` imports `_reading_index` for it, which tests/v2/test_layering.py's table records. The first draft looked the kind up in `suffix_kind` from the token's text, which keeps a delimiter glued on (rules/C10): `John Smith, Jr.; MD` read `Jr.;` post-nominal and put it in the credentials, as `John Smith, V; MD` did a numeral, found by the orchestrating review of #947. Classify reads every word by its glued stem already, so the kind is read there, by the key every other tag of the word is read by, and assemble drops the two tags from the published token, `Token.reading` carrying the kind out: `Token` compares its tags, and a published tag would make a name unequal to its own 2.x pickle (tests/v2/test_types.py's 2.8.0 fixture, `…de la Vega III`, caught it); a declared delimiter glued to either end (`Jr./`, `-Jr.`) reads alike, while before the first comma, where C10 reads a glued delimiter as part of the word and classify cuts no stem, `Jr.;` is listed by no set and reaches the suffix only by `period_joined_vocab`, which reads it by its chunks (`Jr.` and `;`, the `Lt.Gov.` path) and tags it `vocab:suffix` with no kind, so `John Smith Jr.; MD` keeps it in the credentials, as `Jr.III` is there after a comma or not, a word made only of generation words; `John Smith Jr; MD`, without the period, reads family `Jr;`. Recorded as rules/R8's cost rather than given a kind of its own (two reviews of the fix commits); a view keeps the delimiter in its word's text, as the suffix does, so `John Smith, Jr.; MD` gives generation 'Jr.;'; and `test_every_suffix_words_reading_alternative_and_index_kind_agree` walks every suffix-set word (826 on 2026-10-29) holding the reading taken, the alternative and the index's kind to one answer. 2. **The kind is read whatever the reading's default.** `st`, a Czech generation written `default = false`, reads `generation` when a caller's `Lexicon` lists it, while its `languages` name no file, since none holds it on. A pack turning such a reading on (phase 3's `cs`, 3f) then needs nothing more for the kind; a word only a caller's own `Lexicon` lists has no row and reads `post-nominal`. 3. **Each word is placed by its own reading, and separated as the writer separated it.** A `joined` mark is not only the second word of a split credential (`Ph.` `D.`, which takes the first word's reading) but every word of a suffix run written without commas (`Jr. III PhD`), so a view places each word by its reading. Two words of one view are separated by a comma where the suffix holds one anywhere between them, R1's separator (a typed comma, or a semicolon, hyphen, slash or delimiter C10 drops: `MD / Jr. / PhD` gives credentials 'MD, PhD'), and by a space where not, so `MD Jr. PhD` gives credentials 'MD PhD'; the first draft started a new comma-joined entry wherever a word of the other view stood between, writing a comma nobody typed ('MD, PhD'), found by the design-docs review. A connective goes with the word before it (`PhD and MD`, `Jr. and III`), so one joining a generation to a credential dangles at the end of the generation (`Jr. and MD` gives generation 'Jr. and'), accepted rather than given a rule of its own, no corpus name holding the shape. 4. **A suffix word with no reading is a credential.** `replace()` and `Parser.revise()` write tokens with no `Token.reading` (4a), and a `ParsedName` unpickled from 2.x has none either, so `replace(suffix="Jr.")` reads credentials 'Jr.' and the 2.8 pickle of `Dr. Juan Q. de la Vega III` credentials 'III': nothing records what the word was read as, and the catch-all is the view that claims least. A name word a run took into the suffix by position is a credential too, 4a's reading of it (`Smith, Jr., John` gives credentials 'John'). 5. **The views stay out of `as_dict()`, `--json` and the repr**, as `family_base` and the other derived views do: `as_dict()` is the seven fields `replace()` takes back. They are `render()` keys and assertable fields of a rule's example lines. 6. **The snapshot records them** (`tools/differential/snapshot.py`, a `RECORDED_LATER` pair): `generation` where the suffix holds one, and `credentials` beside it where the suffix holds both, so a row with neither is a suffix of credentials only, or none. No other key moved on recording. - - Measured 2026-10-29 on the 4b branch over the committed snapshot (`tools/differential/snapshot.jsonl`, 6,567 readings, rules/R8's own examples included): 1,074 rows hold a suffix, 488 of them a generation, 142 a generation and credentials both. Recompute: count rows with `suffix`, `generation` and `credentials` in the snapshot. Over `cldr_fields.jsonl`, 576 distinct (text, order) renderings carry CLDR's `generation` or `credentials`; 65 parse to exactly CLDR's suffix words, and all 65 split into CLDR's two fields. Recompute: parse each distinct text under its order (`givenFirst` as `GIVEN_FIRST`, `surnameFirst` as `FAMILY_FIRST`, any other order the default), keep those whose `suffix` words, commas removed, equal CLDR's `generation` and `credentials` words together, and compare each view's words with its field's. The RFC's 615 and 75 (2026-10-28) counted renderings, not distinct (text, order) pairs. + - Measured 2026-10-29 on the 4b branch over the committed snapshot (`tools/differential/snapshot.jsonl`, 6,570 readings, rules/R8's own examples included): 1,077 rows hold a suffix, 488 of them a generation, 142 a generation and credentials both. Recompute: count rows with `suffix`, `generation` and `credentials` in the snapshot. Over `cldr_fields.jsonl`, 576 distinct (text, order) renderings carry CLDR's `generation` or `credentials`; 65 parse to exactly CLDR's suffix words, and all 65 split into CLDR's two fields. Recompute: parse each distinct text under its order (`givenFirst` as `GIVEN_FIRST`, `surnameFirst` as `FAMILY_FIRST`, any other order the default), keep those whose `suffix` words, commas removed, equal CLDR's `generation` and `credentials` words together, and compare each view's words with its field's. The RFC's 615 and 75 (2026-10-28) counted renderings, not distinct (text, order) pairs. diff --git a/docs/design/rules/R8-generation-and-credentials-views.md b/docs/design/rules/R8-generation-and-credentials-views.md index 94425089a..cd5ba631f 100644 --- a/docs/design/rules/R8-generation-and-credentials-views.md +++ b/docs/design/rules/R8-generation-and-credentials-views.md @@ -41,10 +41,16 @@ "John Smith, Jr. and MD" → generation="Jr. and" ``` - A suffix word with no reading, one that `replace()` or `Parser.revise()` wrote or in a name unpickled from 2.x, is in the credentials whatever it is, since nothing records what it was read as. -- A word with a delimiter glued on keeps it in the view, as the suffix keeps it (C10), so the view can end in the delimiter; and before the first comma, where C10 reads the delimiter as part of the word, a generation word with one glued on is not read as the generation word and is in the credentials. +- A word with a delimiter glued on keeps it in the view, as the suffix keeps it (C10), so the view can end in the delimiter. ``` "John Smith, Jr.; MD" → generation="Jr.;" + ``` +- A suffix word read by its period-joined chunks, as a title written `Lt.Gov.` is, is listed whole by no suffix word, so it has no kind of its own and is in the credentials, a word made only of generation words included; before the first comma a period-written generation word with a delimiter glued on reaches the suffix only this way, while one written without the period stays a name word. + ``` + "John Smith Jr.III" → credentials="Jr.III" + "John Smith, Jr.III" → credentials="Jr.III" "John Smith Jr.; MD" → credentials="Jr.; MD" + "John Smith Jr; MD" → family="Jr;" ``` - A name word in the suffix, one a run took in by where it stands, is in the credentials, the catch-all. ``` diff --git a/nameparser/_pipeline/_assemble.py b/nameparser/_pipeline/_assemble.py index ec3e26b57..09f34cec1 100644 --- a/nameparser/_pipeline/_assemble.py +++ b/nameparser/_pipeline/_assemble.py @@ -310,8 +310,7 @@ def assemble(state: ParseState) -> ParsedName: # no reading of its own to keep in step. Per token, measured # 2026-10-29: no frame for an untagged non-suffix word, the # commonest; one for a listed or shaped suffix (`suffix_kind`, - # whose index lookup for a listed word is a memo) - # and for a tagged name word that reaches `name_source` or a + # reading the kind classify tagged) and for a tagged name word that reaches `name_source` or a # family word glued to the next (`_normalize`); three for a # suffix word nothing tags or lists (`suffix_kind`, then # `_listed_suffix` and its `_normalize`). `_vocab`'s two predicates diff --git a/tests/v2/pipeline/test_assemble.py b/tests/v2/pipeline/test_assemble.py index a9a16c83d..10dcddd1e 100644 --- a/tests/v2/pipeline/test_assemble.py +++ b/tests/v2/pipeline/test_assemble.py @@ -431,17 +431,25 @@ def test_every_suffix_words_reading_alternative_and_index_kind_agree( | lex.suffix_acronyms_ambiguous) assert len(words) > 800 mismatched = [] + reported = 0 for word in words: want = kinds.get(suffix_kind_of(word) or "", "post-nominal") taken = [t.reading.kind.value if t.reading else None for t in parse(f"John Smith {word}").tokens_for(Role.SUFFIX)] - not_taken = [a.alternative.kind.value - for a in parse(word).ambiguities + lone = parse(word).ambiguities + not_taken = [a.alternative.kind.value for a in lone if a.alternative is not None and a.alternative.role is Role.SUFFIX] - if taken != [want] or any(k != want for k in not_taken): + # a lone word reporting the suffix-or-name fork names the + # suffix reading it did not take, so the walk checks that + # reading rather than passing on an absent one + forked = any(a.kind is AmbiguityKind.SUFFIX_OR_NAME for a in lone) + reported += forked + if (taken != [want] or (forked and not not_taken) + or any(k != want for k in not_taken)): mismatched.append((word, want, taken, not_taken)) assert not mismatched, mismatched[:10] + assert reported > 0 # -- Reading.languages (3.0, 4a's follow-up): the files holding it ------ diff --git a/tests/v2/rules_budget.json b/tests/v2/rules_budget.json index 58aca858f..9541f2a2d 100644 --- a/tests/v2/rules_budget.json +++ b/tests/v2/rules_budget.json @@ -56,7 +56,7 @@ "R5": {"words": 250, "then_words": 154, "because_sentences": 2, "except": 0, "precedence": 0, "accepted": 0, "accepted_words": 0}, "R6": {"words": 400, "then_words": 265, "because_sentences": 2, "except": 1, "precedence": 0, "accepted": 5, "accepted_words": 289}, "R7": {"words": 142, "then_words": 30, "because_sentences": 2, "except": 0, "precedence": 1, "accepted": 2, "accepted_words": 74}, - "R8": {"words": 163, "then_words": 61, "because_sentences": 3, "except": 1, "precedence": 0, "accepted": 6, "accepted_words": 254}, + "R8": {"words": 163, "then_words": 61, "because_sentences": 3, "except": 1, "precedence": 0, "accepted": 7, "accepted_words": 291}, "S1": {"words": 306, "then_words": 26, "because_sentences": 1, "except": 2, "precedence": 3, "accepted": 0, "accepted_words": 0}, "S2": {"words": 657, "then_words": 119, "because_sentences": 1, "except": 0, "precedence": 7, "accepted": 3, "accepted_words": 222}, "S3": {"words": 960, "then_words": 398, "because_sentences": 3, "except": 4, "precedence": 5, "accepted": 6, "accepted_words": 343}, diff --git a/tests/v2/test_types.py b/tests/v2/test_types.py index e763ed082..7c94af88b 100644 --- a/tests/v2/test_types.py +++ b/tests/v2/test_types.py @@ -333,10 +333,15 @@ def test_derived_views_filter_on_stable_particle_tag() -> None: ("Smith, John, Jr.; MD", "Jr.;", "MD"), ("John Smith, III; MD", "III;", "MD"), ("John Smith, V; MD", "V;", "MD"), + # a control: no generation word carries the delimiter, so this + # read alike before the glued stem's kind was read ("John Smith, MD; Jr.", "Jr.", "MD;"), - # before the first comma C10 reads the delimiter as the word's, so - # the word is no generation word there (rules/R8's Accepted) + # a word read by its period-joined chunks ('Jr.' and ';', as + # 'Lt.Gov.' is read) has no kind of its own, so it is a credential, + # one made only of generation words included (rules/R8's Accepted) ("John Smith Jr.; MD", "", "Jr.; MD"), + ("John Smith Jr.III", "", "Jr.III"), + ("John Smith, Jr.III", "", "Jr.III"), # an agnomen is a generation; an honorific, a credential ("Pedro Alves Filho", "Filho", ""), ("王小明先生", "", "先生"), diff --git a/tools/differential/corpus_rules.jsonl b/tools/differential/corpus_rules.jsonl index 19e9f87ae..09f2fa996 100644 --- a/tools/differential/corpus_rules.jsonl +++ b/tools/differential/corpus_rules.jsonl @@ -438,6 +438,8 @@ "John Smith Jr., Sir AD" "John Smith Jr., þingmaður" "John Smith Jr.; MD" +"John Smith Jr.III" +"John Smith Jr; MD" "John Smith K.C." "John Smith M. D." "John Smith M.A." @@ -519,6 +521,7 @@ "John Smith, Jr., abdul Dr. Smith" "John Smith, Jr., van der Berg Prof." "John Smith, Jr.; MD" +"John Smith, Jr.III" "John Smith, LEED AP" "John Smith, M. D." "John Smith, M.D./Ph.D." diff --git a/tools/differential/snapshot.jsonl b/tools/differential/snapshot.jsonl index ac55d6019..802bd8eb2 100644 --- a/tools/differential/snapshot.jsonl +++ b/tools/differential/snapshot.jsonl @@ -1742,6 +1742,8 @@ {"name": "John Smith Jr., Sir AD", "title": "Sir", "given": "John", "family": "Smith", "suffix": "Jr., AD", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "generation": "Jr.", "credentials": "AD"} {"name": "John Smith Jr., þingmaður", "given": "John", "family": "Smith", "suffix": "Jr., þingmaður", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S.", "capitalized_force": "John Smith Jr., Þingmaður", "generation": "Jr.", "credentials": "þingmaður"} {"name": "John Smith Jr.; MD", "given": "John", "family": "Smith", "suffix": "Jr.; MD", "initials": "J. S."} +{"name": "John Smith Jr.III", "given": "John", "family": "Smith", "suffix": "Jr.III", "initials": "J. S.", "capitalized_force": "John Smith Jr.Iii"} +{"name": "John Smith Jr; MD", "given": "John", "middle": "Smith", "family": "Jr;", "suffix": "MD", "initials": "J. S. J."} {"name": "John Smith K.C.", "given": "John", "middle": "Smith", "family": "K.C.", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: credential as suffix (shape)"], "initials": "J. S. K."} {"name": "John Smith M. D.", "given": "John", "middle": "Smith M.", "family": "D.", "initials": "J. S. M. D."} {"name": "John Smith M.A.", "given": "John", "family": "Smith", "suffix": "M.A.", "initials": "J. S."} @@ -1838,6 +1840,7 @@ {"name": "John Smith, Jr., abdul Dr. Smith", "title": "Dr.", "given": "John", "family": "Smith", "suffix": "Jr., abdul Smith", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "capitalized_force": "Dr. John Smith, Jr., Abdul Smith", "generation": "Jr.", "credentials": "abdul Smith"} {"name": "John Smith, Jr., van der Berg Prof.", "title": "Prof.", "given": "John", "family": "Smith", "suffix": "Jr., van der Berg", "ambiguities": ["COMMA_STRUCTURE"], "initials": "J. S.", "capitalized_force": "Prof. John Smith, Jr., Van Der Berg", "generation": "Jr.", "credentials": "van der Berg"} {"name": "John Smith, Jr.; MD", "given": "John", "family": "Smith", "suffix": "Jr.; MD", "initials": "J. S.", "generation": "Jr.;", "credentials": "MD"} +{"name": "John Smith, Jr.III", "given": "John", "family": "Smith", "suffix": "Jr.III", "initials": "J. S.", "capitalized_force": "John Smith, Jr.Iii"} {"name": "John Smith, LEED AP", "given": "John", "family": "Smith", "suffix": "LEED AP", "ambiguities": ["SUFFIX_OR_NAME"], "alternatives": ["SUFFIX_OR_NAME: name as given (position)"], "initials": "J. S."} {"name": "John Smith, M. D.", "given": "M.", "middle": "D.", "family": "John Smith", "initials": "M. D. J. S."} {"name": "John Smith, M.D./Ph.D.", "given": "John", "family": "Smith", "suffix": "M.D./Ph.D.", "initials": "J. S."}