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).