Lematizátor slovenského jazyka

Stemmer je lingvistický modul na rozpoznávanie slov bez ohľadu na ich formu. Z tohto dôvodu obsahuje informácie o vzťahoch slovných foriem. Pretože slovenčina je veľmi ohybný (od 8 do 16 koncoviek v závislosti na gramatickej kategórii) a nepravidelný jazyk, účinná a precízna implementácia takéhoto modulu je omnoho ťažšia ako napr. v angličtine.

Pracovné módy

  • Nájdenie základnej slovnej formy (pri vložení slova v ľubovoľnej forme).

    Napr.: pre slová ‘včela’, ‘včely’, ‘včele’, ‘včelu’, ‘včelou’, ‘včely’, ‘včelách’, ‘včelám’, ‘včelami’ (skloňovanie podstatného mena ‘včela’) vrátená základná forma je slovo ‘včela’ (nominatív);
    pre slová ‘zlomím’, ‘zlomíš’, ‘zlomí’, ‘zlomíme’, ‘zlomíte’, ‘zlomia’, ‘zlom’, ‘zlomme’, ‘zlomte’, ‘zlomil’, ‘zlomila’, ‘zlomilo’, ‘zlomili’, ‘zlomiac’, ‘zlomiť’ (časovanie slovesa ‘zlomiť’) vrátená základná forma je slovo ‘zlomiť’ (infinitív);
    pre slová ‘zelený’, ‘zeleného’, ‘zelenému’, ‘zelenom’, ‘zeleným’, ‘zelená’, ‘zelenej’, ‘zelenú’, ‘zelenou’, ‘zelené’, ‘zelených’, ‘zelenými’ (skloňovanie, pády zámena ‘zelený’) vrátená základná forma je slovo ‘zelený’ (nominatív v mužskom rode).

  • Generovanie všetkých slovných foriem (pri vložení slova v ľubovoľnej forme).
    V tomto prípade vráti všetky slovné formy (pozri vyššie uvedený príklad) bez ohľadu na slovnú formu na vstupe.

Opis funkčnosti

Algoritmus je založený na vyhľadávaní slov v slovníku, v dôsledku čoho je presné generovanie foriem takmer 100 %-né. Stemmery založené len na algoritme nie sú porovnateľné v presnosti so stemmerom založeným na slovníku; spôsobené je to vysokou ohybnosťou v slovenčine. Súčasné slovníky obsahujú slovnú zásobu na úrovni štandardnej kodifikovanej slovenčiny (Krátky slovník slovenského jazyka, Pravidlá slovenského jazyka) a tiež na množstve cudzích (pridaných do jazyka - zdomácnených) slov, hlavne z českého originálu.

Modul rozpoznáva formy (presnejšie ich príslušné vzťahy) tiež pre slová, ktoré sa líšia v stemmoch (čiže nielen koncovky slov). Napr. ‘osa’ – ‘ôs’; ‘byť’ – ‘je’, ‘som’; ‘ženiem’ – ‘hnať’.

V slovenčine je viac ako jedna základná forma pre veľa slov. Napr. pre slovo ‘zlom’ je základná forma ‘zlý’ (prídavné meno), zlomiť (sloveso), zlo (podstatné meno), zlom (podstatné meno ‘narušenie’). Modul vie generovať všetky tieto základné formy.

Iným lingvistickým problémom je pracovanie s homonymami. Napr. slová ‘mať’ (podstatné meno ‘matka’) a mať (sloveso) majú odlišné formy pri ohýbaní. Modul vie v závislosti na vstupnej slovnej forme generovať formy pre vhodné homonymum; v prípade základnej formy (homonymum) generovať slovné formy pre obidve homonymá.

Generovanie všetkých slovných foriem pre neznáme slová

Dôležitým rozšírením funkčnosti stemmera je špecifický modul na generovanie slovných foriem pre neznáme (nerozpoznateľné) slovo. Stemmery založené na slovníkoch neobsahujú priezviská, názvy produktov a tovarov, cudzie mená, ani kompletný súbor cudzích zdomácnených slov. Okrem toho tento súbor je charakteristický tým, že sa rýchlo mení.

Modul na generovanie slovných foriem pre neznáme slovo umožňuje generovať slová na základe algoritmu. Tento algoritmus na základe definovaných koncoviek odhaduje gramatickú kategóriu slova a jeho gramatické atribúty (pád, rod, čas, atď.). Na základe toho generuje súbor odhadnutých slovných foriem. Základný súbor obsahuje približne 370 koncoviek, na ktoré sa aplikujú iné pravidlá a 50 sekundárnych koncoviek. V prípade, že nie je možné presne určiť gramatickú kategóriu alebo gramatické atribúty, generuje sa súbor koncoviek, ktoré pokrývajú viac gramatických kategórií alebo atribútov. Súbor koncoviek a definičných pravidiel bol prepracovaný podľa všeobecných pravidiel skloňovania slov a štatistickej analýzy slovenskej slovnej zásoby.

