feat: интеграция LLAIM Legal NER как третьей ступени распознавания
- Подключение ru-legal-ner (ONNX) для юридических реквизитов: ИНН, ОГРН, СНИЛС, паспорт, телефон, email, банковский счёт, дата. - Отдельный проход LEGAL_CANDIDATE, чтобы не вытеснять кандидатов имён и адресов. - coversAny(policy) в Pipeline вместо проверки только FIO. - Нормализация цифровых ПД (ИНН/СНИЛС/карта/ОГРН) в свободной форме. - Фикс ложного срабатывания ФИО на аббревиатуре «ИНН» (PD_MARKERS). - Рефакторинг конструкторов NameCascade через record EngineConfig (Sonar S107).
This commit is contained in:
@@ -83,6 +83,15 @@ public final class NameDictionary {
|
||||
.map(stem -> stem.toLowerCase(Locale.ROOT))
|
||||
.collect(Collectors.toUnmodifiableSet());
|
||||
|
||||
/**
|
||||
* Слова-маркеры персональных данных и реквизитов, которые по словообразованию
|
||||
* совпадают с основами имён («ИНН» — основа имени «Инна») и потому ложно
|
||||
* распознаются как ФИО. Это аббревиатуры, а не имена.
|
||||
*/
|
||||
private static final Set<String> PD_MARKERS = Set.of(
|
||||
"инн", "снилс", "огрн", "огрнип", "кпп", "бик", "паспорт", "счёт", "счет",
|
||||
"телефон", "email", "почта", "дата", "адрес", "полис", "свидетельство", "ву");
|
||||
|
||||
private NameDictionary() {
|
||||
}
|
||||
|
||||
@@ -163,6 +172,9 @@ public final class NameDictionary {
|
||||
*/
|
||||
public static boolean isStandaloneNameCandidate(String word) {
|
||||
String lower = word.toLowerCase(Locale.ROOT);
|
||||
if (PD_MARKERS.contains(lower)) {
|
||||
return false;
|
||||
}
|
||||
if (GIVEN_NAMES.contains(lower)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user