This is an old revision of the document!
Table of Contents
Segmentace slov na morfémy
(úloha z počítačového zpracování přirozeného jazyka)
Upozornění: Specifikace je detailnější (a tudíž více svazující) než bývá u zápočtových úloh zvykem. Ideálně by díky tomu měla tři řešení téže úlohy od tří různých lidí být zaměnitelná; šetří vám to také práci s dokumentací, která už je součástí zadání. Samozřejmě nelze vyloučit, že najdete dobrý důvod, aby něco bylo jinak než ve specifikaci; takové případy se mnou prosím konzultujte. Bez posvěcení se raději od specifikace zbytečně neodchylujte. Kdo bude místo na STDOUT čmárat do souboru, jehož cesta je zadrátována ve zdrojáku jako “C:\Documents and Settings\PanVopička\Dokumenty\tisícdalšíchadresářů\mujchytrysoubor.dat” apod., nejenže nedostane zápočet, ale bude podroben veřejnému zostuzení.
Napište program v Perlu, který rozpozná různé tvary stejných slov v textu v libovolném jazyce, aniž by měl k dispozici morfologický slovník. Přesněji: máte každé slovo rozsekat na morfémy. Příkladem morfému je předpona, kmen, přípona. Slovo může mít několik předpon (např. před+při+pravit), několik přípon (např. chladn+ějš+ímu), několik kmenů (např. chlor+o+vodík) apod. Některé morfémy jsou derivační (jejich prostřednictvím se z jednoho slova odvozuje jiné), jiné jsou ohýbací (jejich prostřednictvím se tvoří různé tvary (pád, číslo, stupeň, čas apod.) téhož slova. Hledejte oba druhy morfémů, rozlišovat je nemusíte. Pro jedno slovo může být správně i několik čtení, a tudíž několik segmentací (např. proud+it vs. pro+uď+it).
K dispozici máte seznam slov daného jazyka nalezených v korpusu, včetně jejich četností. Seznam čtěte ze standardního vstupu. Na každém řádku je vždy nejdříve počet výskytů slova, pak mezera a za ní slovo. Předpokládejte, že vstup je kódovaný v UTF-8.
Výstupem vašeho programu (pošlete ho na STDOUT) by měly být morfematické segmentace všech slov, která byla na vstupu, opět v UTF-8. Každé slovo má svůj řádek, na něm je uvedeno jako první položka (četnost slova už se na výstupu neobjeví). Následuje tabulátor (“\t”) a za ním jedna nebo více segmentací (analýz). Jednotlivé segmentace jsou oddělené čárkami, jednotlivé morfémy v rámci jedné segmentace jsou oddělené mezerami.
Nápověda: jeden z možných přístupů k tomuto problému je přes “vzory” - získejte seznamy přípon, které se vyskytly se stejnými kmeny, a kmenů, které se vyskytly s těmito příponami. Obdobně lze postupovat pro předpony.
Programy pište v Perlu a snažte se vyvarovat obratů, které by omezily přenositelnost mezi platformami (např. nevolejte externí programy, které se vyskytují pouze v Unixu, resp. pouze ve Windows).
Jazyky
K ladění dostanete česká data, abyste měli šanci poznat, zda výstup programu vypadá rozumně. Váš program ale musí fungovat nezávisle na jazyku vstupních dat. Je tedy nežádoucí, aby obsahoval např. seznam českých předpon. Se vstupem zacházejte, jako by to byl jazyk, o kterém nic nevíte. Váš program bude nakonec testován na některém z těchto jazyků:
- angličtina
- němčina
- finština
- turečtina
- arabština
Další informace
Tento úkol (včetně zadání konkrétního jazyka) si můžete zarezervovat vyplněním formuláře na http://ufal.mff.cuni.cz/cgi-bin/zeman/zapoctaky/rezervace_ukolu.pl (pokud ještě není rozebrán).
Pokud se individuálně nedohodneme jinak, termín odevzdání je konec listopadu. Při některé prosincové přednášce program předvedete ostatním.