diff --git a/src/main/java/ru/pdguard/detect/NameCascade.java b/src/main/java/ru/pdguard/detect/NameCascade.java index 5ce2bbd..641a562 100644 --- a/src/main/java/ru/pdguard/detect/NameCascade.java +++ b/src/main/java/ru/pdguard/detect/NameCascade.java @@ -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); /** Приоритет находок второй ступени: ниже правил, у которых больше оснований. */