This is an old revision of the document!
Table of Contents
Morpho Challenge 2008
Stránky soutěže jsou na http://www.cis.hut.fi/morphochallenge2008/. E-mailová adresa organizátorů je morphochallenge2007@james.hut.fi. Poznámky k mému loňskému řešení jsou na stránce Morpho Challenge 2007.
Data mám v ~/data/morphochallenge/2008
. Programy mám v ~/projekty/morphochallenge
(odkaz na data vede i odsud). Původně byly v ~/zapoctaky/konc
.
setenv MC /home/zeman/projekty/morphochallenge
Příprava dat
Organizátoři používají trochu zvláštní kódování, navíc pro každý jazyk jiné. Napsal jsem si skript, který převede data od organizátorů do UTF-8. Bude umět i převod opačným směrem, což bude potřeba, až budu organizátorům posílat výsledky.
cd ~/data/morphochallenge/2008 gunzip -c wordlist.ara.gz | $MC/mc_convert.pl -f ar > wordlist.ar.txt gunzip -c wordlist.eng.gz | $MC/mc_convert.pl -f en > wordlist.en.txt gunzip -c wordlist.fin.gz | $MC/mc_convert.pl -f fi > wordlist.fi.txt gunzip -c wordlist.ger.gz | $MC/mc_convert.pl -f de > wordlist.de.txt gunzip -c wordlist.tur.gz | $MC/mc_convert.pl -f tr > wordlist.tr.txt
Můj skript pro automatické rozsekání slov na kmeny a koncovky předpokládá, že vstup je textový korpus ve formátu CSTS. Nejprve tedy musíme trénovací seznamy slov a jejich četností převést do tohoto formátu.
cd $MC foreach l (ar de en fi tr) mc2csts.pl < data/2008/wordlist.$l.txt -l $l > data/2008/$l.csts end
Zbytek této stránky je zatím pouhá kopie z roku 2007
Dostali jsme pro každý jazyk (angličtinu, němčinu, finštinu, turečtinu a arabštinu) seznam slovních tvarů a jejich četností. Měli jsme za úkol pro každý slovní tvar vrátit jeho dělení na morfémy. Morfémy mohly být identifikovány libovolným řetězcem, při vyhodnocování se pouze zjišťovalo, zda se u slov, která mají obsahovat tentýž morfém, skutečně opakuje stejně pojmenovaný morfém.
Moje zpracování se skládá ze dvou částí:
- Rozebrat slova na vstupu, získat seznam vzorů, kmenů a koncovek.
- Znova projít slova na vstupu, každé přiřadit k jednomu nebo několika vzorům a vypsat odpovídající rozklady.
Nijak nevyužívám informaci o četnosti slovních tvarů ani o kontextu slov v korpusu. Slovo umím rozložit na právě dva morfémy (kmen a koncovka) nebo nechat nerozložené. Při přiřazování slov ke vzorům se přednostně zjišťuje, zda známe přímo danou dvojici kmen-koncovka. Pokud žádnou takovou dvojici nenajdeme, zjišťujeme, zda rozpoznáme alespoň koncovky (aniž bychom znali kmen).
Potřebné skripty a výstupy jsou ve složce ~/zapoctaky/konc
.
Seznam vzorů se buduje takto (práce je rozdělena do několika kroků, protože zpracování velkých dat trvá dlouho a při opravě nějaké drobnosti u filtrování vzorů nechceme muset opakovat i první dva kroky):
csts2kmkon.pl < en.csts > en.kmkon kmkon2vzor.pl < en.kmkon > en.vzor vzorfiltr.pl < en.vzor > en1.vzor
Skript vzorfiltr.pl
jako vedlejší účinek vedle standardního výstupu tiše vyrobí soubory kmeny.txt
a koncovky.txt
.
Rozklad slov na základě již vybudovaného seznamu vzorů se provede takto:
mchallenge.pl kmeny.txt koncovky.txt < wordlist.eng > en.dz.txt
Turečtinu je pak ještě nutné prohnat skriptem tr2mctr.pl
, aby se obnovilo exotické kódování, které organizátoři vyžadují.
Nové seznamy slov pro soutěž v získávání informací
Organizátoři dodatečně poskytli seznamy nových slov, která se neobjevila v původních trénovacích datech, ale vyskytují se v datech, nad kterými se vyhodnocuje získávání informací (information retrieval). Spojuji nový seznam slov se starým. Nad spojeným seznamem natrénuji nový seznam vzorů. Těmito vzory pak rozeberu nový seznam slov a pošlu ho zpátky organizátorům.
cat wordlist.eng new-wordlist.eng > combined.eng iconv -f iso-8859-1 -t utf8 < combined.eng | mctr2csts.pl > entrain1.csts csts2kmkon.pl < entrain1.csts > en1.kmkon kmkon2vzor.pl < en1.kmkon > en1.vzor vzorfiltr.pl < en1.vzor > en1.filtr.vzor mv kmeny.txt en1kmeny.txt mv koncovky.txt en1koncovky.txt mchallenge.pl en1kmeny.txt en1koncovky.txt < new-wordlist.eng > en1.dz.txt