280 lines
6.8 KiB
Python
280 lines
6.8 KiB
Python
"""
|
|
Post-processing module that adds Romanian diacritics to text.
|
|
Maps common words without diacritics to their correct forms.
|
|
"""
|
|
|
|
import re
|
|
|
|
# Common Romanian words: without diacritics -> with diacritics
|
|
# Only includes words where the diacriticed form is unambiguous
|
|
WORD_MAP = {
|
|
# A
|
|
"adevarata": "adevărată",
|
|
"adevarate": "adevărate",
|
|
"adevarat": "adevărat",
|
|
"adevaratii": "adevărații",
|
|
"adancime": "adâncime",
|
|
"ajuta": "ajuta",
|
|
"analfabet": "analfabet",
|
|
"aceasta": "aceasta",
|
|
"afara": "afară",
|
|
"altadata": "altădată",
|
|
"amandoi": "amândoi",
|
|
"amanare": "amânare",
|
|
"amintiri": "amintiri",
|
|
"anumita": "anumită",
|
|
"anumite": "anumite",
|
|
"apa": "apă",
|
|
"apoi": "apoi",
|
|
"asa": "așa",
|
|
"asadar": "așadar",
|
|
"asemanare": "asemănare",
|
|
"asemenea": "asemenea",
|
|
"asupra": "asupra",
|
|
"astazi": "astăzi",
|
|
"asteapta": "așteaptă",
|
|
"asteptare": "așteptare",
|
|
"ati": "ați",
|
|
"atata": "atâta",
|
|
"atatia": "atâția",
|
|
"atunci": "atunci",
|
|
|
|
# B
|
|
"baiatul": "băiatul",
|
|
"baiat": "băiat",
|
|
"baieti": "băieți",
|
|
"baietii": "băieții",
|
|
"batran": "bătrân",
|
|
"batrana": "bătrână",
|
|
"batranete": "bătrânețe",
|
|
"batrani": "bătrâni",
|
|
"buna": "bună",
|
|
|
|
# C
|
|
"cand": "când",
|
|
"candva": "cândva",
|
|
"cat": "cât",
|
|
"cata": "câtă",
|
|
"cate": "câte",
|
|
"cati": "câți",
|
|
"cativa": "câțiva",
|
|
"cateva": "câteva",
|
|
"catre": "către",
|
|
"caldura": "căldură",
|
|
"calduros": "călduros",
|
|
"calatorie": "călătorie",
|
|
"calatori": "călători",
|
|
"cautare": "căutare",
|
|
"cautam": "căutăm",
|
|
"casa": "casă",
|
|
"casuta": "căsuță",
|
|
"compasiune": "compasiune",
|
|
"constientiza": "conștientiza",
|
|
"constiinta": "conștiință",
|
|
"constient": "conștient",
|
|
"copacii": "copacii",
|
|
"curateniei": "curățeniei",
|
|
"curatenie": "curățenie",
|
|
|
|
# D
|
|
"deasupra": "deasupra",
|
|
"deseuri": "deșeuri",
|
|
"deseurile": "deșeurile",
|
|
"dimineata": "dimineață",
|
|
"disparitia": "dispariția",
|
|
"disparitie": "dispariție",
|
|
"dupa": "după",
|
|
|
|
# E
|
|
"emotie": "emoție",
|
|
"emotii": "emoții",
|
|
|
|
# F
|
|
"facand": "făcând",
|
|
"facuta": "făcută",
|
|
"fara": "fără",
|
|
"fiinta": "ființă",
|
|
"fiinte": "ființe",
|
|
"folosesti": "folosești",
|
|
"folosim": "folosim",
|
|
"functie": "funcție",
|
|
"functioneaza": "funcționează",
|
|
|
|
# G
|
|
"gasesti": "găsești",
|
|
"gasim": "găsim",
|
|
"gasit": "găsit",
|
|
"gandeste": "gândește",
|
|
"gandire": "gândire",
|
|
"ganduri": "gânduri",
|
|
"gradina": "grădină",
|
|
"gradinile": "grădinile",
|
|
|
|
# I
|
|
"iarasi": "iarăși",
|
|
"iata": "iată",
|
|
"inainte": "înainte",
|
|
"inaintea": "înaintea",
|
|
"incalzire": "încălzire",
|
|
"incalzirea": "încălzirea",
|
|
"incepe": "începe",
|
|
"incepem": "începem",
|
|
"inceput": "început",
|
|
"incerca": "încerca",
|
|
"inchide": "închide",
|
|
"inchis": "închis",
|
|
"inconjuratoare": "înconjurătoare",
|
|
"indata": "îndată",
|
|
"indeajuns": "îndeajuns",
|
|
"indrazneala": "îndrăzneală",
|
|
"informatii": "informații",
|
|
"informatie": "informație",
|
|
"inima": "inimă",
|
|
"inseamna": "înseamnă",
|
|
"insemnatate": "însemnătate",
|
|
"intelege": "înțelege",
|
|
"intelegem": "înțelegem",
|
|
"inteles": "înțeles",
|
|
"intotdeauna": "întotdeauna",
|
|
"intoarcere": "întoarcere",
|
|
"intr-un": "într-un",
|
|
"intr-o": "într-o",
|
|
"intrebare": "întrebare",
|
|
"intrebari": "întrebări",
|
|
"invatam": "învățăm",
|
|
"invata": "învață",
|
|
"invatare": "învățare",
|
|
|
|
# J
|
|
"jumatate": "jumătate",
|
|
|
|
# L
|
|
"lantul": "lanțul",
|
|
"legatura": "legătură",
|
|
"lumina": "lumină",
|
|
|
|
# M
|
|
"mancare": "mâncare",
|
|
"mancarea": "mâncarea",
|
|
"masina": "mașină",
|
|
"masini": "mașini",
|
|
"masinile": "mașinile",
|
|
"mediul": "mediul",
|
|
"mostenire": "moștenire",
|
|
"mostenirea": "moștenirea",
|
|
"muntii": "munții",
|
|
"munti": "munți",
|
|
|
|
# N
|
|
"natiune": "națiune",
|
|
"natura": "natură",
|
|
"naturii": "naturii",
|
|
|
|
# O
|
|
"oamenii": "oamenii",
|
|
"oras": "oraș",
|
|
"orasele": "orașele",
|
|
"orase": "orașe",
|
|
|
|
# P
|
|
"padure": "pădure",
|
|
"paduri": "păduri",
|
|
"padurile": "pădurile",
|
|
"padurea": "pădurea",
|
|
"pamant": "pământ",
|
|
"pamantul": "pământul",
|
|
"pana": "până",
|
|
"pasari": "păsări",
|
|
"pasarile": "păsările",
|
|
"pasare": "pasăre",
|
|
"planteaza": "plantează",
|
|
"plantam": "plantăm",
|
|
"poluare": "poluare",
|
|
"poluarea": "poluarea",
|
|
"populatie": "populație",
|
|
"populatia": "populația",
|
|
"povesteste": "povestește",
|
|
"protejeaza": "protejează",
|
|
"protejam": "protejăm",
|
|
"protectie": "protecție",
|
|
"protectia": "protecția",
|
|
"putina": "puțină",
|
|
"putin": "puțin",
|
|
|
|
# R
|
|
"ramanem": "rămânem",
|
|
"ramane": "rămâne",
|
|
"ramas": "rămas",
|
|
"raspuns": "răspuns",
|
|
"raspunsul": "răspunsul",
|
|
"raspunsuri": "răspunsuri",
|
|
"raspunde": "răspunde",
|
|
"rauri": "râuri",
|
|
"raurile": "râurile",
|
|
"rau": "râu",
|
|
"reciclare": "reciclare",
|
|
"reciclam": "reciclăm",
|
|
"reciclarea": "reciclarea",
|
|
"reducerea": "reducerea",
|
|
"reutilizare": "reutilizare",
|
|
"reutilizam": "reutilizăm",
|
|
|
|
# S
|
|
"sansa": "șansă",
|
|
"sanse": "șanse",
|
|
"scoala": "școală",
|
|
"scolile": "școlile",
|
|
"scoalele": "școlile",
|
|
"seara": "seară",
|
|
"siguranta": "siguranță",
|
|
"situatie": "situație",
|
|
"solutie": "soluție",
|
|
"solutii": "soluții",
|
|
"stim": "știm",
|
|
"stie": "știe",
|
|
"stiinta": "știință",
|
|
"stiintific": "științific",
|
|
"stiati": "știați",
|
|
"sustenabilitate": "sustenabilitate",
|
|
|
|
# T
|
|
"tara": "țară",
|
|
"tarile": "țările",
|
|
"tari": "țări",
|
|
"temperaturi": "temperaturi",
|
|
"trebuie": "trebuie",
|
|
|
|
# U
|
|
"unda": "undă",
|
|
"uneori": "uneori",
|
|
"usoara": "ușoară",
|
|
"usor": "ușor",
|
|
|
|
# V
|
|
"vant": "vânt",
|
|
"vantul": "vântul",
|
|
"viata": "viață",
|
|
"vietuitoare": "viețuitoare",
|
|
"vietuitoarele": "viețuitoarele",
|
|
}
|
|
|
|
|
|
def add_diacritics(text: str) -> str:
|
|
"""Add Romanian diacritics to text using word-level replacement."""
|
|
|
|
def replace_word(match):
|
|
word = match.group(0)
|
|
lower = word.lower()
|
|
|
|
if lower in WORD_MAP:
|
|
replacement = WORD_MAP[lower]
|
|
# Preserve original capitalization
|
|
if word[0].isupper():
|
|
replacement = replacement[0].upper() + replacement[1:]
|
|
if word.isupper():
|
|
replacement = replacement.upper()
|
|
return replacement
|
|
return word
|
|
|
|
# Match whole words only
|
|
return re.sub(r'\b[a-zA-ZăâîșțĂÂÎȘȚ]+\b', replace_word, text)
|