Metadata-Version: 2.4
Name: numere-ro
Version: 0.1.0
Summary: Conversia numerelor întregi în cuvinte, în limba română (cardinale și ordinale).
Author-email: Tudor Bumbu <tudor.bumbu@math.md>
License: MIT
Project-URL: Homepage, https://github.com/tudorbumbu/numere-ro
Keywords: romanian,numbers,num2words,numere,litere,nlp
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: Romanian
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Text Processing :: Linguistic
Requires-Python: >=3.7
Description-Content-Type: text/markdown
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"

# numere-ro

Conversia numerelor întregi în cuvinte, în **limba română** — cardinale și
ordinale. Implementare **pur algoritmică** (bazată pe reguli gramaticale),
**deterministă**, fără modele statistice și **fără dependențe externe**.

```python
from numere_ro import numar_in_litere, ordinal_in_litere

numar_in_litere(123)            # 'o sută douăzeci și trei'
numar_in_litere(2_000_000)      # 'două milioane'
numar_in_litere(20_000)         # 'douăzeci de mii'
numar_in_litere(-5)             # 'minus cinci'
numar_in_litere(16, diacritice=False)  # 'saisprezece'

ordinal_in_litere(2)            # 'al doilea'
ordinal_in_litere(2, gen="f")   # 'a doua'
ordinal_in_litere(21)           # 'al douăzeci și unulea'
```

## Instalare

```bash
pip install numere-ro
```

Din sursă (pentru dezvoltare):

```bash
pip install -e ".[dev]"
pytest
```

## Linia de comandă

```bash
python -m numere_ro 123                 # o sută douăzeci și trei
python -m numere_ro 2 --ordinal         # al doilea
python -m numere_ro 2 --ordinal --gen f # a doua
python -m numere_ro 16 --fara-diacritice
# sau, după instalare:
numar-in-litere 1234567
```

## API

### `numar_in_litere(n, *, diacritice=True) -> str`
Convertește un întreg (pozitiv, negativ sau zero) în cuvinte. Suportă valori
până sub 10²¹ (cvintilioane).

### `ordinal_in_litere(n, *, gen="m", diacritice=True) -> str`
Convertește un întreg `>= 1` în numeralul ordinal. `gen="m"` produce forma
masculină (`al ...lea`), `gen="f"` forma feminină (`a ...a`).

## De ce un algoritm și nu un model lingvistic?

Conversia număr → text este o problemă **deterministă**: pentru fiecare număr
există exact o formă corectă, dictată de reguli gramaticale. Un model
statistic (spaCy, LLM) ar fi mai lent, nedeterminist și imposibil de garantat
100% corect. Regulile implementate aici acoperă:

- formele speciale 11–19 (`unsprezece`, `paisprezece`, `șaisprezece`…);
- acordul de gen impus de cuvintele de scară (`două sute`, `două mii`,
  `douăzeci și una de mii`);
- conjuncția `și` între zeci și unități (`douăzeci și trei`);
- prepoziția `de` înaintea scării (`douăzeci de mii`, dar `o sută cinci mii`);
- scările `mie/mii`, `milion/milioane`, `miliard/miliarde`, …

## Licență

MIT
