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

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

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

Зачем нужен отдельный поиск

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

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

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

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

  • name --- каноническое название месторождения (например, им. Ю.Корчагина);
  • keywords --- список ключевых слов для поиска (например, ["корчагин", "korchagin"]).

Достаточно одного совпавшего ключевого слова, чтобы месторождение считалось найденным.

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

Функция extract_oilfields_from_text принимает текст документа и список настроек месторождений. Поиск выполняется следующим образом:

  1. Текст документа приводится к нижнему регистру.
  2. Для каждого месторождения перебираются его ключевые слова.
  3. Каждое ключевое слово ищется в тексте с учётом границ слов: перед и после слова не должно быть буквы (кириллической или латинской). Это предотвращает ложные совпадения: например, ключевое слово Волга не сработает на слове Волгоград.
  4. Как только хотя бы одно ключевое слово найдено, каноническое название месторождения добавляется в результат. Остальные ключевые слова этого месторождения не проверяются.

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

Постобработка документа

Функция run_postprocessing вызывается после распознавания документа через Claude и выполняет поиск месторождений в исходном тексте, полученном от сервиса оптического распознавания (Google Cloud Vision). Результаты записываются в поле from_postprocess.oilfields документа.

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

Пример

Настройки:

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

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

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

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