Извлечение названий месторождений¶
Извлечение месторождений --- вспомогательный алгоритм, который определяет, какие месторождения упоминаются в тексте документа. Алгоритм работает по ключевым словам и не зависит от языковой модели 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 и выполняет две операции:
- Извлекает месторождения из исходного текста.
- Записывает результат в поле
from_postprocess.oilfieldsдокумента.
Постобработка выполняется всегда, независимо от того, что нашёл Claude. Если Claude указал месторождение, но ключевые слова не обнаружили его в тексте --- результат Claude отбрасывается. Если Claude ничего не указал, но ключевые слова нашли упоминание --- месторождение добавляется.
Порядок приоритетов:
Ключевые слова нашли → результат принимается
Ключевые слова не нашли, Claude нашёл → результат отбрасывается
Ни ключевые слова, ни Claude → поле остаётся пустым
Пример¶
Настройки:
[
{"name": "им. Ю.Корчагина", "keywords": ["корчагин", "korchagin"]},
{"name": "Филановского", "keywords": ["филановск", "filanovsk"]}
]
Текст документа:
устройство месторождения им.Ю.Корчагина (1 очередь)
Результат: ["им. Ю.Корчагина"]
Слово корчагин найдено (корчагина --- совпадение, потому что после а нет буквы). Ключевые слова месторождения Филановского не найдены.
Связь с другими подсистемами¶
- Распознавание через Claude (подробнее) --- Claude получает список месторождений в подсказке и пытается найти их в содержимом. Результаты Claude сохраняются в
from_content.oilfieldsи используются только если подтверждены постобработкой. - Партионная обработка (подробнее) --- постобработка вызывается автоматически после получения результатов пакетного сервиса.
- Настройки программы (подробнее) --- список месторождений и ключевых слов управляется через серверный маршрут настроек.