CoolFace
Apppublic

chwellofficial/nt360Slides

sourceHugging Faceupdated 5mo agoView on Hugging Face
0likes
ocr_language.py127 linesDownload Raw Back to utils
1"""2Map presentation UI language strings (LanguageType enum values from Next.js) to3Tesseract / LiteParse OCR language codes (ISO 639-3 where applicable).4 5Keep keys in sync with:6servers/nextjs/app/(presentation-generator)/upload/type.ts → LanguageType7"""8 9from __future__ import annotations10 11import re12from typing import Optional13 14# Values must match `LanguageType` string literals in the upload UI.15PRESENTATION_LANGUAGE_TO_TESSERACT: dict[str, str] = {16    "English": "eng",17    "Spanish (Español)": "spa",18    "French (Français)": "fra",19    "German (Deutsch)": "deu",20    "Portuguese (Português)": "por",21    "Italian (Italiano)": "ita",22    "Dutch (Nederlands)": "nld",23    "Russian (Русский)": "rus",24    "Chinese (Simplified - 中文, 汉语)": "chi_sim",25    "Chinese (Traditional - 中文, 漢語)": "chi_tra",26    "Japanese (日本語)": "jpn",27    "Korean (한국어)": "kor",28    "Arabic (العربية)": "ara",29    "Hindi (हिन्दी)": "hin",30    "Bengali (বাংলা)": "ben",31    "Polish (Polski)": "pol",32    "Czech (Čeština)": "ces",33    "Slovak (Slovenčina)": "slk",34    "Hungarian (Magyar)": "hun",35    "Romanian (Română)": "ron",36    "Bulgarian (Български)": "bul",37    "Greek (Ελληνικά)": "ell",38    "Serbian (Српски / Srpski)": "srp",39    "Croatian (Hrvatski)": "hrv",40    "Bosnian (Bosanski)": "bos",41    "Slovenian (Slovenščina)": "slv",42    "Finnish (Suomi)": "fin",43    "Swedish (Svenska)": "swe",44    "Danish (Dansk)": "dan",45    "Norwegian (Norsk)": "nor",46    "Icelandic (Íslenska)": "isl",47    "Lithuanian (Lietuvių)": "lit",48    "Latvian (Latviešu)": "lav",49    "Estonian (Eesti)": "est",50    "Maltese (Malti)": "mlt",51    "Welsh (Cymraeg)": "cym",52    "Irish (Gaeilge)": "gle",53    "Scottish Gaelic (Gàidhlig)": "gla",54    "Ukrainian (Українська)": "ukr",55    "Hebrew (עברית)": "heb",56    "Persian/Farsi (فارسی)": "fas",57    "Turkish (Türkçe)": "tur",58    "Kurdish (Kurdî / کوردی)": "kmr",59    "Pashto (پښتو)": "pus",60    "Dari (دری)": "prs",61    "Uzbek (Oʻzbek)": "uzb",62    "Kazakh (Қазақша)": "kaz",63    "Tajik (Тоҷикӣ)": "tgk",64    "Turkmen (Türkmençe)": "tuk",65    "Azerbaijani (Azərbaycan dili)": "aze",66    "Urdu (اردو)": "urd",67    "Tamil (தமிழ்)": "tam",68    "Telugu (తెలుగు)": "tel",69    "Marathi (मराठी)": "mar",70    "Punjabi (ਪੰਜਾਬੀ / پنجابی)": "pan",71    "Gujarati (ગુજરાતી)": "guj",72    "Malayalam (മലയാളം)": "mal",73    "Kannada (ಕನ್ನಡ)": "kan",74    "Odia (ଓଡ଼ିଆ)": "ori",75    "Sinhala (සිංහල)": "sin",76    "Nepali (नेपाली)": "nep",77    "Thai (ไทย)": "tha",78    "Vietnamese (Tiếng Việt)": "vie",79    "Lao (ລາວ)": "lao",80    "Khmer (ភាសាខ្មែរ)": "khm",81    "Burmese (မြန်မာစာ)": "mya",82    "Tagalog/Filipino (Tagalog/Filipino)": "tgl",83    "Javanese (Basa Jawa)": "jav",84    "Sundanese (Basa Sunda)": "sun",85    "Malay (Bahasa Melayu)": "msa",86    "Mongolian (Монгол)": "mon",87    "Swahili (Kiswahili)": "swa",88    "Hausa (Hausa)": "hau",89    "Yoruba (Yorùbá)": "yor",90    "Igbo (Igbo)": "ibo",91    "Amharic (አማርኛ)": "amh",92    "Zulu (isiZulu)": "zul",93    "Xhosa (isiXhosa)": "xho",94    "Shona (ChiShona)": "sna",95    "Somali (Soomaaliga)": "som",96    "Basque (Euskara)": "eus",97    "Catalan (Català)": "cat",98    "Galician (Galego)": "glg",99    "Quechua (Runasimi)": "que",100    "Nahuatl (Nāhuatl)": "nah",101    "Hawaiian (ʻŌlelo Hawaiʻi)": "haw",102    "Maori (Te Reo Māori)": "mri",103    # No dedicated Tahitian traineddata in default Tesseract bundles.104    "Tahitian (Reo Tahiti)": "eng",105    "Samoan (Gagana Samoa)": "smo",106}107 108_LOWER_MAP = {k.lower(): v for k, v in PRESENTATION_LANGUAGE_TO_TESSERACT.items()}109 110_OCR_CODE_RE = re.compile(r"^[a-zA-Z0-9_,+]+$")111 112 113def presentation_language_to_ocr_code(language: Optional[str]) -> str:114    """Resolve UI language label to a Tesseract language code; default English."""115    if language is None:116        return "eng"117    s = str(language).strip()118    if not s:119        return "eng"120    if s in PRESENTATION_LANGUAGE_TO_TESSERACT:121        code = PRESENTATION_LANGUAGE_TO_TESSERACT[s]122    else:123        code = _LOWER_MAP.get(s.lower(), "eng")124    if not _OCR_CODE_RE.fullmatch(code):125        return "eng"126    return code127