Hlavní navigace

Ohýbání slov a české fulltexty

Pavel Houser

Čeština je, zejména oproti angličtině, jazykem velmi ohebným. Jakým způsobem řešit tento problém v internetových vyhledávačích? Základní pomůckou je používání derivace a lemmatizace, které umožňují převádění výrazů na základní slovníkový tvar a zpět. Kterak si v této disciplíně stojí české fulltextové stroje?

Většina českých slov se skloňuje tak, že se jednoduše k základnímu tvaru (1. pád) přidávají nějaké koncovky. Potom tedy při zadání výrazu „vlkodlak“, eventuálně „vlkodlak*“, najdete všechny jeho příslušné tvary (alespoň v jednotném čísle, všichni „vlkodlaci“ se nám ale už ztratí).

Poměrně často se však stává, že slovo při skloňování nějak mění i svůj kmen. Ukázkový příklad představuje „dům“. Pokud chcete podchytit veškerý výskyt tohoto výrazu, musíte zadat buď všechny pády a mezi nimi operátor OR, nebo tvořit konstrukce ve stylu „d?m*“ (otazník jako divoký atribut nahrazující pouze jeden znak, hvězdička jako libovolně dlouhé pravostranné rozšíření). Je však jasné, že dotazu „d?m*“ vyhoví i obrovské množství slov, o která tazatel vůbec nestojí.

Když vyhledávač v odpovědi na váš dotaz nevezme v potaz stránky, kde se hledaný výraz nachází s jinou pádovou koncovkou (či odlišném čase, hledali-li byste dle sloves), bude jeho výstup poněkud zkreslený. Předně, zřejmě vás zajímá jakýkoliv výskyt vašeho slova bez ohledu na pád. Žebříček stanovený pouze podle prvního pádu bude mít úplně jiné pořadí.

Navíc, pokud hledáte nějaké méně frekventované slovo, je docela dobře možné, že se v prvním pádu nemusí v nějakém dokumentu vyskytovat vůbec. Vyhledávač, který jen porovnává oba řetězce, jej prostě nenajde a vy se o jeho existenci nijak nedozvíte – leda by vás napadlo začít zadávat další tvary.

Naštěstí existují metody, jak se s popsaným problémem vypořádat. Postup, jímž převedete výrazy ze všech tvarů na základní tvar slovníkový, se označuje jako lemmatizace a příslušný nástroj lemmatizátor. Inverzní metoda, která udělá ze základního tvaru množinu veškerých odvozenin, se nazývá derivací (a nástroj je logicky derivátor).

Snadno nahlédnete, že derivaci i lemmatizaci by vyhledávací stroj mohl různě kombinovat. Mohl by například vedle sebe udržovat databázi základních tvarů a obyčejný seznam slov nalezených v dokumentech. Mohl by vyhledávání v obou databázích různě kombinovat. Mohl by se dokonce pokoušet provádět derivaci či lemmatizaci přímo „za běhu“, tj. různě si výraz zadaný uživatelem do formuláře převádět.

Všemi těmito možnostmi se ale budeme zabývat snad někdy jindy. Nyní se podíváme pouze na to, zda se zmíněné technologie v českých fulltextech vůbec využívají.

V této souvislosti ještě jednu poznámku pro šťouraly: podle čeho vlastně hloupý počítač pozná, jak slovo lemmatizovat či derivovat a kterak se vypořádá s příslušnými mnohoznačnostmi? Mohli bychom se sice pokoušet o nějaké „inteligentní“ postupy spojené s analýzou struktury věty, ale zpravidla se spokojíme prostě s přiřazením obou tvarů podle slovníku. Takže při lemmatizaci výrazu „vesel“ si slovo převedeme na oba základní tvary „veslo“ i „veselý“, aniž bychom zkoumali, o co konkrétně se jedná. Existují samozřejmě i jiné přístupy (ale to třeba, pro změnu, někdy jindy).

Jak tedy zjistit, zda české vyhledávače používají lemmatizaci a derivaci? Pokud zadáte například oslovení „kormoráne“, nenajdete skoro nic (což je logické, většina lidí s kormorány nemluví) – ovšem ani mnohem četnější dokumenty obsahující slovo „kormorán“. Tento pokus ale bohužel nemá velkou výpovědní hodnotu. Stroj zřejmě předpokládá, že vás zajímá speciálně 5. pád a nesnaží se myslet za vás.

Něco jiného však je, pokud byste při hledání výrazu v prvním pádě minuli dokument, kde je toto slovo v pádu jiném. Pro malý test českých fulltextů potřebujeme splnit následující podmínky:

  • musí jít o slovo, kde se skloňování neprovádí pouze přidáváním hlásek, ale dochází rovněž ke změně v kmeni
  • musí jít o slovo velmi málo frekventované
  • ideálně by mělo jít o slovo, které se přednostně vyskytuje v nikoliv prvním pádě (např. je součástí nějaké fráze, která se používá častěji než základní tvar slova)

Pokud nyní na zadání výrazu typu „ředkev“ najdeme dokument, kde se např. vyskytuje pouze tvar „ředkve“, leč nikoliv „ředkev“, dokázali jsme použití lemmatizátoru. Vzhledem k tomu, že vyhledávače se orientují nejen podle vlastního textu na stránce, bude lépe prohledávat zdrojový HTML kód.

Podle mých zkušeností / pokusů však ani WebFast, ani ostatní české fulltexty běžící na stoji Empyreum popisované technologie nepoužívají. Samozřejmě se tvůrců technologií lze zeptat. :-)

Existuje ale i řada jiných způsobů, jak se dostat pravdě na kloub. Především vymyslet ono skutečně málo frekventované slovo, které odhalíme i v dalších pádech. Teoreticky je také možné, že lemmatizace a derivace se nějak používají, ale mění se při nich selekční váha. Na slovo „racek“ se tedy nalezne i dokument obsahující pouze „racka“, ale bude umístěn až někde dole. Proto je nutné experimentovat se slovy, u nichž je šance, že v prvním pádě nebudou vůbec k nalezení. Máte nějaký nápad, jaké slovo by to mohlo být?

Další možností je vytvořit dokument složený např. pouze z výrazu „turka, turka, turka“, počkat, až jej roboti zaindexují a potom zkusit, zda na slovo „turek“ nějaký fulltext vrátí i vaši stránku. Osobně o tom pochybuji, ale třeba budete mít více štěstí.

Anketa

Který český fulltextový stroj dle vás oplývá nejkvalitnější lemmatizací?

Našli jste v článku chybu?