24 июля 2026 г.
Для обработки текста нам понадобится библиотека spaCy. Настроим spaCy на Python и обработаем текст.
Установка и настройка
Установка происходит в две команды в терминале или командной строке :
- Устанавливаем саму библиотеку:
pip install -U spacy
- Загружаем модель для русского языка (я выбрал среднюю md для хорошего баланса скорости и точности, если нужно, можно поставить sm для быстрой или lg для самой точной):
python -m spacy download ru_core_news_md
Скрипт для распознавания сущностей (NER)
Создадим файл test_spacy.py и напишем код:
import spacy
# 1. Загружаем модель для русского языка
nlp = spacy.load('ru_core_news_md')
# 2. Ваш текст для анализа
text = """
Вчера, 22 июля 2026 года, президент компании "ТехноПром" Иванов Петр Сидорович
объявил о запуске нового завода в Москве. Также на встрече присутствовала
генеральный директор ООО "ГлобалИнвест" Анна Смирнова.
"""
# 3. Обрабатываем текст через пайплайн spaCy
doc = nlp(text)
# 4. Выводим все найденные именованные сущности
print("Найденные сущности:")
for ent in doc.ents:
print(f" Текст: '{ent.text}', Тип: {ent.label_}, Объяснение: {spacy.explain(ent.label_)}")
Когда мы запустим скрипт (python test_spacy.py), результат будет примерно таким:
Найденные сущности:
Текст: 'ТехноПром', Тип: ORG, Объяснение: Companies, agencies, institutions, etc.
Текст: 'Иванов Петр Сидорович', Тип: PER, Объяснение: Named person or family.
Текст: 'Москве', Тип: LOC, Объяснение: Non-GPE locations, mountain ranges, bodies of water
Текст: 'ООО "ГлобалИнвест"', Тип: ORG, Объяснение: Companies, agencies, institutions, etc.
Текст: 'Анна Смирнова', Тип: PER, Объяснение: Named person or family.
Что означает этот код:
- nlp = spacy.load(...): Это загрузка обученной модели, которая умеет разбивать текст на предложения, слова, определять части речи и распознавать сущности.
- doc = nlp(text): Здесь ваш текст прогоняется через весь пайплайн обработки. spaCy анализирует его и создает объект doc, содержащий всю информацию.
- doc.ents: Это свойство содержит список всех распознанных именованных сущностей. Проходя по нему в цикле, мы выводим текст и его тип (Person, Date, Organization и т.д.) .
SpaCy умеет находить множество типов сущностей . Вот самые частые для русского языка:
- PER (Person) — имена людей (Иванов Петр).
- ORG (Organization) — организации, компании (ТехноПром).
- LOC (Location) — географические места (Москва).
- DATE (Date) — даты (22 июля 2026 года).
- MONEY, PERCENT — деньги и проценты.
Как улучшить результат для русского языка
Базовая модель ru_core_news_md хороша, но для специфических задач (например, выделение адресов) можно использовать дообученные модели. На Hugging Face есть модель, которая отлично находит имена и адреса в русских текстах :
pip install spacy pymorphy3
Загружаем модель:
git clone https://huggingface.co/alrosait/spacy_ru_core_news_lg_pii
Теперь код на python:
import spacy
nlp = spacy.load("./spacy_ru_core_news_lg_pii") # Специализированная модель
doc = nlp("Иван Петров, г. Москва, ул. Ленина 5")
for ent in doc.ents:
print(ent.text, ent.label_)
# Выведет: Иван Петров NAME, г. Москва, ул. Ленина 5 ADDRESS
На тестовых наборах эта модель показывает очень хорошую точность: F-мера ~94% для имен и ~82% для адресов.