Skip to main content

names-translator

That’s a small tool to generate as many possible transliteration options for ukrainian names. First it translates the name into russian using a dictionary, then transliterates ukrainian and russian names using the translitua package and 28 different transliteration tables. Finally, some heuristic is applied to cover usual transliterations for well known names, which aren’t covered by the transliteration tables.

Installation

Install from PyPI.

$ pip install names_translator

Dictionaries

The package bundles compiled DAWG dictionaries (the pymorphy3 approach): ~146k validated first names, last names and patronymics with ranked Russian translations, plus a legacy pool of ~19k names from the historical ua2ru dictionary used as a fallback for names the validated data does not cover. Everything works out of the box; ranked lookups are also available directly:

>>> from names_translator.dicts import NameDicts
>>> NameDicts().lookup("Дмитро", "first")
['Дмитрий', 'Дмитро']

Compared to loading the same 149k rows into a plain python dict (~300 ms, +48 MB RSS), the compiled dictionaries load in 20-90 ms using ~4x less memory (measured with tools/bench_dict_vs_dawg.py). pip install names_translator[fast] swaps the pure-python DAWG reader for the C extension (~9x faster lookups, ~1M/s).

The dictionaries are compiled with python -m names_translator.dict_compiler (requires the DAWG2 builder, e.g. via names_translator[fast]); sources, thresholds and checksums are recorded in the shipped manifest.json.

Usage

>>> from names_translator import Transliterator
>>> tr = Transliterator()
>>> tr.transliterate("Чаплинський", "Дмитро", "Олександрович")
    {"Chaplins'kij Dmitro Oleksandrovich",
     'Chaplinski Dmitri Aleksandrovich',
     'Chaplinski Dmitri Oleksandrovich',
     'Chaplinski Dmitro Aleksandrovich',
     'Chaplinski Dmitro Oleksandrovich',
     'Chaplinskii Dmitrii Aleksandrovich',
     'Chaplinskii Dmitrii Oleksandrovich',
     'Chaplinskii Dmitro Aleksandrovich',
     'Chaplinskii Dmitro Oleksandrovich',
     'Chaplinskij Dmitrij Aleksandrovich',
     'Chaplinskij Dmitrij Oleksandrovich',
     'Chaplinskij Dmitro Aleksandrovich',
     'Chaplinskij Dmitro Oleksandrovich',
     'Chaplinskijj Dmitrijj Aleksandrovich',
     'Chaplinskijj Dmitrijj Oleksandrovich',
     'Chaplinskijj Dmitro Aleksandrovich',
     'Chaplinskijj Dmitro Oleksandrovich',
     'Chaplinskiy Dimitry Aleksandrovich',
     'Chaplinskiy Dimitry Oleksandrovich',
     'Chaplinskiy Dmitriy Aleksandrovich',
     'Chaplinskiy Dmitriy Alexandrovich',
     'Chaplinskiy Dmitriy Oleksandrovich',
     'Chaplinskiy Dmitriy Olexandrovich',
     'Chaplinskiy Dmitro Aleksandrovich',
     'Chaplinskiy Dmitro Alexandrovich',
     'Chaplinskiy Dmitro Oleksandrovich',
     'Chaplinskiy Dmitro Olexandrovich',
     'Chaplinskiy Dmitry Aleksandrovich',
     'Chaplinskiy Dmitry Oleksandrovich',
     'Chaplinskiĭ Dmitriĭ Aleksandrovich',
     'Chaplinskiĭ Dmitriĭ Oleksandrovich',
     'Chaplinskiĭ Dmitro Aleksandrovich',
     'Chaplinskiĭ Dmitro Oleksandrovich',
     'Chaplinsky Dmitro Aleksandrovich',
     'Chaplinsky Dmitro Oleksandrovich',
     'Chaplinsky Dmitry Aleksandrovich',
     'Chaplinsky Dmitry Oleksandrovich',
     'Chaplinskyy Dmitro Aleksandrovich',
     'Chaplinskyy Dmitro Oleksandrovich',
     'Chaplinskyy Dmitryy Aleksandrovich',
     'Chaplinskyy Dmitryy Oleksandrovich',
     "Chaplyns'cyi Dmytro Olecsandrovych",
     "Chaplyns'kyi Dmytro Oleksandrovych",
     "Chaplyns'kyj Dmytro Oleksandrovych",
     "Chaplyns'kyy Dmytro Oleksandrovych",
     'Chaplynsjkyj Dmytro Oleksandrovych',
     'Chaplynski Dmytro Oleksandrovych',
     'Chaplynsky Dmytro Oleksandrovych',
     'Chaplynskyi Dimitry Oleksandrovych',
     'Chaplynskyi Dmitry Oleksandrovych',
     'Chaplynskyi Dmytro Oleksandrovych',
     'Chaplynskyi Dmytro Olexandrovych',
     'Chaplynskyy Dmytro Oleksandrovych',
     'Chaplynsʹkyĭ Dmytro Oleksandrovych',
     'Chaplȳnskȳĭ Dmȳtro Oleksandrovȳch',
     'Tchaplynskyy Dmytro Oleksandrovytch',
     'Tschaplynskyj Dmytro Oleksandrowytsch',
     "Čaplins'kij Dmitro Oleksandrovič",
     'Čaplinskij Dmitrij Aleksandrovič',
     'Čaplinskij Dmitrij Oleksandrovič',
     'Čaplinskij Dmitro Aleksandrovič',
     'Čaplinskij Dmitro Oleksandrovič',
     'Čaplins′kij Dmitro Oleksandrovič',
     'Čaplynsjkyj Dmytro Oleksandrovyč',
     'Čaplynsʹkyj Dmytro Oleksandrovyč',
     'Чаплинский Дмитрий Александрович',
     'Чаплинский Дмитрий Олександрович',
     'Чаплинский Дмитро Александрович',
     'Чаплинский Дмитро Олександрович',
     'Чаплинський Дмитро Олександрович'}

Release files for names-translator 2.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for names-translator 2.1.0
File Size Uploaded
names_translator-2.1.0.tar.gz 1.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for names-translator 2.1.0
File Interpreter ABI Platform
names_translator-2.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 3.4 MB

Release files / names_translator-2.1.0.tar.gz

Download URL names_translator-2.1.0.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
563d7c52b205a8c64679c06be1799b81be0b5d30ca178acb96e346f0b75a139c
BLAKE2b-256 checksum
How to use checksums
2cc6d6e454df6ba91affcbd04e7daf348795a8d9982ae671b2b93f90be3b9c26
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.

Transparency log

Release files / names_translator-2.1.0-py3-none-any.whl

Download URL names_translator-2.1.0-py3-none-any.whl
Size 1.7 MB
Tags Python 3
SHA-256 checksum
How to use checksums
4cd0679237994fef87a171c128ede367ba25dffc5d55053b7e8484c25c882646
BLAKE2b-256 checksum
How to use checksums
29aef2fa55d9afdec475d1c6a61b56c4c365c46f17c2029fe4dda29a94e036fa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.1.0 This release

2 release files

1.2.3

1 release file

1.2.2

1 release file

1.2.1

1 release file

1.2.0

1 release file

1.1.0

1 release file

1.0.3

1 release file

1.0.2

1 release file

1.0.1

1 release file

1.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page