pytrovich is a Python 3.9+ port of petrovich library which inflects Russian names to a given grammatical case. It supports first names, last names and middle names inflections. Since version 0.0.2, gender detection is also available.
It is STRONGLY RECOMMENDED to use pytrovich VERSION >=0.1.0
3–5× faster lookups via a suffix trie, 800× faster repeated construction via parsed-rules caching, deterministic gender output, correct handling of all-caps / Ё / indeclinable names that previously failed silently, and refreshed rules data covering 24 upstream fixes from 2020–2024. Upgrade because the old version returned wrong answers on a non-trivial slice of real Russian names (try make(LASTNAME, MALE, GEN, "ИВАНОВ") or make(FIRSTNAME, MALE, GEN, "Пётр") on both --- the new one is correct, the old one isn't), flapped between gender predictions across runs, and crashed on unknown names; the new one is faster, deterministic, properly typed (py.typed ships), and benchmarked at >99% accuracy across 270k gold-standard inflections.
petrovich-java was the main inspiration.
The alternative (earlier) port: Petrovich (@alexeyev was not aware of it at the time of porting petrovich to Python).
The only meaningful difference we have found is that it does not support gender detection.
Installation
Should be as simple as that
pip install pytrovich
Usage
Inflection
from pytrovich.enums import NamePart, Gender, Case
from pytrovich.maker import PetrovichDeclinationMaker
maker = PetrovichDeclinationMaker()
print(maker.make(NamePart.FIRSTNAME, Gender.MALE, Case.GENITIVE, "Иван")) # Ивана
print(maker.make(NamePart.LASTNAME, Gender.MALE, Case.INSTRUMENTAL, "Иванов")) # Ивановым
print(maker.make(NamePart.MIDDLENAME, Gender.FEMALE, Case.DATIVE, "Ивановна")) # Ивановне
Inflection follows the canonical petrovich-ruby reference semantics, verified row-for-row against the petrovich-eval corpus:
- hyphenated double names decline per component
(
Салтыков-Щедрин→ dativeСалтыкову-Щедрину); - exception rules match whole words only (the surname
Ельцинkeeps the regular-инdeclension instead of theЦинexception); - the optional
known_genderflag (defaultTrue) marks the supplied gender as an explicit fact. Passknown_gender=Falsewhen the gender came out ofPetrovichGenderDetectorto get the Ruby reference's looser detected-gender rule filter:
gender = detector.detect(lastname="Цой") # Gender.MALE
maker.make(NamePart.LASTNAME, gender, Case.DATIVE, "Цой", known_gender=False) # Цою
Gender detection
from pytrovich.detector import PetrovichGenderDetector
detector = PetrovichGenderDetector()
print(detector.detect(firstname="Иван")) # Gender.MALE
print(detector.detect(firstname="Иван", middlename="Семёнович")) # Gender.MALE
print(detector.detect(firstname="Арзу", middlename="Лутфияр кызы")) # Gender.FEMALE
Custom rule file
You can replace default rules file with some custom one. Only JSON format is supported.
maker = PetrovichDeclinationMaker("/path/to/custom/rules.file.json")
E.g. if pytrovich fails on PetrovichDeclinationMaker creation,
one may consider downloading rules.json directly from
petrovich-rules repo as a fix (please create an issue if that actually happens).
How to cite
Not neccessary, but greatly appreciated, if you use this work.
@misc{Pytrovich,
title = {{petrovich/pytrovich: Python3 port of Petrovich, an inflector for Russian anthroponyms}},
year = {2020},
url = {https://github.com/petrovich/pytrovich},
language = {english},
}
More info
For more information on the project please refer to other petrovich repos.
License
This project is available under MIT license.
Metadata
Release files for pytrovich 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pytrovich-0.2.0.tar.gz | 49.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pytrovich-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 81.2 kB
Release files / pytrovich-0.2.0.tar.gz
| Download URL | pytrovich-0.2.0.tar.gz |
|---|---|
| Size | 49.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4501b8b467127b6bbe2583a56631fdc7cdd7dbac15058319321c147e94614ee0
|
|
BLAKE2b-256 checksum How to use checksums |
05058230874b9c95ba68586757721508d51844399ee357fe7da0655c6088cf86
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.18
|
Release files / pytrovich-0.2.0-py3-none-any.whl
| Download URL | pytrovich-0.2.0-py3-none-any.whl |
|---|---|
| Size | 31.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cb5fbdaed2a33738896d70156ffde5f74ff5a60375f47ced697b8ae76507ed6a
|
|
BLAKE2b-256 checksum How to use checksums |
3ca5f029c2f0f78555b6471a2103ee614e902e7a2e03b47437da7b782d8ce1b9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.18
|