Georgian Python toolkit for NLP, Transliteration and more. Partially based on anbani.js.
pip install anbaniTransliteration and NLP utilities need only hjson. PDF / e-book extraction
(anbani.nlp.utils.ebook2text) additionally requires PyMuPDF:
pip install anbani[pdf]Transliteration example:
from anbani.core.converter import convert, interpret
interpret("გამარჯობა", "asomtavruli")
# 'ႢႠႫႠႰႿႭႡႠ'Georgianisation example:
from anbani.nlp.georgianisation import georgianise
georgianise("gamarjoba - rogor xar - rasa iqm - kaia kata - kai erti")
# 'გამარჯობა - როგორ ხარ - რასა იქმ - კაია კატა - კაი ერთი'Convert ebooks with qwerty encoding to unicode Mkhedruli:
from anbani.nlp.utils import ebook2text
from anbani.core.converter import classify_text
from anbani.core.converter import convert
text = ebook2text("/home/george/Dev/georgian-text-corpus/sources/mylibrary/raw/files/ჩარლზ დიკენსი - დევიდ კოპერფილდი.pdf")
print(text[:300])
print(classify_text(text))
print(convert(text, "qwerty", "mkhedruli")[:300])
# Carlz dikensi daviT koperfildi Tavi pirveli dabadeba me viqnebi gmiri Cemive sakuTari Tavgadasavlisa Tu sxva...
# latin
# ჩარლზ დიკენსი დავით კოპერფილდი თავი პირველი დაბადება მე ვიქნები გმირი ჩემივე საკუთარი თავგადასავლისა თუ სხვა...Expand contractions:
from anbani.nlp.contractions import expand_text
text = "ილია ჭავჭავაძე (დ. 8 ნოემბერი, 1837, სოფელი ყვარელი — გ. 12 სექტემბერი, 1907, წიწამური)"
print(text)
print(expand_text(text))
# ილია ჭავჭავაძე (დ. 8 ნოემბერი, 1837, სოფელი ყვარელი — გ. 12 სექტემბერი, 1907, წიწამური)
# ილია ჭავჭავაძე (დაბადება 8 ნოემბერი, 1837, სოფელი ყვარელი — გარდაცვალება 12 სექტემბერი, 1907, წიწამური)Contract them back:
from anbani.nlp.contractions import contract_text
print(contract_text("მასის ატომური ერთეული და ასე შემდეგ"))
# მ.ა.ე. და ა.შ.from anbani import toolkit, lorem
toolkit.frequency("ანბანი") # per-letter frequencies
toolkit.friedman(text) # index of coincidence
lorem.sentences(12) # fake Georgian prose
lorem.names(3) # fake full namesInstalling the package also installs an anbani command:
anbani interpret "gamarjoba" # -> ᲒᲐᲛᲐᲠᲯᲝᲑᲐ
anbani convert "ანბანი" -f mkhedruli -t asomtavruli
anbani georgianise "gamarjoba"
anbani expand "ვნახოთ ა. შ."
anbani lorem -w 8New in 3.1: a full-screen terminal UI. Launch it with anbani tui (or
python -m anbani tui). Zero extra dependencies — it is hand-rolled ANSI, and
imports stay lazy so import anbani and the plain CLI are unaffected.
anbani tuiFive tabs, switch with 1–5 or tab / shift+tab:
| Tab | What it does |
|---|---|
| Converter | live transliteration; m toggles auto/manual, f/o pick source/target, s swaps |
| Alphabet | letter grid + detail card; hjkl to move, c cycles script, a toggles archaic, enter copies |
| Lorem | fake Georgian text; k kind, +/- amount, g generate |
| NLP | georgianise / latinise / expand / contract; m mode, b georgianise level (fast/balanced/accurate) |
| Toolkit | letter-frequency bars + Friedman index of coincidence |
Converter — live transliteration with script auto-detection:
Alphabet — grid + per-letter detail across every Georgian script, IPA, braille, numeral:
NLP — georgianise / latinise / expand / contract:
Toolkit — letter-frequency bars and the Friedman index of coincidence:
Global keys: ? help overlay · i/enter edit · y copy (via OSC 52) ·
q or ctrl+c quit. Minimum terminal size is 60×16.
Notes:
- No Georgian keyboard? Pick
from: qwertyin the Converter (type Latin, get Georgian), or paste — bracketed paste is supported in edit mode. - Copy uses OSC 52; some terminals block it, in which case the copy silently does nothing.
- Not supported on native Windows (needs a POSIX terminal); use WSL or the npm package there.
anbani.py and anbani.js share one
behavior contract, proved in CI by the byte-identical spec/golden.json that
both test suites run. As of 3.0 they are feature-equivalent; the only
intentional gaps are ebook2text (Python-only, needs PyMuPDF) and the
browser/UMD bundle (js-only).
classify_textreturns"unknown"for undetectable / mixed-script text and now reports the four bicameral scripts;interpretraises on"unknown".convert/interpretraiseValueErroron an unsupported source or target (was an assertion, or a silent passthrough for targets).georgianisedefaults tomode="balanced"(was"accurate").
Feel free to fork this repo!
- Tokenizer
- Transliteration
- Expand contractions
- ebook2text converter
- Stemmer
- Lemmatizer
- Stopwords




