Распознать дату прописью

Мне необходимо обеспечить распознавание дат прописью с помощью ner-системы (сейчас используется natasha).

То есть, есть текст даты "двадцать восьмое февраля две тысячи первого года" и нужно извлечь эту дату. Как это можно сделать?

Пример, который не дает нужный результат (блок кода не находит данных):

matches = dates_extractor(doc.text)
v_dt_cnt = 0
for val in matches:
    obj_t = val.fact
    print(' Date', v_dt_cnt)

Update: пример кода, который можно запустить

from natasha import (
    MorphVocab,
    DatesExtractor
)

morph_vocab = MorphVocab()
dates_extractor = DatesExtractor(morph_vocab)
for text in ("28 февраля 2001 года",
             "двадцать восьмое февраля 2001", 
             "28 февраля две тысячи первого года", 
             "двадцать восьмое февраля две тысячи первого года"):
    print(text)
    for date in dates_extractor(text):
        print(date)
    print('---')

Вывод:

28 февраля 2001 года
Match(start=0, stop=20, fact=Date(year=2001, month=2, day=28))
---
двадцать восьмое февраля 2001
Match(start=17, stop=29, fact=Date(year=2001, month=2, day=None))
---
28 февраля две тысячи первого года
Match(start=0, stop=10, fact=Date(year=None, month=2, day=28))
---
двадцать восьмое февраля две тысячи первого года
---

Ответы (1 шт):

Автор решения: Алексей Сундеев
from natasha import MorphVocab, DatesExtractor
from word2number import w2n
import re

# Функция для замены чисел прописью на числовые значения
def replace_words_with_numbers(text):
    words = text.split()
    for i, word in enumerate(words):
        try:
            # Преобразуем число прописью в числовое значение
            words[i] = str(w2n.word_to_num(word))
        except ValueError:
            # Если слово не число, просто оставляем его как есть
            pass
    return " ".join(words)

morph_vocab = MorphVocab()
dates_extractor = DatesExtractor(morph_vocab)

for text in ("28 февраля 2001 года",
             "двадцать восьмое февраля 2001", 
             "28 февраля две тысячи первого года", 
             "двадцать восьмое февраля две тысячи первого года"):
    
    # Преобразуем текст с числами прописью в числовые значения
    text_with_numbers = replace_words_with_numbers(text)
    
    print(f"Исходный текст: {text}")
    print(f"Текст с числовыми значениями: {text_with_numbers}")
    
    for date in dates_extractor(text_with_numbers):
        print(date)
    print('---')

Функция replace_words_with_numbers() заменяет числа, написанные прописью, на их числовые эквиваленты:

Исходный текст: 28 февраля 2001 года
Текст с числовыми значениями: 28 февраля 2001 года
Match(start=0, stop=20, fact=Date(year=2001, month=2, day=28))
---
Исходный текст: двадцать восьмое февраля 2001
Текст с числовыми значениями: 28 февраля 2001
Match(start=0, stop=20, fact=Date(year=2001, month=2, day=28))
---
Исходный текст: 28 февраля две тысячи первого года
Текст с числовыми значениями: 28 февраля 2001 года
Match(start=0, stop=20, fact=Date(year=2001, month=2, day=28))
---
Исходный текст: двадцать восьмое февраля две тысячи первого года
Текст с числовыми значениями: 28 февраля 2001 года
Match(start=0, stop=20, fact=Date(year=2001, month=2, day=28))
---
→ Ссылка