<commit_before>from enum import Enum
from natasha.grammars.base import TERM


MONTH_DICTIONARY = {
    'январь',
    'февраль',
    'март',
    'апрель',
    'май',
    'июнь',
    'июль',
    'август',
    'сентябрь',
    'октябрь',
    'ноябрь',
    'декабрь',
}

DAY_OF_WEEK_DICTIONARY = {
    'понедельник',
    'вторник',
    'среда',
    'четверг',
    'пятница',
    'суббота',
    'воскресенье',
}

PARTIAL_DATE_DICTIONARY = {
    'начало',
    'середина',
    'конец',
}

TIME_WORD_DICTIONARY = {
    'утро',
    'полдень',
    'вечер',
    'ночь',
}

DAY_GRAMMAR = ('int', {
    'labels': [
        ('gte', 1),
        ('lte', 31),
    ],
})

MONTH_GRAMMAR = ('word', {
    'labels': [
        ('dictionary', MONTH_DICTIONARY),
    ],
})

DAY_OF_WEEK_GRAMMAR = ('word', {
    'labels': [
        ('dictionary', DAY_OF_WEEK_DICTIONARY),
    ],
})

YEAR_GRAMMAR = ('int', {
    'labels': [
        ('gte', 1),
    ],
})

YEAR_FLOAT_GRAMMAR = ('float', {
    'labels': [
        ('gte', 0.0),
    ],
})

YEAR_SUFFIX_GRAMMAR = ('word', {
    'labels': [
        ('dictionary', {'год', })
    ],
})

PARTIAL_DATE_GRAMMAR = ('word', {
    'labels': [
        ('dictionary', PARTIAL_DATE_DICTIONARY),
    ],
})

class Date(Enum):

    Full = (
        DAY_GRAMMAR,
        MONTH_GRAMMAR,
        YEAR_GRAMMAR,
        TERM,
    )

    FullWithDigits = (
        DAY_GRAMMAR,
        ('int', {
            'labels': [
                ('gte', 1),
                ('lte', 12),
            ],
        }),
        YEAR_GRAMMAR,
        TERM,
    )

    DayAndMonth = (
        DAY_GRAMMAR,
        MONTH_GRAMMAR,
        TERM,
    )

    Year = (
        YEAR_GRAMMAR,<commit_msg>Add optional punctuation to full date with digits rule<commit_after>from enum import Enum
from natasha.grammars.base import TERM


MONTH_DICTIONARY = {
    'январь',
    'февраль',
    'март',
    'апрель',
    'май',
    'июнь',
    'июль',
    'август',
    'сентябрь',
    'октябрь',
    'ноябрь',
    'декабрь',
}

DAY_OF_WEEK_DICTIONARY = {
    'понедельник',
    'вторник',
    'среда',
    'четверг',
    'пятница',
    'суббота',
    'воскресенье',
}

PARTIAL_DATE_DICTIONARY = {
    'начало',
    'середина',
    'конец',
}

TIME_WORD_DICTIONARY = {
    'утро',
    'полдень',
    'вечер',
    'ночь',
}

DAY_GRAMMAR = ('int', {
    'labels': [
        ('gte', 1),
        ('lte', 31),
    ],
})

MONTH_GRAMMAR = ('word', {
    'labels': [
        ('dictionary', MONTH_DICTIONARY),
    ],
})

DAY_OF_WEEK_GRAMMAR = ('word', {
    'labels': [
        ('dictionary', DAY_OF_WEEK_DICTIONARY),
    ],
})

YEAR_GRAMMAR = ('int', {
    'labels': [
        ('gte', 1),
    ],
})

YEAR_FLOAT_GRAMMAR = ('float', {
    'labels': [
        ('gte', 0.0),
    ],
})

YEAR_SUFFIX_GRAMMAR = ('word', {
    'labels': [
        ('dictionary', {'год', })
    ],
})

PARTIAL_DATE_GRAMMAR = ('word', {
    'labels': [
        ('dictionary', PARTIAL_DATE_DICTIONARY),
    ],
})

class Date(Enum):

    Full = (
        DAY_GRAMMAR,
        MONTH_GRAMMAR,
        YEAR_GRAMMAR,
        TERM,
    )

    FullWithDigits = (
        DAY_GRAMMAR,
        ('punct', {'optional': True}),
        ('int', {
            'labels': [
                ('gte', 1),
                ('lte', 12),
            ],
        }),
        ('punct', {'optional': True}),
        YEAR_GRAMMAR,
        TERM,
    )

    DayAndMonth = (
        DAY_GRAMMAR,
        MONTH_GRAMMAR,
        TERM,
    )

    Year = (
        YEAR_GRAMMAR,
{'fraction_non_alphanumeric': 0.1772661870503597, 'fraction_numerical': 0.005179856115107914, 'mean_word_length': 1.8609053497942387, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4299128', 'n_tokens_mistral': 1513, 'n_tokens_neox': 1427, 'n_words': 209}