Реализация извлечения фактов из текста (Information Extraction)
Information Extraction (IE) — автоматическое извлечение структурированной информации из неструктурированного текста. Цель: превратить свободный текст в заполненные поля базы данных.
Компоненты системы IE
Полноценная IE-система включает несколько взаимосвязанных задач:
Named Entity Recognition → находит сущности (персоны, организации, даты, суммы)
Relation Extraction → определяет отношения между сущностями («Иван работает в Газпроме»)
Event Extraction → извлекает события с участниками, временем, местом
Attribute Extraction → заполняет атрибуты сущностей («Газпром, выручка 10 трлн руб, 2024 год»)
LLM-based извлечение (современный подход)
Для большинства задач IE сегодня LLM с structured output — оптимальный выбор:
from pydantic import BaseModel
from openai import OpenAI
class CompanyInfo(BaseModel):
name: str
revenue: float | None
revenue_year: int | None
ceo: str | None
headquarters: str | None
employees_count: int | None
client = OpenAI()
response = client.beta.chat.completions.parse(
model="gpt-4o-mini",
messages=[{
"role": "user",
"content": f"Извлеки информацию о компании из текста:\n{text}"
}],
response_format=CompanyInfo,
)
result = response.choices[0].message.parsed
Классический pipeline (для высокой нагрузки)
Для систем с > 1000 документов/час и требованием к latency < 100ms:
- spaCy / natasha для базового NER (персоны, орг, локации, даты)
- Dependency parsing для извлечения простых отношений (субъект-глагол-объект)
- Pattern matching (spaCy Matcher) для структурированных паттернов («цена X рублей», «ставка X%»)
- Нормализация — приведение к каноническому виду (даты → ISO, суммы → float + валюта)
Работа с табличными данными в тексте
Тексты часто содержат таблицы в PDF/HTML. Стратегия:
- PDF: Camelot или pdfplumber для извлечения таблиц
-
HTML: BeautifulSoup + pandas
read_html - Изображения таблиц: Azure Document Intelligence или Table Transformer (Microsoft)
Оценка качества
Метрики для IE:
- Precision/Recall/F1 по типам сущностей
- Relation-level F1 (правильная пара сущностей + правильный тип отношения)
- Slot-filling accuracy (процент корректно заполненных полей)
Типичные результаты: 90–95% F1 для чётко структурированных текстов (финансовые отчёты, договоры), 75–85% для новостей и свободного текста.







