perf: не звать legal-модель на каждое слово текста

LEGAL_CANDIDATE сужен до цифровых кластеров (ИНН, СНИЛС, паспорт, телефон,
банковский счёт) и email. Раньше в него входили и слова, из-за чего модель
LLAIM Legal NER вызывалась на каждое слово до maxCandidates раз. Имена (PER)
размечает модель имён, email — правила, поэтому слова из кандидата убраны.
This commit is contained in:
dakocha3
2026-09-24 00:01:46 +03:00
parent c022806bf2
commit d4de78be7a
@@ -93,14 +93,16 @@ public class NameCascade {
Pattern.UNICODE_CHARACTER_CLASS | Pattern.UNICODE_CASE);
/**
* Кандидат для LLAIM Legal NER: одиночное слово или цифровой кластер (10–19 цифр с
* разделителями). Юридические реквизиты (ИНН, СНИЛС, паспорт) не являются словами с заглавной
* буквы, поэтому для них нужен отдельный проход, не влияющий на кандидатов моделей имён и
* адресов.
* Кандидат для LLAIM Legal NER: цифровой кластер (10–19 цифр с разделителями) или
* адрес электронной почты. Юридические реквизиты (ИНН, СНИЛС, паспорт, телефон,
* банковский счёт) — это цифры, а не слова с заглавной буквы, поэтому отдельный
* проход не влияет на кандидатов моделей имён и адресов. Имена (PER) размечает
* модель имён, email — правила, так что слова сюда не включаются: иначе модель
* звалась бы на каждое слово текста.
*/
private static final Pattern LEGAL_CANDIDATE =
Pattern.compile(
"(?:\\p{Lu}[\\p{L}-]+|\\p{Ll}[\\p{L}-]+|\\d(?:[\\s.\\-/()]?\\d){9,18})",
"(?:\\d(?:[\\s.\\-/()]?\\d){9,18}|[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,})",
Pattern.UNICODE_CHARACTER_CLASS | Pattern.UNICODE_CASE);
/** Приоритет находок второй ступени: ниже правил, у которых больше оснований. */