1. Введение
Материалы о серийных преступлениях содержат значительный объем неструктурированных сведений. Даты эпизодов распределены по тексту приговоров, экспертиз и архивных документов, записаны в разных форматах и могут задаваться приблизительно: месяцем, диапазоном месяцев или словесным периодом. Ручной поиск занимает много времени и повышает риск пропусков, дублирования и ошибочного включения служебных дат.
Дополнительная задача состоит в сопоставлении календарных событий с повторяющимися процессами. Визуализация временных данных переводит разрозненную хронологию в форму, удобную для поиска концентраций и повторяемости [5, с. 11–31]. При этом статистическое совпадение не следует трактовать как причинность: программа должна помогать проверять гипотезы и сохранять возможность экспертной проверки исходных фрагментов.
Цель работы — создать автономное средство, которое загружает документы, извлекает и позволяет исправлять даты, строит циклические графики и формирует осторожный статистический вывод. Требуются поддержка TXT, DOCX, JPG, PNG и BMP, предобработка изображений, контекстное отделение дат преступлений от дат приговоров и экспертиз, работа с точками и интервалами, а также быстрое обновление результатов после ручной корректировки.
2. Аналоги и требования
В качестве аналогов рассмотрены SAS Visual Analytics, Microsoft Power BI, Tableau Desktop и KNIME Analytics Platform [1–4]. Эти решения обладают развитыми средствами отчетности и анализа временных рядов, однако обычно предполагают, что даты уже размещены в таблице или базе данных. Извлечение событий из юридического текста и распознавание сканов отсутствуют либо требуют отдельного конвейера и настройки внешних компонентов.
SAS и Tableau ориентированы преимущественно на корпоративную инфраструктуру; Power BI доступнее, но контекстная классификация дат и циклические модели требуют программирования. KNIME позволяет собрать такой процесс из узлов, однако рабочий поток остается сложным для непрофильного пользователя. Поэтому специализированное приложение строится как единый сценарий: загрузка документа, проверка дат, расчет и просмотр графиков.
На обычном пользовательском компьютере текстовый документ объемом до 200 страниц должен обрабатываться не более 30 секунд, изображение с OCR — не более двух минут. Пакет из десяти файлов не должен нарушать устойчивость приложения. Расчет фаз и построение четырех графиков для набора до 1000 событий должны занимать не более пяти секунд, а ручные изменения — отображаться без заметной задержки.
3. Методы обработки данных
Алгоритм состоит из независимых этапов. Система проверяет расширение файла и выбирает обработчик: TXT читается напрямую, содержимое DOCX извлекается средствами Open XML SDK [8], а изображения передаются в OCR-подсистему. Тексты объединяются, затем парсер формирует единый список событий, удаляет дубли и сохраняет связь каждого результата с исходным фрагментом.
3.1. OCR и нормализация
Перед распознаванием выполняются масштабирование, выравнивание наклона, шумоподавление, повышение локального контраста и адаптивная бинаризация. Используются Tesseract и OpenCvSharp [9; 10]. Несколько вариантов предобработки могут распознаваться параллельно; лучший результат выбирается по доле допустимых символов, количеству словарных токенов и наличию фрагментов, похожих на даты.
Нормализация удаляет невидимые символы и повторные пробелы, объединяет разорванные элементы даты и исправляет типичные OCR-ошибки. Например, кириллическая «О» в числовом окружении заменяется на ноль. Исходный текст не изменяется: нормализованная копия используется только для анализа, чтобы спорный результат можно было проверить по документу.
3.2. Контекстное извлечение дат
Парсер сочетает регулярные выражения и эвристики. Он находит числовые и словесные даты, неполные годы, конструкции «в начале месяца», «с марта по май» и другие интервалы. Затем оценивается контекстное окно. Маркеры «совершил», «напал», «эпизод», «потерпевший» повышают вероятность включения кандидата, а слова «приговор», «экспертиза», «постановление», «судимость» и «регистрация» понижают ее.
Дата рождения извлекается отдельным правилом. Неопределенное время сохраняется как объект периода с начальной и конечной датой; обратный диапазон автоматически нормализуется. Пользователь видит не только итоговую дату, но и фрагмент, на основании которого она распознана, и может добавить, изменить либо удалить событие.
3.3. Циклические координаты и статистика
Для каждого события вычисляется число суток от даты рождения. Затем календарная координата преобразуется в фазу цикла. Используются условные периоды 23, 28 и 33 дня и средняя продолжительность лунного цикла 29,530588853 дня. Для события i и периода T фаза определяется выражением:
φᵢ = 2π · ((dᵢ − d₀) mod T) / T,
где dᵢ — дата события, d₀ — дата рождения, T — период. Амплитуда равна sin φᵢ. Приведение к одному периоду позволяет совместно рассматривать события разных лет. Точечная дата отображается маркером, небольшой интервал — двумя маркерами и отрезком; слишком длинный диапазон помечается как непригодный для оценки локальной концентрации.
Равномерность фаз проверяется тестом Рэлея, применяемым в круговой статистике [6, с. 94–101; 7, с. 33–49]. При числе событий менее пяти программа сообщает о недостаточности данных. В остальных случаях рассчитывается p-значение и формируется формулировка о наличии либо отсутствии статистически заметной концентрации. Дополнительно оценивается плотность событий по скользящим окнам. Результат остается исследовательским индикатором, поскольку на него влияют полнота выборки, ошибки OCR и множественная проверка циклов.
4. Реализация и интерфейс
Программа разработана на C# и.NET [8]. Windows Forms обеспечивает автономный интерфейс, Open XML SDK используется для DOCX, Tesseract и OpenCvSharp — для OCR и обработки изображений, ScottPlot — для графиков [9–11]. Архитектура разделена на сервис документов, OCR-модуль, парсер, анализатор циклов и слой интерфейса. Такое разделение упрощает модульное тестирование и добавление новых форматов.
Основная форма объединяет работу в одном окне: справа размещены загрузка документов, список дат, команды добавления, удаления и очистки и поле даты рождения; в центре — четыре графические панели и краткие выводы. Интерфейс рассчитан на черно-белую печать: смысл передается подписями, формой линий и маркеров, а не только цветом.
Рис. 1. Четыре циклических графика и результаты анализа
5. Тестирование и результаты
Испытания проведены на модульном, интеграционном и интерфейсном уровнях средствами MSTest [12]. Модульные тесты проверяли разбор дат и диапазонов, фильтрацию служебных дат, преобразование фаз и тест Рэлея. Интеграционные сценарии охватывали выбор обработчика, передачу TXT и DOCX в парсер, взаимодействие OCR с предобработкой, объединение результатов и продолжение пакетной обработки при ошибке одного файла. Интерфейсные испытания проверяли загрузку, ручное редактирование, отмену выбора и блокировку расчета при отсутствии входных данных.
Таблица 1
Сводные результаты испытаний
|
Уровень |
Проверяемые функции |
Результат |
|
Модульный |
Парсер, даты и интервалы, фазы, статистика |
Сценарии пройдены |
|
Интеграционный |
Файлы, OCR, объединение результатов |
Сценарии пройдены |
|
Интерфейсный |
Загрузка, редактирование, запуск анализа |
Сценарии пройдены |
|
Итог |
Совместное покрытие исходного кода |
73,5 % |
Все предусмотренные сценарии завершились успешно, совокупное покрытие кода составило 73,5 %. Испытания выявили потерю части дат в коротких списках, неверную замену кириллической «О» и попадание сносок в анализируемый текст. Ошибки исправлены и закреплены повторяемыми тестами. Для практического применения необходимы дополнительные испытания на обезличенном корпусе документов, расчет precision и recall для извлечения дат, проверка OCR на разных типах сканов и оценка статистических ошибок при множественном сравнении.
6. Заключение
Разработано автономное программное средство, объединяющее извлечение текста, контекстное распознавание дат, ручную корректировку, циклическую визуализацию и оценку фазовой концентрации. В отличие от универсальных BI-платформ, система принимает неструктурированные документы и изображения и не требует предварительного формирования таблиц.
Испытания подтвердили работоспособность модулей обработки документов, OCR, парсера, расчетной части и интерфейса. Дальнейшее развитие связано с расширением правил для юридических текстов, поддержкой дополнительных форматов, вероятностной оценкой кандидатов, автоматическим отчетом и более строгой коррекцией статистической значимости. Окончательная интерпретация результатов должна оставаться за специалистом.
Литература:
- SAS Visual Analytics [Электронный ресурс] // SAS. URL: https://www.sas.com/en_us/software/visual-analytics.html (дата обращения: 15.12.2025).
- Microsoft Power BI [Электронный ресурс] // Microsoft. URL: https://www.microsoft.com/ru-ru/power-platform/products/power-bi (дата обращения: 15.12.2025).
- Tableau Desktop [Электронный ресурс] // Tableau. URL: https://www.tableau.com/products/desktop (дата обращения: 15.12.2025).
- KNIME Analytics Platform [Электронный ресурс] // KNIME. URL: https://www.knime.com/knime-analytics-platform (дата обращения: 15.12.2025).
- Aigner W., Miksch S., Schumann H., Tominski C. Visualization of Time-Oriented Data. 2nd ed. Cham: Springer Nature, 2023.
- Mardia K. V., Jupp P. E. Directional Statistics. 2nd ed. Chichester: John Wiley & Sons, 2000. 429 p.
- Jammalamadaka S. R., Sengupta A. Topics in Circular Statistics. Singapore: World Scientific, 2001. 322 p.
- C# and Open XML SDK documentation [Электронный ресурс] // Microsoft Learn. URL: https://learn.microsoft.com/ (дата обращения: 05.05.2026).
- Tesseract OCR Documentation [Электронный ресурс]. URL: https://tesseract-ocr.github.io/ (дата обращения: 05.05.2026).
- OpenCvSharp Documentation [Электронный ресурс]. URL: https://shimat.github.io/opencvsharp/ (дата обращения: 05.05.2026).
- ScottPlot. Plotting Library for.NET [Электронный ресурс]. URL: https://scottplot.net/ (дата обращения: 05.05.2026).
- MSTest overview [Электронный ресурс] // Microsoft Learn. URL: https://learn.microsoft.com/en-us/dotnet/core/testing/unit-testing-mstest-intro (дата обращения: 05.05.2026).

