hmaraniam 🇲z
High-precision, zero-dependency language identification library for Hmar.
"Hmar a ni am?" — "Is it Hmar?"
hmaraniam is a lightweight Python library designed to accurately distinguish Hmar text from English and other Kuki-Chin / Zo languages (Mizo, Kuki, Paite, Vaiphei).
Key Features
- Microsecond Speed: $O(1)$ dictionary lookups with no heavy ML dependencies (PyTorch/TensorFlow free).
- Dual-Lens Diacritic Engine: Reports both
casual_hmar_ratio(ASCII-normalized for standard QWERTY typing) andformal_hmar_ratio(exact diacritic matching for formal literary text). - Dual Continuous Confidence Metrics: Disambiguates language metrics into
hmar_confidence(permanent metric answering "How confident are we that this text is Hmar?") anddetected_language_confidence(confidence in the overall classification choice). - Standardized Schema: Guarantees an immutable JSON output structure across all calls, including
non_hmar_words_countanddiacritic_words_count. - Extensible & Customizable: Allows developers to supply
custom_unigrams,extra_unigrams,custom_stopwords, or disable default stopwords. - Dual Offline/CDN Architecture: Automatically syncs with the live
hmar-heritage-org/hmaraniamunigram dataset via jsDelivr CDN, with automatic local disk caching and bundled fallback.
Installation
pip install hmaraniam
Standard Output Schema
{
"language": "hmar",
"hmar_confidence": 0.9842,
"detected_language_confidence": 0.9842,
"mode": "basic",
"scores": {
"casual_hmar_ratio": 0.9524,
"formal_hmar_ratio": 0.8095,
"english_stopword_ratio": 0.0000,
"sibling_zo_stopword_ratio": 0.0000,
"unknown_words_ratio": 0.0476,
"total_words": 21,
"hmar_words_count": 20,
"non_hmar_words_count": 1,
"unknown_words_count": 1,
"english_stopwords_count": 0,
"sibling_zo_stopwords_count": 0,
"hmar_diacritic_words_count": 17,
"non_hmar_diacritic_words_count": 0,
"total_diacritic_words_count": 17
}
}
Usage
Quick Start
import hmaraniam
# Authentic text from L. Keivom archive
sample_text = "Khawvel fe dan phung ei en chun, ram le hnam damna thuruk chu lien lema intel le insung khawm a nih."
result = hmaraniam.detect(sample_text)
print(result)
Custom Unigrams & Stopwords
from hmaraniam import Detector
# Provide custom unigrams or extra domain vocabulary
detector = Detector(
mode="basic",
extra_unigrams=["customworda", "customwordb"],
custom_stopwords=["and", "the", "with"],
disable_default_stopwords=False
)
result = detector.detect("Khawvel fe dan phung...")
Modes & Advanced Options
from hmaraniam import Detector
# Basic Mode (Active default ~30k core unigrams)
basic_detector = Detector(mode="basic")
# High Mode (Scans data/shards/ and loads all available unigram shards, falling back seamlessly to basic)
high_detector = Detector(mode="high")
# Offline-only mode (uses cached/bundled dataset without network calls)
offline_detector = Detector(offline_only=True)
Empirical Benchmarks & Performance
hmaraniam has been empirically validated across both controlled parallel corpus datasets (Parallel Zo Bibles across multiple literary genres) and unfiltered real-world web archives (~1,300 scraped articles and raw HTML pages across 5 major publishers).
1. Controlled Parallel Zo Bible Benchmark
Evaluated across parallel chapters (Genesis 1, Exodus 20, Matthew 5, Luke 2, Romans 8, Revelation 21) across 10 parallel Bible translations in 8 Zo languages + English:
| Language | Edition / Source | Evaluated Passages | Target Class | Engine Assigned Label | Classification Accuracy | Avg Hmar Confidence | Key Distinguishing Metrics |
|---|---|---|---|---|---|---|---|
| Hmar | CLB (Contemporary) | Gen 1, Ex 20, Matt 5, Luke 2, Rom 8, Rev 21 | hmar |
hmar |
100% | 1.0000 | casual_hmar_ratio $\ge 0.95$, unknown_words_ratio $\le 0.05$ |
| Hmar | OV (Old Version) | Gen 1, Ex 20, Matt 5, Luke 2, Rom 8, Rev 21 | hmar |
hmar |
100% | 1.0000 | Formal diacritic match + hmar_diacritic_words_count $>0$ |
| Mizo | OV (Mizo Bible) | Gen 1, Ex 20, Matt 5, Luke 2, Rom 8, Rev 21 | other |
other |
100% | 0.0000 | sibling_zo_stopwords (pathian, hnenah, avangin, tichuan) & unknown_words_ratio ($\approx 24%$) |
| Paite | Paite Bible | Gen 1, Ex 20, Matt 5, Luke 2, Rom 8, Rev 21 | other |
other |
100% | 0.0000 | sibling_zo_stopwords (pasian, tungah, simhuai) & unknown_words_ratio ($\approx 51%$) |
| Vaiphei | Vaiphei Bible | Gen 1, Ex 20, Matt 5, Luke 2, Rom 8, Rev 21 | other |
other |
100% | 0.0000 | sibling_zo_stopwords (pathian, tiu-in, apat) & unknown_words_ratio ($\approx 38%$) |
| Gangte | Gangte Bible | Gen 1, Ex 20, Matt 5, Luke 2, Rom 8, Rev 21 | other |
other |
100% | 0.0000 | sibling_zo_stopwords (pathen, hepa, dih-in) & unknown_words_ratio ($\approx 40%$) |
| Zou | Zou Bible | Gen 1, Ex 20, Matt 5, Luke 2, Rom 8, Rev 21 | other |
other |
100% | 0.0000 | sibling_zo_stopwords (pasian, a-in, leh-in) & unknown_words_ratio ($\approx 51%$) |
| Thadou | Thadou-Kuki Bible | Gen 1, Ex 20, Matt 5, Luke 2, Rom 8, Rev 21 | other |
other |
100% | 0.0000 | sibling_zo_stopwords (pathen, chun, tichun) & unknown_words_ratio ($\approx 67%$) |
| English | WEB (World English) | Gen 1, Ex 20, Matt 5, Luke 2, Rom 8, Rev 21 | english |
english |
100% | 0.0000 | english_stopword_ratio ($>0.08$) & unknown_words_ratio ($>0.70$) |
Cognate Resolution: Closely related sibling languages like Mizo share up to 78% unigram overlap with Hmar.
hmaraniamcleanly resolves sibling Zo languages without requiring massive full dictionaries by combining vocabulary completeness (unknown_words_ratio$\le 0.18$) with curated structural markers (sibling_zo_stopwords).
2. Real-World Web Archive Benchmark (~1,300 Scraped Documents)
Evaluated on real-world scraped web archives across 5 major Hmar/Zo web publishers:
| Publisher Web Archive | Corpus Source / Format | Evaluated Items | Hmar Posts Detected (%) | English Posts Detected (%) | Other / Mixed Posts (%) | Avg Hmar Confidence | Mean Casual Hmar Ratio | Mean Formal Hmar Ratio | Mean Unknown Words Ratio | Primary Content Profile |
|---|---|---|---|---|---|---|---|---|---|---|
L. Keivom Archive (keivom) |
Blogger API JSON | 300 | 199 (66.3%) | 32 (10.7%) | 69 (23.0%) | 0.8320 | 79.3% | 70.0% | 20.7% | Authentic Hmar literary essays & prose |
Inpui Journal (inpui) |
Blogger API JSON | 291 | 124 (42.6%) | 67 (23.0%) | 100 (34.4%) | 0.7400 | 63.7% | 55.7% | 36.3% | Bilingual news journal & opinion pieces |
HSA Portal (hsa) |
WordPress API JSON | 177 | 23 (13.0%) | 38 (21.5%) | 116 (65.5%) | 0.5730 | 53.7% | 46.7% | 46.3% | Student association alerts & mixed posts |
Hmarram.com (hmarram) |
WordPress API JSON | 235 | 12 (5.1%) | 209 (88.9%) | 14 (6.0%) | 0.7762 | 31.2% | 23.8% | 68.8% | Tech articles & English press releases |
Virthli News (virthli) |
Scraped Raw HTML | 296 | 5 (1.7%) | 267 (90.2%) | 24 (8.1%) | 0.8721 | 17.6% | 13.4% | 82.4% | Employment alerts & exam guidelines |
- Literary Archives: Archives like L. Keivom and Inpui Journal feature rich Hmar prose and opinion articles, achieving high Hmar classification rates ($42.6% - 66.3%$) and high token ratios ($63.7% - 79.3%$).
- Community News & Recruitment Notices: Community portals like Hmarram and Virthli publish predominantly in English (recruitment notices, exam guidelines, press statements).
hmaraniamaccurately tags these as"english"or"other"without false-positive over-classification.
Error Handling
hmaraniam provides clear, descriptive error messages:
import hmaraniam
# Raises ValueError for unsupported modes
try:
hmaraniam.detect("Text", mode="ultra")
except ValueError as e:
print(e)
# Raises TypeError for non-string input
try:
hmaraniam.detect(12345)
except TypeError as e:
print(e)
License
Published under the MIT License by the Hmar Heritage Project.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hmaraniam-0.1.0.tar.gz.
File metadata
- Download URL: hmaraniam-0.1.0.tar.gz
- Upload date:
- Size: 107.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
064c4afbb25e067549a6179bb38296fc8ee716c4dad98e6fe2de8f1239b67402
|
|
| MD5 |
e06a7ccadf13a51ad502f64815e35a20
|
|
| BLAKE2b-256 |
9790c44be83204a06778070dcf15028a86605d6a37585b370aabfe7138958889
|
File details
Details for the file hmaraniam-0.1.0-py3-none-any.whl.
File metadata
- Download URL: hmaraniam-0.1.0-py3-none-any.whl
- Upload date:
- Size: 102.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d6399a5cfdd0e7c68971a92f2c6c8fe41946ad86681d4287c8c85854ee695a0
|
|
| MD5 |
9cb2ca16e15b18aea5aa4e9e0c21c0a2
|
|
| BLAKE2b-256 |
4e60df3d4f9be9105d58e5bac3d37ed1dde33f5051da23eadb09ed01d4cf920a
|