Тест на вакансию

Использование Python для обработки текста

24 июля 2026 г.
44

Для обработки текста нам понадобится библиотека spaCy. Настроим spaCy на Python и обработаем текст.

Установка и настройка

Установка происходит в две команды в терминале или командной строке :
  1. Устанавливаем саму библиотеку:
    pip install -U spacy
  2. Загружаем модель для русского языка (я выбрал среднюю 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% для адресов.
Поделиться: