УДК 004.422

Применение регулярных выражений для поиска исторических дат в тексте

Вахромеева Екатерина Николаевна – доцент кафедры автоматизированных систем обработки информации и управления, Российский государственный университет им. А.Н. Косыгина (Технологии. Дизайн. Искусство)

Аннотация: В данной статье исследуется применение регулярных выражений в Python для поиска и обработки исторических дат в текстовых документах. Регулярные выражения представляют собой мощный инструмент, позволяющий эффективно находить и извлекать информацию из текстов. Представлен ряд примеров для поиска  различных форматов дат в тексте. Важно отметить, что каждая конкретная ситуация может требовать своего подхода, и были  проиллюстрированы возможности регулярных выражений на конкретных примерах, которые позволят адаптировать и применять регулярные выражения в соответствии с уникальными требованиями своих проектов.

Ключевые слова: регулярные выражения, Python, поиск дат, обработка текста, проверка формата.

Регулярные выражения являются мощным и удобным инструментом для работы с текстами. Они позволяют искать и извлекать определенные паттерны в документах, что делает их неотъемлемой частью многих приложений и задач обработки текста. В данной статье будет рассмотрено использование регулярных выражений для поиска и проверки исторических дат в тексте.

Независимо от того, является ли текст исторической статьей, научным документом или даже разговорным текстом, правильное определение исторических дат имеет важное значение. Это может быть полезно для проверки правильности непосредственно указанных дат, а также для проверки правильного их написания, например в точности с определенными требованиями или шаблонами. Однако, вручную искать и проверять исторические даты в тексте может быть трудоемкой задачей, особенно при работе с большими объемами текстовых данных. В данном случае можно использовать регулярные выражения, которые позволяют сделать это эффективно и удобно. В результате использования регулярных выражений для поиска и проверки исторических дат, исследователи и специалисты получают удобный инструмент, позволяющий автоматизировать и упростить этот процесс.

Для анализа и обработки текста в языке программирования Python существует несколько способов загрузки текстовых данных. Работа с текстом в Python облегчается с использованием различных библиотек, таких как open() из стандартной библиотеки Python для файлов с расширением *.txt или можно воспользоваться модулем docx для файлов с расширением *.docx.

Пример:

from docx import Document

filename = "C:/lr3.docx"  # Путь к файлу .docx

doc = Document(filename)

text = ""

for paragraph in doc.paragraphs:

text += paragraph.text

print(text)  # Вывод содержимого документа .docx

В этом примере класс Document импортируется из библиотеки python-docx. Затем путь к файлу .docx указывается в переменной filename. Создаем объект doc, представляющий документ .docx, и используем цикл для прохода по абзацам документа и сбора текста в переменную text. При этом, нужно помнить, что для использования библиотеки python-docx, ее необходимо установить в среде разработки Python с помощью менеджера пакетов.

Далее, из полученного текста можно вычленить даты различного формата:

import re

text = "Текст документа с различными форматами дат, такими как: у нас есть такая дата - 1.1.20, вторая дата: 01.01.20. что-то еще -  1.02.2023. и наконец 01.01.2023."

pattern = r"\b(\d{1,2}\.\d{1,2}\.\d{2}(?:\d{2})?)\b|\b(\d{1,2}[\s\.-]?\w+[\s\.-]?(\d{4} год(?:а)?)?)\b|\b(\d{1,2}\.\d{1,2}(?:\.\d{2}|\b))\b"

dates = re.findall(pattern, text)

formatted_dates = [date[0] for date in dates]

print(formatted_dates)  # Вывод найденных дат в форматах "д.м.гг" или "д.м.гггг"

В этом примере мы применяем регулярное выражение, чтобы оно поддерживало форматы дат "д.м.гг" или "д.м.гггг".  Результат работы программы виден на рисунке 1.

 image001

Рисунок 1. Поиск дат формата "д.м.гг" или "д.м.гггг".

Так же, с помощью регулярных выражений можно искать и другие форматы дат:

import re

text = "Текст документа с различными форматами дат, такими как 2021г, 1980 год, или например 5 января 2021 года, или просто года: 2021-2022"

pattern = r"\b(\d{4}(?:г(?:од)?)?)\b|\b(\d{1,2} [\w\s]+ \d{4} года)\b|\b(\d{4}-\d{4})\b"

dates = re.findall(pattern, text)

formatted_dates = []

for date in dates:

    formatted_date = "".join(date).strip()

    formatted_dates.append(formatted_date)

print(formatted_dates)  # Вывод найденных дат

В этом примере (результат представлен на рисунке 2) в регулярном выражении для поиска дат есть несколько частей, разделенных символом | (вертикальная черта). Функция re.findall() используется для поиска всех соответствий регулярному выражению в тексте. В пустой список formatted_dates  будем добавлять отформатированные даты.

 image002

Рисунок 2. Поиск дат различных форматов.

Обработка дат в тексте может быть полезной для проверки правильности исторических данных, а также для автоматической обработки и анализа текстов с любым историческим контекстом. В Python для этих целей удобно использовать модули re (для регулярных выражений) и docx (для переноса текста). Данный подход позволяет значительно сократить время и усилия, которые требуются для ручного поиска и проверки дат.

Список литературы

  1. Жабин В.В. Реализация поисковых запросов на языке регулярных выражений. Вестник Тамбовского университета. Серия: Естественные и технические науки. 2012. Т. 17. № 1. С. 199-201.
  2. Сапаров А.Ю., Бельтюков А.П. Применение регулярных выражений в распознавании математических текстов. Вестник Удмуртского университета. Математика. Механика. Комп. науки. 2012. № 2. С.63-73.
  3. Михаил Купаев. Регулярные выражения. Журнал «Технология КлиентСервер». 2001.
  4. Фридл Дж. Регулярные выражения / пер. с англ.; 3-е изд. СПб.: Символ-плюс, 2008. 464 с.
  5. Форта Б. Регулярные выражения. – М.: ИД «Вильямс», 2005. – 184 с.

Интересная статья? Поделись ей с другими: