Skip to main content

biblical-transliteration

PyPI tests Python License: MIT

Biblical Hebrew and Koine Greek transliteration in three schemes — academic (SBL), simple ASCII, and phonetic. Pure Python, no dependencies.

from biblical_transliteration import (
    HebrewTransliterator, HebrewScheme, HebrewOptions,
    GreekTransliterator, GreekScheme, GreekOptions,
)

heb = HebrewTransliterator(HebrewOptions(scheme=HebrewScheme.SBL))
heb.transliterate("בְּרֵאשִׁית")
# 'bǝrēʾšîṯ'

grk = GreekTransliterator(GreekOptions(scheme=GreekScheme.SBL))
grk.transliterate("Ἐν ἀρχῇ ἦν ὁ λόγος")
# 'En archē ēn ho logos'

Install

pip install biblical-transliteration

Requires Python 3.10+. Zero runtime dependencies.

Schemes

Each transliterator supports three output styles via TransliterationScheme:

Scheme Hebrew (שָׁלוֹם) Greek (λόγος) Use when
SBL šālôm logos Academic writing, scholarly publications, lexicon entries. Full SBL Handbook of Style diacritics.
SIMPLE shalom logos Reader-friendly Latin, no diacritics. Good for UI labels and casual contexts.
PHONETIC shah-LOHM LAH-gahs Pronunciation cues with syllable boundaries and stress (capitalized syllable). Hebrew is spelled for modern-Hebrew pronunciation, Greek for Erasmian (Mounce-style seminary) pronunciation. For learners and audio-aligned uses.

What this handles

Hebrew (~1,000 lines of rules):

  • Full nikkud (vowel point) coverage, including hataf vowels
  • BeGaD KeFaT spirantization with proper SBL macron-under marks (ḇ ḡ ḏ ḵ p̄ ṯ)
  • Vocal vs silent shewa distinction
  • Qamats qatan (o) vs qamats gadol (a) detection
  • Dagesh forte vs lene
  • Shin/sin dot disambiguation
  • Final letter forms (ך ם ן ף ץ)
  • Cantillation marks (te'amim) drive stress placement in the PHONETIC scheme, backed by an OSHB-derived stress lexicon when no te'am is present
  • The Tetragrammaton is never rendered as the qere-vowel hybrid (yǝhwāh, the "Jehovah" error) — bare consonants by default (a reconstructed yah-WEH in Phonetic), or a reverent substitute of your choice (Adonai, Hashem, …)
  • Chet (ח) renders as ḥ (an h with an under-dot) in every scheme — including Phonetic. It is a throaty, constricted-throat h (the voiceless pharyngeal fricative, as in Hanukkah or Arabic ح), deliberately not kh: that velar spelling belongs to soft Kaf (כ, /x/) — the two merge only in Modern Israeli — and it misreads toward a hard /k/. ḥ is the only diacritic in the otherwise ASCII Phonetic scheme; when a syllable is stressed it upper-cases to Ḥ (e.g. חֵן → Ḥen, רוּחַ → ROO-ahḥ).
  • Maqaf, meteg, sof pasuq

Koine Greek (~800 lines of rules):

  • Diphthongs in canonical order (αι, ει, οι, υι, αυ, ευ, ηυ, ου), uppercase and lowercase
  • Breathing marks read off either vowel of a diphthong
  • Iota subscript (macron-only ā ē ō in SBL so it can't collide with the αι diphthong; i appended in Simple; silent in Phonetic)
  • Final sigma (ς)
  • Koine-correct phonemes in SBL/Simple — β = b (not modern v), φ = ph (not modern f), υ = u in diphthongs; the PHONETIC scheme is Erasmian, spelled for English readers (χ = kh, φ = f)
  • Eta/omega macron distinction in SBL
  • Accents and breathing marks normalized

Why three schemes?

Open-source transliterators tend to pick one and stick with it, which forces you to choose between accuracy (SBL is hard to read for non-specialists) and readability (loose ASCII loses important phonemic distinctions). Three schemes lets you produce SBL-compliant output for academic work, ASCII for UI labels, and pronunciation cues for learners — from the same source text.

Why a separate Hebrew + Greek package?

Most existing PyPI packages are language-specific and use inconsistent APIs. This package presents a single mental model — Transliterator(Options(scheme=...)) — that works identically across both languages, so consumer code that transliterates whatever script it encounters stays clean.

This package fills a specific gap in the Python biblical-NLP ecosystem. Other tools cover adjacent problems well; here's what they do differently so you can pick the right one:

Package Scope Notes
biblical-transliteration (this) Hebrew + Koine Greek, three schemes (SBL/Simple/Phonetic) Designed for biblical use specifically. Koine-correct phonemes for Greek; full nikkud + begadkefat + qamats qatan handling for Hebrew. Single consistent API across both languages.
transliterate 9 languages including (Modern/Classical) Greek; no Hebrew Excellent general-purpose romanizer for European/Caucasian scripts. Greek pack is calibrated for Modern Greek phonology, not Koine — β→v, φ→f, eta and epsilon collapsed. Use this if you need Russian/Armenian/Georgian/Bulgarian etc. alongside Greek.
beta-code Greek only Solves a different problem: BETA encoding ↔ Greek Unicode (e.g. mh=nin ↔ μῆνιν). Pair it with this package when working with CCAT/TLG sources — first beta→Unicode with beta-code, then Unicode→Latin with this.
Hebrew transliteration on PyPI — As of 2026, there is no actively maintained Biblical Hebrew transliterator on PyPI. This package fills that gap.

If your workflow needs SBL Handbook of Style-compliant academic transliteration with proper diacritics for both Hebrew (bǝrēʾšîṯ, šālôm) and Greek (logos, Iēsous), this package is the only option in the Python ecosystem at the time of writing.

Limitations

  • Hebrew text must be Unicode (with or without nikkud). Beta-coded Hebrew (CCAT/Michigan-Claremont format) is not handled by this library — use a beta→Unicode converter first.
  • Greek text is assumed Koine. Modern Greek and Classical Greek work with the SBL and SIMPLE schemes, but PHONETIC is calibrated for Koine and may not match what you expect for Classical or Modern texts.
  • Qamats qatan detection is rule-based, not perfect. Texts with explicit U+05C7 marking (modern WLC) work reliably; older texts using the ambiguous U+05B8 may occasionally guess wrong. Meteg is not consulted, so a meteg-disambiguated qamats gadol (e.g. חָֽכְמָה "she was wise" vs חָכְמָה "wisdom") is still read as qatan.
  • Unpointed Hebrew gets consonant-skeleton output. BeGaD KeFaT letters default to their stop values (b g d k p t) since there is no dagesh information; final kaf/pe keep the spirant (post-vocalic position). Nikkud detection is per transliterate() call, not per word: an unpointed word mixed into pointed text uses the pointed defaults.

Examples

from biblical_transliteration import HebrewTransliterator, HebrewOptions, HebrewScheme

# All three schemes for the same word
word = "שָׁלוֹם"
for scheme in HebrewScheme:
    t = HebrewTransliterator(HebrewOptions(scheme=scheme))
    print(f"{scheme.value:10} {t.transliterate(word)}")
# sbl        šālôm
# simple     shalom
# phonetic   shah-LOHM
from biblical_transliteration import GreekTransliterator, GreekOptions, GreekScheme

# John 1:1
text = "Ἐν ἀρχῇ ἦν ὁ λόγος, καὶ ὁ λόγος ἦν πρὸς τὸν θεόν, καὶ θεὸς ἦν ὁ λόγος."
for scheme in GreekScheme:
    t = GreekTransliterator(GreekOptions(scheme=scheme))
    print(f"{scheme.value:10} {t.transliterate(text)}")

Development

git clone https://github.com/curran-gehring/biblical-transliteration.git
cd biblical-transliteration
python -m venv .venv
source .venv/bin/activate     # Windows: .venv\Scripts\activate
pip install -e ".[dev]"
pytest

License

MIT — see LICENSE.

Acknowledgments

Transliteration rules were developed against the Society of Biblical Literature Handbook of Style (2nd ed., 2014) and validated against verses from the CATSS parallel corpus.

The phonetic stress lexicon (biblical_transliteration/data/stress_lexicon.json) is derived from the cantillation accents of the Westminster Leningrad Codex as encoded by the Open Scriptures Hebrew Bible (morphhb), used under the Creative Commons Attribution 4.0 International License. The bundled file contains only derived stress positions; regenerate it with tools/build_stress_lexicon.py.

Metadata

Release files for biblical-transliteration 0.5.5

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

Source distribution (sdist)

Source distribution for biblical-transliteration 0.5.5
File Size Uploaded
biblical_transliteration-0.5.5.tar.gz 112.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for biblical-transliteration 0.5.5
File Interpreter ABI Platform
biblical_transliteration-0.5.5-py3-none-any.whl Python 3 none any Details

Total release size: 213.6 kB

Release files / biblical_transliteration-0.5.5.tar.gz

Download URL biblical_transliteration-0.5.5.tar.gz
Size 112.4 kB
Tags Source
SHA-256 checksum
How to use checksums
aec030963f73b5eef81e1cd6740adfb5cb9c07e84774b99010e5c7e308564b3d
BLAKE2b-256 checksum
How to use checksums
07197c441eeea4dc7944080cbf47710be3b7f0b183d5af2c5b07725fd357744c
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 24, 2026.

Transparency log

Release files / biblical_transliteration-0.5.5-py3-none-any.whl

Download URL biblical_transliteration-0.5.5-py3-none-any.whl
Size 101.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
881a9f93506c7cc0b41a38cad32a85add5f5fd45214e96705f5c29eba93bb9bd
BLAKE2b-256 checksum
How to use checksums
ca2c573bb469a19677f04e67b9fe2ac8c969e2b697e734c47fa2141ac63244f1
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 24, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.5.5 This release

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.3.1

2 release files

0.1.0

2 release files

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