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 6

  1. #1 Lavor Daniel ▲1 ▼0

    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.

  2. #2 Petr Duchek ▲0 ▼1

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

  3. #3 Radek Hulán autor webu ▲11 ▼0

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

  4. #4 Kotisch Petr ▲2 ▼0

    [3] Kvalitní morfologický slovník vytvořili na ÚFALu. Existuje i verze ke stažení zdarma s dostatečným počtem lemmat.

  5. #5 Tomáš Herceg

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

  6. #6 Petr Duchek

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