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?
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ší.