Сторонние библиотеки для работы с именами в Python

Раздел: Сторонние библиотеки -> Библиотеки

При работе с данными, содержащими имена людей, часто возникают задачи генерации случайных имен для тестовых наборов, разбора полного имени на составляющие или транслитерации в другую письменность. В Python существует несколько сторонних библиотек, каждая из которых решает определённый круг задач. В статье рассматриваются наиболее популярные инструменты, приводятся примеры кода и разбираются типичные сложности.

Основное решение: библиотека Faker

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

Установка выполняется стандартно:

pip install faker

команды math python (команды модуля math в python)

Как сгенерировать случайное имя на русском языке?

from faker import Faker
fake = Faker('ru_RU')
print(fake.name())

Aiogram python (создание бота на aiogram (асинхронный telegram бот))

Елена Петрова

библиотека имен python (библиотека имен в python)

Метод name() возвращает полное имя (имя и фамилию) в случайном порядке. Если требуется только имя или только фамилия, используются методы first_name() и last_name().

print(fake.first_name())
print(fake.last_name())

Python pandas типы данных (типы данных pandas в python)

Александр
Кузнецов

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

Решение: заранее создать экземпляр Faker и использовать его многократно. Для редких локалей можно дополнить данные через провайдеры.

Варианты решения

Библиотека names: простая генерация английских имён

Если требуется генерировать только английские имена без лишних зависимостей, подойдёт библиотека names.

pip install names

Как сгенерировать случайное полное имя на английском?

import names
print(names.get_full_name())
John Smith

Можно указать пол:

print(names.get_full_name(gender='male'))
print(names.get_full_name(gender='female'))

Проблема: библиотека не поддерживает другие языки и культуры. Все имена только английские.

Решение: для мультиязычных проектов лучше использовать Faker.

Библиотека nameparser: разбор полного имени на компоненты

Когда нужно из строки вида «Фамилия Имя Отчество» выделить части, пригодится библиотека nameparser.

pip install nameparser

Как разобрать полное имя на имя, фамилию и отчество?

from nameparser import HumanName
name = HumanName("Иванов Иван Иванович")
print(name.last)   # Фамилия
print(name.first)  # Имя
print(name.middle) # Отчество
Иванов
Иван
Иванович

Библиотека корректно обрабатывает приставки, титулы и суффиксы на английском языке. Для русского языка она также работает, но может путать отчество с фамилией, если порядок слов нестандартный.

Проблема: nameparser ориентирован на западные форматы имён. Русские отчества он не всегда распознаёт как middle name, если перед ними нет имени.

Решение: для русского языка можно использовать регулярные выражения в сочетании с предположением о порядке слов (фамилия, имя, отчество).

Библиотека transliterate: преобразование кириллицы в латиницу

При передаче данных в международные системы часто требуется транслитерация имени из кириллицы.

pip install transliterate

Как перевести имя «Иван Петров» в латинскую запись?

from transliterate import translit
result = translit("Иван Петров", 'ru', reversed=True)
print(result)
Ivan Petrov

Аргумент reversed=True означает транслитерацию с русского на английский. По умолчанию библиотека использует ГОСТ 7.79-2000.

Проблема: существуют разные стандарты транслитерации (ISO, ГОСТ, BGN/PCGN). Библиотека поддерживает только один вариант.

Решение: для специфических требований можно написать собственную таблицу замен или воспользоваться библиотекой slugify.

Расширенные примеры использования

Faker: генерация имён для разных локалей и полов

Faker позволяет создавать экземпляры с разными локалями и комбинировать их. Пример генерации списка уникальных русских имён:

Пример
from faker import Faker

fake_ru = Faker('ru_RU')
fake_en = Faker('en_US')

print('Русские имена (женские):')
for _ in range(3):
    print(fake_ru.first_name_female(), fake_ru.last_name_female())

print('Английские имена (мужские):')
for _ in range(3):
    print(fake_en.first_name_male(), fake_en.last_name_male())
Русские имена (женские):
Анна Смирнова
Мария Попова
Елена Кузнецова
Английские имена (мужские):
James Johnson
Michael Williams
David Brown

Метод unique() возвращает уникальные значения до исчерпания пула:

Пример
fake = Faker('en_US')
names = [fake.unique.first_name() for _ in range(5)]
print(names)
['Michael', 'Christopher', 'Matthew', 'Joshua', 'Andrew']

nameparser: обработка имён с титулами и суффиксами

Библиотека корректно разбирает сложные западные имена:

Пример
from nameparser import HumanName

name = HumanName("Dr. John A. Smith Jr.")
print(name.title)    # Dr.
print(name.first)    # John
print(name.middle)   # A.
print(name.last)     # Smith
print(name.suffix)   # Jr.
print(name.full_name)  # Dr. John A. Smith Jr.
Dr.
John
A.
Smith
Jr.
Dr. John A. Smith Jr.

Пример для русского имени с отчеством:

Пример
name = HumanName("Петров Пётр Петрович")
print(name.last, name.first, name.middle)
Петров Пётр Петрович

Обратите внимание: отчество попало в middle, что в данном случае корректно.

transliterate: настройка стандарта транслитерации

По умолчанию библиотека использует ГОСТ. Можно выбрать другую схему через параметр language_code:

Пример
from transliterate import translit

# Транслитерация по ISO 9
print(translit("Щука", 'ru', reversed=True, language_code='iso9'))
# Транслитерация по BGN/PCGN (доступна не всегда)
print(translit("Щука", 'ru', reversed=True, language_code='bg'))
Ŝuka
Shchuka

Обратная транслитерация (с латиницы на кириллицу) также возможна:

Пример
print(translit("Ivanov", 'ru', reversed=False))
Иванов

Комбинирование библиотек

Пример генерации тестовых данных: создание словаря с русским именем, его латинской транслитерацией и разбором:

Пример
from faker import Faker
from transliterate import translit
from nameparser import HumanName

fake = Faker('ru_RU')
full_name = fake.name()
lat_name = translit(full_name, 'ru', reversed=True)
parsed = HumanName(full_name)

data = {
    'original': full_name,
    'latin': lat_name,
    'first': parsed.first,
    'last': parsed.last,
    'middle': parsed.middle
}
print(data)
{'original': 'Козлова Дарья Игоревна', 'latin': 'Kozlova Dar'ja Igorevna', 'first': 'Дарья', 'last': 'Козлова', 'middle': 'Игоревна'}

Такие данные удобно использовать для заполнения баз данных или тестирования интернационализации.

Библиотека имен в Python - comments

En
библиотека имен python (python)