Перейти к содержанию

Извлечение названий месторождений

Извлечение месторождений --- вспомогательный алгоритм, который определяет, какие месторождения упоминаются в тексте документа. Алгоритм работает по ключевым словам и не зависит от языковой модели Claude.

Подробное описание модуля oilfield_utils.py --- в разделе Извлечение месторождений.

Зачем нужен отдельный алгоритм

При обработке документов языковая модель Claude тоже извлекает названия месторождений. Однако модель иногда допускает ошибки:

  • указывает месторождение, которого нет в тексте (галлюцинация);
  • путает похожие названия;
  • пропускает упоминание, если оно записано нестандартно.

Поэтому результаты Claude используются только как вспомогательные. Окончательным источником истины служит поиск по ключевым словам в распознанном тексте документа. Если Claude указал месторождение, но ключевые слова не нашли подтверждения в тексте --- результат Claude отбрасывается.

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

Настройка ключевых слов

Список месторождений и их ключевых слов хранится в настройках программы (коллекция settings, документ app_settings, поле oilfields). Каждая запись содержит:

  • name --- каноническое название месторождения;
  • keywords --- список слов или фрагментов для поиска.

Пример:

[
    {"name": "им. Ю.Корчагина", "keywords": ["корчагин", "korchagin"]},
    {"name": "Филановского", "keywords": ["филановск", "filanovsk"]}
]

Настройки редактируются через экран «Настройки» в интерфейсе программы. Достаточно одного совпавшего ключевого слова, чтобы месторождение считалось найденным.

Алгоритм поиска

Шаг 1: подготовка текста

Текст документа приводится к нижнему регистру. Это исходный текст от сервиса оптического распознавания (Google Cloud Vision), а не результат Claude --- потому что именно распознанный текст наиболее точно отражает содержимое документа.

Шаг 2: поиск по ключевым словам

Для каждого месторождения перебираются его ключевые слова. Каждое слово ищется в тексте регулярным выражением с учётом границ слов:

(?<![а-яёa-z]) + ключевое_слово + (?![а-яёa-z])

Это означает, что перед и после ключевого слова не должно быть буквы (кириллической или латинской). Такое условие предотвращает ложные совпадения:

  • Волга не сработает на слове Волгоград;
  • корчагин сработает на Корчагина (после а нет буквы --- конец слова) и на им.Корчагина (перед к стоит точка, а не буква).

Шаг 3: досрочный выход

Как только хотя бы одно ключевое слово месторождения найдено, каноническое название месторождения добавляется в результат. Остальные ключевые слова этого месторождения не проверяются --- это экономит время при большом списке синонимов.

Шаг 4: результат

Результат --- список канонических названий найденных месторождений (без повторов).

Место в процессе обработки

Функция run_postprocessing вызывается после распознавания документа через Claude и выполняет две операции:

  1. Извлекает месторождения из исходного текста.
  2. Записывает результат в поле from_postprocess.oilfields документа.

Постобработка выполняется всегда, независимо от того, что нашёл Claude. Если Claude указал месторождение, но ключевые слова не обнаружили его в тексте --- результат Claude отбрасывается. Если Claude ничего не указал, но ключевые слова нашли упоминание --- месторождение добавляется.

Порядок приоритетов:

Ключевые слова нашли → результат принимается
Ключевые слова не нашли, Claude нашёл → результат отбрасывается
Ни ключевые слова, ни Claude → поле остаётся пустым

Пример

Настройки:

[
    {"name": "им. Ю.Корчагина", "keywords": ["корчагин", "korchagin"]},
    {"name": "Филановского", "keywords": ["филановск", "filanovsk"]}
]

Текст документа:

устройство месторождения им.Ю.Корчагина (1 очередь)

Результат: ["им. Ю.Корчагина"]

Слово корчагин найдено (корчагина --- совпадение, потому что после а нет буквы). Ключевые слова месторождения Филановского не найдены.

Связь с другими подсистемами

  • Распознавание через Claude (подробнее) --- Claude получает список месторождений в подсказке и пытается найти их в содержимом. Результаты Claude сохраняются в from_content.oilfields и используются только если подтверждены постобработкой.
  • Партионная обработка (подробнее) --- постобработка вызывается автоматически после получения результатов пакетного сервиса.
  • Настройки программы (подробнее) --- список месторождений и ключевых слов управляется через серверный маршрут настроек.