streda 9. apríla 2008

Hľadanie v korpuse

Trvalo mi dosť dlho, kým som sa vysekal z prevádzkových problémov a mohol sa venovať zase niečomu zaujímavejšiemu :) Pretože som momentálne nahradil poker za scrabble, tak som si povedal, že prečo nespaviť program proti ktorému by sa dalo hrať. Ja viem, že to chce dostatočnú slovnú zásobu a vhodnú stratégiu. Zatiaľ budem spokojný ak to bude schopné hrať písomné súťaže, kde hrá človek po sebe dva ťahy. Tam stratégiu netreba, jednoducho sa vyskúšajú všetky možnosti (a zatiaľ nemám ani predstavu ako dlho by to trvalo).

Na toto je treba slušnú morfologickú databázu, alebo aspoň zoznam platných slov. Pretože taká veľká morfologická databáza sa dá použiť aj v úplne bežných veciach ako je fulltextové vyhľadávanie, tak som sa do toho pustil. Ako to robiť poloautomaticky som navrhol už v diplomke (rýchlosť pridávania cca 300 slov / hodinu). Na to, aby som to takto robil som však príliš lenivý. A tak som sa rozhodol použiť veľký korpus (SNK - 300 miliónov).

V neoznačkovanom (či v tomto prípade štatisticky označkovanom) korpuse sa nedá spoliehať na nič okrem slovných tvarov. Ako som už predtým zistil jedna z najťažších vecí je nájsť, čo je vlastne základný tvar (lemma). V podstate sa nie poriadne čoho chytiť. Ak vychádzame len zo slov, tak je to dosť dobré pre človeka, ale všetko automatické dávalo hrozné (potrebujeme skoro 100%) výsledky. Jediná vec, ktorú ma napadlo použiť sú predložky. Najma tie, ktoré sa viažu len s jedným pádom. Okamžite totiž vieme pád a to sa dá slušne využiť, pretože lemma sa dá tipnúť (tj. vyskúšať všetky možnosti - vďaka kritériam na priradeniu do vzoru sa zbavíme najvačších hlúpostí.)

Zatiaľ som robil pokusy len s prídavnými menami a predložkou pri (frekvencia ~500K). Po úvodnom spracovaní som získal asi 30K možných priradení slov k lemma/vzor. To vyzeralo asi takto:

absurdnej:k2gFnSc6d1:absurdn
absurdnej:k2gFnSc6d1:absurdni
absurdnej:k2gFnSc6d1:absurdní
absurdnej:k2gFnSc6d1:absurdny
absurdnej:k2gFnSc6d1:absurdný
absurdných:k2gMnPc6d1:absurdn
absurdných:k2gMnPc6d1:absurdný
Z toho sa mi podarilo vybrať len tie varianty, ktoré pripadali do úvahy. To za mňa spravila Langusta (generátor a GUI na pridávanie slov) a už hotové vzory pre prídavné mená. Následne som získal:


absurdnej:k2gFnSc6d1:absurdní:[vtáčí]
absurdnej:k2gFnSc6d1:absurdný:[pekný]
absurdných:k2gMnPc6d1:absurdný:[pekný]


A to už vyzerá omnoho lepšie. Posledným krokom je nechať len tie dvojice (lemma:vzor), ktoré sú v prieniku existujúch. V tomto prípade to bude len 'absurdný:pekný'. Je vidno, že taká koncovka -ej mi je pri prídavných menách vcelku nanič, pretože patrí do každého vzoru. Aj napriek tomu sa podarilo nájsť 4117 prídavných mien a ich základných tvarov. Samozrejme, že časť z toho budú preklepy - ale budú určené správnou značkou. Objavilo sa aj pár (<10) style="font-style: italic;">kí, (zo slova dom) - ktoré bude treba neskor označiť, pretože by mali mať málo výskytov. Toto sa, ale chystám riešiť až keď bude tých výsledkov viac.

ToDo:
  • overiť aj na predložke pre
  • generovať tieto pravidlá z existujúcich vzorov (to nebude až tak ľahké a niekedy ani možné)

Žiadne komentáre: