feat(normalizer): alias index with maiden/married/nickname resolution
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import config
|
||||
import persons
|
||||
|
||||
def test_slugify():
|
||||
@@ -52,3 +53,21 @@ def test_split_receivers():
|
||||
def test_find_known_last_name():
|
||||
assert persons.find_known_last_name("Eugenie de Gruyter") == "de Gruyter"
|
||||
assert persons.find_known_last_name("Clara") is None
|
||||
|
||||
def test_alias_index_resolves_maiden_and_married():
|
||||
people = persons.parse_register([
|
||||
{"last_name": "de Gruyter", "first_name": "Eugenie", "maiden_name": "Müller"},
|
||||
{"last_name": "Cram", "first_name": "Clara"},
|
||||
])
|
||||
idx = persons.AliasIndex(people)
|
||||
eugenie = people[0].person_id
|
||||
assert idx.resolve("Eugenie de Gruyter") == eugenie # canonical
|
||||
assert idx.resolve("Eugenie Müller") == eugenie # maiden alias
|
||||
assert idx.resolve("eugenie müller") == eugenie # normalized
|
||||
assert idx.resolve("Nobody Unknown") is None
|
||||
|
||||
def test_alias_index_suggestion():
|
||||
people = persons.parse_register([{"last_name": "Wittkopf", "first_name": "Hans"}])
|
||||
idx = persons.AliasIndex(people)
|
||||
sid, score = idx.suggest("Hans Wittkop") # typo
|
||||
assert sid == people[0].person_id and score >= config.FUZZY_SUGGEST_THRESHOLD
|
||||
|
||||
Reference in New Issue
Block a user