Podpora fulltextového vyhľadávania

Ak vytvárate programový systém, do ktorého chcete zabudovať fulltextové vyhľadávanie, bude sa vám určite hodiť komponent, ktorý umožní používateľovi klásť otázky bez ohľadu na to, v akom morfologickom tvare ho zadá. Tak napríklad, ak napíše kurzy akcií, určite bude rád, keď mu program nájde aj článok obsahujúcí výraz vývoj kurzu akciíalebo len akcie. Práve na tieto účely vám vychádzame v ústrety s komponentom, ktorý poskytuje dve užitočné veci:

Pod základným tvarom slova (nazývaným aj lema) rozumieme väčšinou prvý pád jednotného čísla, napr. akcia. Existujú, samozrejme, aj slová, od ktorých sa jednotné číslo vytvoriť nedá, napr. prázdniny. V tom prípade lemou rozumieme 1. pád množného čísla.

V prípade slovies je základný tvar infinitív, napr. hľadať. V niektorých jazykoch však existujú opäť výnimky. Napr. taká bulharčina, ktorá infinitív vôbec nemá, chápe ako základný tvar 1. osobu jednotného čísla. Maďarčina, naopak, infinitív má, no ako lemu používa tvar 3. osoby jednotného čísla.

Aký základný tvar by ste však čakali v prípade prídavného mena slávnu? Ide o tvar ženského rodu, takže sa ponúkajú hneď dve možné odpovede – 1. pád ženského rodu slávna, alebo 1. pád mužského rodu slávny. Podobných diskutabilných prípadov by ste našli oveľa viac, napr. či od slovesa nie je je lema byť či nebyť, či je v privlastňovacom tvare otcovu lemou otcova, otcov či otec, či si v prípade podielovej číslovky pätiny vybrať pätina alebo päť, alebo či k príslovke lepšie vrátiť prvý stupeň dobre alebo prídavné meno dobrý. Všetky tieto veci si však budete môcť určiť sami podľa svojich potrieb.

Podobným spôsobom možno v prípade druhej funkcie špecifikovať, aký veľký rozsah tvarov chcete generovať pre danú lemu, teda či chcete od prídavných mien získať aj odvodené príslovky, od podstatných mien privlastňovacie tvary atď.

Jazyková časť

Základom celého riešenia je takisto ako v prípade korektora preklepov formálny popis morfológie, v porovnaní s ním je však obohatený o ďalšie informácie. Tými sú najmä všetky gramatické kategórie, napr.:

Určiť základný tvar slova však nie je také jednoduché, ako by sa mohlo zdať na prvý pohľad. Okrem pravidelných tvarov slov je totiž potrebné riešiť aj rôznorodé alternácie koreňa, ktoré sa vyskytujú v mnohých slovenských slovách. Máme na mysli dvojice typu mráz-mrazu, stôl-stola, kôň-koňa, brontosaurus-brontosauri, cesta-ciest, piecť-pečie či dokonca prípady ako hnať-ženiem, Zeus-Dia, česť-cti ap., kde sa mení od základu celé slovo. Podobné prípady sa nevyskytujú len v slovenčine, ale vo všetkých jazykoch. Aj v pomerne jednoduchej angličtine nájdeme prípady typu come-came, break-broken, alebo dokonca go-went.

Druhým problémom je homonymia. V mnohých tvaroch slov nie je totiž jednoznačné, od ktorého základu sú odvodené. Napr. plní môže byť odvodené buď od slova plniť (3. os. j. č., alebo od slova plný (1. p. mn. č.). Ďalšie príklady sú Martina (od Martin aj od Martina), nemá (sloveso v 3. os. j. č.) i ženský tvar prídavného mena nemý. Podobných prípadov je v slovenčine oveľa viac, takže niet divu, keď vám program nájde viac výsledkov. Verte, že všetky sú správne.

Programové riešenie

Programové riešenie je nanajvýš úsporné. Vďaka prepracovanému systému vzorov a kmeňov môžeme dátový súbor zredukovať skutočne na minimum. Viete napríklad, koľko je v slovenčine rôznych tvarov slov? Vyše 6,7 milióna. Ak ešte vezmeme do úvahy viacznačnosť, teda napr. že slovo ciest môže znamenať 2. pád množného čísla podstatného mena cesta, ale aj 2. pád množného čísla podstatného mena cesto, dospejeme k celkovému číslu 22 milionov rôznych slov. A predstavte si, že všetky tieto slová aj s príslušnými morfologickými informáciami zhrnieme do súboru veľkosti 1 MB. Trošku zveličene môžeme povedať, že nám stačí jeden bit na tri slovenské slová.

Vo väčšine informatických aplikácií platí, že veľkosť dát a rýchlosť vyhľadávania sú nepriamo úmerné. V našom prípade to tak ale nie je. Náš komponent dokáže vyhodnotiť 28 000 slov za sekundu, alebo ak chcete, spracovanie jedného slova mu trvá 0,000036 sekundy.

Dostupné funkcie

V súčasnosti ponúkame podporu fulltextového vyhľadávania pre širokú škálu jazykov (pozri tabuľku). Implementovaná je takisto na väčšine platforiem.

Ak si chcete svoj fulltextový vyhľadávač používateľsky ešte spríjemniť, odporúčame vám náš ďalší komponent – Slovník synoným.

Referencie

Možnosti morfologického vyhľadávania v rôznych jazykoch najlepšie vyskúšate v prekladových slovníkoch Lingea Lexicon. Jeho hlavné využitie je však vo vyhľadávacích systémoch rôznych produktov, napr. Fullcrum, Convera alebo vo vlastných firemných systémoch.