Veľký súbor koncoviek umožňuje rozpoznať nielen koncovky pre tzv. volané základné slovné formy (nominatív, infinitív, mužský rod, jednotné číslo), ale aj pre slová vstupujúce v ohýbanej forme.

Tento špecifický algoritmus generuje obmedzený súbor koncoviek (priemerne 16 foriem), ale súčasne je vysoká pravdepodobnosť, že sa vygenerujú všetky slovné formy. Pre množstvo slov vrátený súbor foriem presne zodpovedá reálnemu súboru foriem vstupného slova.

Parametrizácie funkčnosti

Väčšinu vlastností stemmera možno nastaviť dynamicky pomocou rozhrania (interface) podľa potrieb v konkrétnej implementácii (použití). Parametricky možno nastaviť:

1. Vzťah medzi zápornými slovnými formami (slová začínajúce predponou „ne-“) a pozitívnymi slovnými formami. Môže byť nastavený, ak sa pre záporné slová generuje iba záporná základná forma (‘nemal’ – ‘nemať’), iba pozitívna základná forma (‘nemal’ – ‘mať’) alebo obidve formy (‘nemal’ – ‘nemať’, ‘mať’).

2. Vzťah medzi stupňovanými slovnými formami a nestupňovanými slovnými formami prídavných mien. Môže byť nastavený, ak sa pre stupňované prídavné meno generuje iba stupňovaná forma (‘najsmelšieho’ – ‘najsmelší’), generuje sa len nestupňovaná základná forma (‘najsmelšieho’ – ‘smelý’) alebo sa generujú obidve formy (‘najsmelšieho’ – ‘najsmelší’, ‘smelý’).

3. Vzťah medzi slovami s odlišnou gramatickou kategóriou a so spoločným koreňom slova. Napr. pre slovo ‘Petrova’ sa vráti slovo ‘Peter’, pre slovo ‘zlomenie’ sa vráti slovo ‘zlomiť ’, pre slovo ‘hlúpo’ sa vráti slovo ‘hlúpy’.

4. Počet rozpoznaných foriem. Veľa slov má viac ako jednu základnú formu (napr. pre slovo ‘zlom’ sú základnými formami ‘zlý’, ‘zlomiť’, ‘zlo’, ‘zlom’). Môže byť nastavený podľa toho, či sa majú vrátiť všetky tieto formy alebo sa vyžaduje len prvá forma.

5. Špeciálnym parametrom je capitalization/case riadenie (veľké/malé písmená) vstupného slova (ak treba urobiť striktnú kapitalizáciu) a kontrola veľkosti písmen na výstupe (dodržiavanie vstupnej kapitalizácie alebo generovanie foriem bez kapitalizácie).

6. Generovanie všetkých slovných foriem pre neznáme (nespoznané) slová.

7. Použitie užívateľského slovníka.

Šumový zoznam (Stop words)

Šumový zoznam sa používa pri fulltextových vyhľadávacích/indexovacích aplikáciách. Je to zoznam slov, ktoré sa ignorujú v indexovaných dokumentoch počas tvorby indexu (a v dôsledku toho sa nedajú vyhľadávať). Slová v tomto zozname sa používajú v dokumentoch tak často, že ich existencia nie je dôležitá pre výsledky vyhľadávania, a preto nie sú zahrnuté do indexu.

V slovenčine je približne 700 slov v šumovom zozname; sú to hlavne spojky, predložky, častice, citoslovcia, zámená a niektoré slovesá.

Používateľské slovníky

Na definovanie stemmovania pre špecifické slová možno vytvoriť odlišné užívateľské slovníky. Stemmer môže používať jeden užívateľský slovník v jednej sekcii.

Slovník je v textovom formáte (použiteľný v každom softvéri, ktorý pracuje so slovami).  Jeho formát umožňuje efektívne definovať základ a ohyby slova. Z výkonnostných dôvodov potrebuje byť zdrojový slovník kompilovaný slovníkovým kompilerom (aplikácia založená na riadkovom príkaze vo Windows) predtým, ako ho použije stemmerový modul.

Podporovaná mapa znakov

Na kódovanie znakov na vstupe a výstupe je implementovaná súčasná Windows Eastern Europe Code Page (CP 1250). Podľa špecifikácie klienta možno implementovať ľubovoľnú mapu znakov.

Požiadavky na systém

Stemmer zaberá celkove približne 600 kB priestoru na disku (modul + slovník). Jednotlivá sekcia zaberá nie viac ako 120 kB pamäťového priestoru (kód + dynamicky prideľované dáta).