Matching methodology

Matching creates review candidates, not automated conclusions.

VeroFlag separates candidate retrieval, deterministic scoring, and reviewer decision-making. The matching layer explains why a record appeared, while the reviewer records the final outcome.

Shared Unicode normalization

Ingestion and query paths use the same normalizer. It applies Unicode NFKC normalization, lowercases names, folds Latin diacritics such as Müller to muller, preserves native-script letters such as Cyrillic, Arabic, and CJK, strips punctuation, and collapses whitespace.

Bounded candidate generation

Exact normalized names, token-order keys, surname gates, trigram search, and short edit-distance checks generate candidates. Weak aliases are not normal match drivers unless another signal supports review.

Deterministic reviewer scoring

Scores are deterministic and explainable. Country and date-of-birth support can raise confidence, while a date-of-birth year conflict applies a visible penalty and reviewer signal instead of silently hiding a candidate.

Evaluation coverage

The internal evaluation harness runs against the current promoted source graph from CI for matching-related changes. It requires at least 30 seeded cases and fails the workflow if live recall or precision drops below the configured gate.

Minimum cases

30

CI recall gate

>= 0.90

CI precision gate

>= 0.90

Exact LatinBoris Johnson, Vladimir Putin, Nicolás Maduro
Typo toleranceOlaf Scholze -> Olaf Scholz
Token orderPutin, Vladimir; Jinping Xi; Хаменеи, Али
Single tokenPutin; Gazprombank
DiacriticsJosé Eduardo dos Santos, Erdoğan, Raúl Castro
Native scriptВладимир Путин, 习近平, 習近平, بشار الأسد
Business entitiesBank Melli Iran, Gazprombank
Near false positivesOlaf Schulze must not resolve to Olaf Scholz
Wrong-entity guardrailsMaduro must not resolve to Putin

What reviewers see

Each candidate carries the matched source name, source list, source URLs, match signals, score, confidence band, supporting country or date-of-birth signals, and any date-of-birth conflict flag.

A strong match is still only a candidate until a reviewer confirms it, marks it not relevant, or leaves it pending. The case decision remains a separate human-controlled workflow step.

Native-script names are matched when the source data already includes the same script. Cross-script transliteration is a future enhancement and is not implied by the current normalizer.

Read API docs