Disvortilo
Disvortilo is a simple tool that breaks Esperanto words into roots and affixes.
Getting Started
You can install Disvortilo from PyPI using pip:
pip install disvortilo
Examples
from disvortilo import Disvortilo, rank
disvortilo = Disvortilo()
print(disvortilo.parse("malliberejo"))
# > [('mal', 'liber', 'ej', 'o')]
# some have more than one possible output
print(disvortilo.parse("esperantistino"))
# > [('esper', 'ant', 'ist', 'in', 'o'), ('esperant', 'ist', 'in', 'o')]
# you can also get the morphemes along the their categories
print(disvortilo.parse_detailed("plibonigojn"))
# > [(('pli', WordPart.FULL_WORD), ('bon', WordPart.ROOT), ('ig', WordPart.SUFFIX), ('ojn', WordPart.POS))]
# sort the values from most likely to less likely
print(rank(disvortilo.parse_detailed("envias"), n=2)) # get the 2 most likely options
# > [(('envi', WordPart.ROOT), ('as', WordPart.POS)), (('en', WordPart.FULL_WORD), ('vi', WordPart.FULL_WORD), ('as', WordPart.POS))]
API Reference
Disvortilo
Parser class for splitting Esperanto words into morphemes.
Disvortilo.parse(word: str) -> list[tuple[str, ...]]
Returns all valid analyses of word. Each analysis is a tuple of morpheme strings in order.
Example return value:
[('esper', 'ant', 'ist', 'in', 'o'), ('esperant', 'ist', 'in', 'o')]
Disvortilo.parse_detailed(word: str, n: int = None) -> list[tuple[tuple[str, WordPart], ...]]
Like parse, but each morpheme is returned together with its detected category (WordPart). Each analysis is a tuple
of (morpheme, WordPart) pairs. The n options limits the returned options and sorts them based on a heuristic of the
most likely option.
Example return value:
[(('pli', WordPart.FULL_WORD), ('bon', WordPart.ROOT), ('ig', WordPart.SUFFIX), ('ojn', WordPart.POS))]
rank(options, n: int | None = None) -> list[tuple[tuple[str, WordPart], ...]]
Sorts options based on a heuristic of the most likely option.
Note, that this will only work with the returned values from parse_detailed.
Example return value:
[(('neĝ', WordPart.ROOT), ('is', WordPart.POS)), (('ne', WordPart.FULL_WORD), ('ĝis', WordPart.FULL_WORD))]
WordPart
Enum values used by parse_detailed:
PREFIXROOTSUFFIXFULL_WORDPOSNUMBERNAMECORRELATIVE_STARTCORRELATIVE_END
split_sentence(sentence: str) -> list[str]
Splits a sentence into Esperanto word-like tokens. Supports Esperanto diacritics, optional trailing apostrophes, and
forms like 3 and 3an.
Example:
from disvortilo import split_sentence
split_sentence("Mi vidas 3an domon.")
# > ['Mi', 'vidas', '3an', 'domon']
split_sentence_detailed(sentence: str) -> Generator[tuple[str, int, int], None, None]
Split a sentence into Esperanto word-line tokens. Unline split_sentence, it yields the position of each word.
Example:
from disvortilo import split_sentence_detailed
list(split_sentence_detailed("Mi vidis 3an domon."))
# > [('Mi', 0, 2), ('vidis', 3, 8), ('3an', 9, 12), ('domon', 13, 18)]
Metadata
Release files for disvortilo 0.8.2.post1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| disvortilo-0.8.2.post1.tar.gz | 10.9 kB | With provenance | Details for disvortilo-0.8.2.post1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| disvortilo-0.8.2.post1-py3-none-any.whl | Python 3 | none | any | Details for disvortilo-0.8.2.post1-py3-none-any.whl |
Total release size: 21.7 kB
Release files / disvortilo-0.8.2.post1.tar.gz
| Download URL | disvortilo-0.8.2.post1.tar.gz |
|---|---|
| Size | 10.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8acee5c4d90221261f1a84f8b363bb6c435d5b211b646061fdc2427b5da2a4d5
|
|
BLAKE2b-256 checksum How to use checksums |
d2e6d4e6fb5e7a0054c954763b939ceeec6e8e802ca55be88ea183e4ea445655
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 1, 2026.
Transparency logRelease files / disvortilo-0.8.2.post1-py3-none-any.whl
| Download URL | disvortilo-0.8.2.post1-py3-none-any.whl |
|---|---|
| Size | 10.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
87a994be67ca226dd312dca8902fdfbddb791b16d5a7930b9e95a55d4106f88d
|
|
BLAKE2b-256 checksum How to use checksums |
bb8d5b7ab4a7fadb184cd8c3ad997119bcc58fa6a8cf47460937ac960ccc9352
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 1, 2026.
Transparency logSecurity for disvortilo 0.8.2.post1
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for disvortilo-0.8.2.post1.tar.gz
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 Nov 1, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.