Dotaz: Skloňování a synonyma (v PHP)
Pro jeden projekt potřebuji získat pro každé slovo nejen databázi všech jeho možných tvarů, ale i synonyma. Takže třeba pro slovo "zelená" získat i tvary "zelený", "zelené" a další, pro slovo "gauč" získat ekvivalentní "sedací souprava". Potřeboval bych ideálně poznat i kořen slova.
Zkoušel jsem pspell_suggest a podobné funkce v PHP, ale jsou zcela nespolehlivé, české slovníkové podklady pspellu jsou strašné.
Teoreticky by šel vzít slovník třeba z OpenOffice.org, převést jej do databázové podoby a používat alespoň pro ona synonyma.
Řešil jste někdo podobný problém?
Komentáře
Nový komentář
Pro přidání komentáře se musíte nejdříve registrovat Facebookem

Pro různé tvary bych si postupně pomocí skriptu, který by čerpal z http://prirucka.ujc.cas.cz/... , vytvořil databázi. Nějaký čas by to asi zabralo, ale udělá se to jednou a je po problému. Synonyma Vás už napadly - OpenOffice.
České slovníkové podklady pspellu opravdu strašné nejsou (pokud máte slovník v systému a správně nastavené kódování).
<?php
$pspell_link = pspell_new("cs", "", "","utf-8");
$suggestions = pspell_suggest($pspell_link, "koníšek");
foreach ($suggestions as $suggestion)
{
echo "$suggestion\n";
}
?>
Výsledek:
Honíšek
Konášek
Koníček
Kotíšek
Kožíšek
koníček
kožíšek
koní šek
koní-šek
Výsledky jsou seřazeny abecedně a jsou to jen návrhy pro správné hláskování, takže pro určování synonym nepoužitelné.
Ale je tu možnost použít slovník pro StarDict (česká synonyma k nalezení zde: http://lludvik.blogspot.com/2009/02/free-dictionary-stardict.html...) a PECL Extension (http://code.google.com/p/php-stardict/...)... případně udělat vlastní implementaci čistě v PHP.
[2] synonyma umím vyřešit přes slovníky OpenOffice, to je dostatečně kvalitní databáze.
Otázkou je jak na skloňování a kořen slova.
[3] Kvalitní morfologický slovník vytvořili na ÚFALu. Existuje i verze ke stažení zdarma s dostatečným počtem lemmat.
Nedávno jsem řešil podobný problém v C#, a tak jsem přeportoval stemmer z projektu Sphinx a trochu doplnil. Skloňování ve fulltextu neřeším (lemmatizátor je podstatně složitější než stemmer), prostě za kořen dám hvězdičku a najde to většinu tvarů.
[5] Tak pro aplikaci v C# by šel určitě použít http://hunspell.sourceforge.net/... , který využívá i OO.org - úmí krásně skloňovat podle vzorů, ale jeho nasazení do webové aplikace by bylo složitější.