feat: validate ADDRESS_CITY against a real city dictionary
The rule matched any capitalized word after "г."/"город" — no check
that it's an actual place. ToponymDictionary checks the match against
1111 Russian cities (pensnarik/russian-cities) plus CIS capitals,
matching by stem so declined forms work ("Москве" against "Москва").
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
a758c5ef05
commit
f7eee7577c
@@ -0,0 +1,42 @@
|
||||
package ru.pdguard.detect;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
/** Словарь городов — проверка вместо любого слова с заглавной буквы после «г.». */
|
||||
class ToponymDictionaryTest {
|
||||
|
||||
@Test
|
||||
void recognisesNominativeCase() {
|
||||
assertTrue(ToponymDictionary.isKnownCity("Москва"));
|
||||
assertTrue(ToponymDictionary.isKnownCity("Казань"));
|
||||
assertTrue(ToponymDictionary.isKnownCity("Санкт-Петербург"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void recognisesInflectedForms() {
|
||||
assertTrue(ToponymDictionary.isKnownCity("Москве"), "дательный падеж города на гласную");
|
||||
assertTrue(ToponymDictionary.isKnownCity("Тамбове"), "предложный падеж города на согласную");
|
||||
assertTrue(ToponymDictionary.isKnownCity("Казани"), "родительный падеж");
|
||||
}
|
||||
|
||||
@Test
|
||||
void recognisesCisCapitals() {
|
||||
assertTrue(ToponymDictionary.isKnownCity("Минск"));
|
||||
assertTrue(ToponymDictionary.isKnownCity("Алматы"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void rejectsMadeUpWord() {
|
||||
assertFalse(ToponymDictionary.isKnownCity("Ерунда"));
|
||||
assertFalse(ToponymDictionary.isKnownCity("Бла-бла"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void isCaseInsensitive() {
|
||||
assertTrue(ToponymDictionary.isKnownCity("МОСКВА"));
|
||||
assertTrue(ToponymDictionary.isKnownCity("москва"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user