, ,

Od 2011. do Rusta: Kako sam izgradio Cro-Stem, najbrži hrvatski stemmer

·

cro_stem

Otkrijte kako sam izgradio Cro-Stem, ultra-brzu Rust biblioteku za hrvatski stemming. Od analize Nikole Ljubešića Ivana Pandžića do automatizirane objave na PyPI-u koristeći GitHub Actions.

Sjedim sinoć ispred ekrana, sat je već odavno prošao ponoć. Ispred mene je backend mog projekta **MatematikaPro**, sustava koji bi trebao pomagati djeci da uče matematiku na najprirodniji mogući način. Ali postoji problem. Svaki put kad dijete upiše nešto poput *”pokaži mi množenje”* ili *”kako se radi dijeljenje s ostatkom”*, moj sustav troši nevjerojatne resurse samo da bi shvatio korijen te riječi.

Koristio sam velike AI modele, trošio tokene, čekao latenciju od 1000ms… i onda mi je pukao film. *”Zašto mi, kvragu, treba neuronska mreža od 8GB samo da bih znao da je ‘množenje’ korijen riječi ‘množiti’?”*

Tako je krenula priča o Cro-Stem-u. Ovo nije samo još jedan tutorial o kodu. Ovo je vlog o tome kako sam, kao električar i developer, odlučio spojiti staru lingvističku školu, modernu umjetnu inteligenciju i sirovu snagu Rust-a u jedan library koji danas možete instalirati s `pip install cro-stem`.

Ali postoji i dublji razlog zašto sam se upustio u ovo: digitalna suverenost našeg jezika.

Hrvatski jezik: “Programerski limb” i problem malih jezika

Većina developera danas živi u anglocentričnom svijetu. Ako radite na engleskom, stemming je “piece of cake”. Uzmete Porter Stemmer iz 1980-ih, odrežete “ing”, “ed” ili “s” i u 99% slučajeva ste pogodili korijen. Engleski je pozicijski jezik, jednostavan, gotovo “geometrijski” posložen u svojoj modernoj varijanti.

cro_stem_linguistic
Ova slika je zapravo “prije i poslije” Cro-Stem koda na djelu

Zašto je naš jezik “težak” za strojeve?

Hrvatski je visokoinflektivan jezik. Riječ kod nas nije statičan entitet; ona je kameleon. Imamo sedam padeža, dva broja, tri roda… jedna obična imenica može imati desetke oblika.

Glagoli su još gori.

Kada programer pokuša napraviti običnu pretragu, on se suočava s problemom: korisnik upiše “škola”, ali u bazi imaš “školi”, “škole”, “školama”. Bez dobrog stemmera, tvoj sustav je slijep.

Tu dolazimo do onoga što zovem “digitalni jaz”. Tehnološki divovi iz Silicijske doline fokusiraju se na jezike s milijardama govornika.

Hrvatski, sa svojih 4-5 milijuna govornika, često dobiva mrvice — generičke modele koji “nekako” rade, ali promašuju samu srž i ljepotu našeg jezika.

Ako mi sami ne izgradimo alate za naš jezik, nitko drugi neće. Ovisiti o crnoj kutiji nekog ogromnog LLM-a (Large Language Model) za osnovne lingvističke operacije je kao da zovete NASA-u da vam izračuna kusur u trgovini. Skupo je, sporo i nepotrebno troši resurse planeta.

Arheologija koda: Duhovi prošlosti

Prvo što svaki programer napravi kad ima problem je — pretraži što su radili drugi. Tako sam naletio na rad Ivana iz 2007. godine dok je Nikola napravio CroStem 2011, algoritam koji je u to vrijeme bio revolucionaran. Ali, budimo realni, 2011. je bila prapovijest.

iPhone 4 je bio vrhunac tehnologije u to vrijeme, a ja sam još uvijek mislio da je HTML vrh.

Nikolin algoritam je bio temeljen na heuristici, na skupu pravila. Ali bio je nepotpun za moderne potrebe. Falili su prefiksi, falila je brzina, falila je jednostavna integracija u moderan Python stack. Shvatio sam da imam “missing link” — znanstvenu podlogu koja je odlična, ali joj treba moderna “karoserija” i brutalna optimizacija.

Moj tim: Ja, Claude, Gemini i Antigravity

Nisam ovo radio sam. Živimo u 2026. godini i tko god kaže da ne koristi AI alate za razvoj, vjerojatno laže ili gubi vrijeme. Moj tim su bili aistudio.google ,Claude 3.5, Gemini-cli i Antigravity.

Moj proces je izgledao ovako: ja bih postavio arhitektonski okvir (jer ja znam što mojoj kući/kodu treba, ja sam taj električar koji spaja žice), a onda bih koristio radnu snagu AI modela da prožvaču onih 629 pravila i 131 transformaciju hrvatskog jezika. AI mi je pomogao da brzo prototipiram, da testiram rubne slučajeve i da napišem boilerplate za Rust bindings koji su inače dosadni za pisanje. Ali odluka o tome kako će teći pipeline? To je bila moja stvar.

Arhitektura Cro-Stem-a: 5 faza pročišćenja

Odlučio sam da Cro-Stem mora raditi kao savršeno podmazan stroj:

cro-stem_arhitektura
*Arhitektura Cro-Stem pipeline-a: Od sanitizacije do pametne normalizacije.*

1. **Sanitizacija**: UTF-8 čišćenje i micanje smeća.

2. **Iznimke (Exceptions)**: Moja `HashMap` koja presreće nepravilne riječi.

3. **Sufiksi**: Longest Match First logika koja skida nastavke poput “-anje” ili “-njak”.

4. **Prefiksi**: Napokon podrška za “naj-“, “pre-” i ostale matematičke prefikse.

5. **Normalizacija**: Magija koja vraća “lozi” u “loga”.

Zašto, pobogu, Rust?

Usporedite tvoj stari kôd (ili veliki LLM) s ovim Rust rješenjem:

cro_stem_benchmark
*Benchmark usporedba: Rust odnosi pobjedu tamo gdje AI i stara heuristika zapinju.*

Rust mi je omogućio da radim NLP koji ne troši ni memoriju ni struju niti pare. Za MatematikaPro backend, to je bila razlika između “skoro se učitalo” i “već je tu”.

Globalna Distribucija: CI/CD i PyPI

Nakon što smo sredili most između Rusta i Pythona preko **PyO3** i **Maturina**, preostalo je samo jedno — pustiti ga u svijet.

cro_stem_global_release
*Naš CI/CD workflow: Buildanje za sve sustave i automatski upload na PyPI.*

Implementirao sam **GitHub Actions** robotiku koja automatski gradi verzije za Windows, Linux i Mac svaki put kad opalim novi tag. Par minuta poslije, sve je spremno za cijeli svijet.


Isprobajte ga sami:

*   **PyPI Paket:** (https://pypi.org/project/cro-stem/)

*   **GitHub Repozitorij:** (https://github.com/Ja1Denis/Cro-Stem)

**Primjer upotrebe u Pythonu:**

```python
import cro_stem
print(cro_stem.stem("najljepši")) # Output: 'lijep'
```

Zaključak: Povratak struji

Kao električar, znam da sustav radi samo ako nema otpora u žicama. Kao developer, naučio sam da kod radi najbolje kad nema otpora u logici.

**Cro-Stem** je rezultat te filozofije. Nije savršen, ali je brz, lagan i rješava konkretan problem bez nepotrebnog čekanja.

P.S. Ako vas zanima šira slika o tome kako umjetna inteligencija mijenja naš posao, bacite oko na moje ostale članke o AI