addrkit: quality evaluation harness + parser hardening
- add internal/eval: deterministic citizen-style perturbation harness (typos, case, word order, abbreviations, filler words, dropped units) - parser: strip all street-type tokens, filler words (город/дом/д/область), trailing apartment (кв N); handle letter-before-fraction and corpus letters - matching: token-aware typo-tolerant street similarity; wider ambiguity margin to surface near-collisions instead of guessing - seed: correct parse-rate accounting, structure-aware de-duplication - CLI: 'addrkit eval' command; README with measured results Measured on the real 73,936-row registry: 99.98% parsed, 0 wrong-house safety violations across 34k+ perturbed cases.
This commit is contained in:
@@ -77,6 +77,24 @@ func TestParseHouseBlock(t *testing.T) {
|
||||
wantOrdinal: "1", wantName: "ельцовка", wantType: "улица",
|
||||
wantHouse: "1", wantBLetter: "д", wantHas: true,
|
||||
},
|
||||
{
|
||||
name: "two type words in a registry name",
|
||||
raw: "Гусинобродский Тракт улица 21",
|
||||
wantName: "гусинобродский", wantType: "тракт",
|
||||
wantHouse: "21", wantHas: true,
|
||||
},
|
||||
{
|
||||
name: "name coincides with its type word",
|
||||
raw: "Набережная улица 5",
|
||||
wantName: "набережная", wantType: "набережная",
|
||||
wantHouse: "5", wantHas: true,
|
||||
},
|
||||
{
|
||||
name: "abbreviations dom and flat",
|
||||
raw: "ул. Кошурникова, д. 11/1 кв. 5",
|
||||
wantName: "кошурникова", wantType: "улица",
|
||||
wantHouse: "11", wantFrac: "1", wantHas: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
|
||||
Reference in New Issue
Block a user