This is an old revision of the document!
Table of Contents
Háčkování
spolecne
Napište program, který doplní do textu chybějící diakritiku. K testování dostanete data v konkrétním jazyku, váš program by však měl být v maximální možné míře jazykově nezávislý. Můžete předpokládat, že jazyk, se kterým program pracuje, píše abecedou na bázi latinky. Vše ostatní, co potřebuje o konkrétním jazyku vědět, by měl být schopen se naučit z dat. (Z toho plyne, že vy daný jazyk ovládat nemusíte.)
Úloha má tyto části:
- Trénovací program. Projde trénovací data (tokenizovaný text v UTF-8) a naučí se slovník, tj. pro každý řetězec bez diakritiky všechny možné řetězce (s diakritikou či bez), ze kterých mohl vzniknout.
- Vlastní háčkovač. Čte ze standardního vstupu tokenizovaný text bez diakritiky, na standardní výstup vypisuje tentýž text s diakritikou (v UTF-8).
- Za pomoci trénovacího programu nebo jeho upravené verze:
- Najděte v daných datech slova, pro která je háčkování nejvíce nejednoznačné (tj. existuje největší škála možností, jak tato slova oháčkovat).
- Zjistěte, jaké procento výskytů slov neumožňuje přidání žádné diakritiky.
- Zjistěte, jaké procento vyžaduje přidání diakritiky, ale jen jediným způsobem.
- Zjistěte, jaké procento výskytů slov lze přepsat na více než jednu oháčkovanou variantu (včetně varianty bez diakritiky, pokud je platným slovem).
- Zjistěte, jaká je průměrná míra nejednoznačnosti (tj. průměrný počet možných odpovědí) na jeden slovní výskyt.
- Data, která dostáváte, jsou stažená z Wikipedie a obsahují šum. Odhadněte (statisticky, nikoliv na základě znalosti jazyka), která háčkování se do dat dostala jen jako překlep a jak se změní odpovědi na předcházející otázky, pokud překlepy nebudeme brát v úvahu.
Trénování
Program hacktrain.pl
čte ze standardního vstupu tokenizovaný text v UTF-8, obsahující diakritiku. Nepotřebuje argumenty, ale pokud je dostane, čte místo standardního vstupu soubory, k nimž jsou cesty uvedené v argumentech. Program z každého vstupního slova odstraní diakritiku a pro všechna slova bez diakritiky si zapamatuje všechna jim odpovídající slova s diakritikou, která viděl v trénovacích datech. Pamatuje si také četnosti výskytů jednotlivých variant, aby háčkovač mohl posoudit, která varianta je nejpravděpodobnější. Naučený slovník vypíše na standardní výstup. Formát výstupu navrhněte sami.
perl hacktrain.pl < train.txt > model.stat
Háčkování
Program hack.pl
čte ze standardního vstupu tokenizovaný text v UTF-8. (Tento text typicky neobsahuje žádnou diakritiku, avšak program musí být technicky schopen načíst i písmena s diakritikou, pokud se tam nějaká zapomenou, nebo znaky cizích abeced.) Program se volá bez argumentů (pokud s argumenty, pak jsou to cesty k souborům, které se mají číst místo standardního vstupu), ale s povinnou volbou (option) -s soubor
, která udává cestu k souboru se statistikou (slovníkem) vyrobenou programem hacktrain.pl
.
Program píše na standardní výstup. Posílá tam tentýž text obohacený o diakritiku. Pozor, nesmíte změnit počet mezer, zalomení řádku apod.! Na výstupu má být přesně stejný počet znaků jako na vstupu, akorát místo znaků bez diakritiky se mohou objevit znaky s diakritikou, a to ještě jen takové, ze kterých ty bez diakritiky lze vytvořit. Výstup je v UTF-8.
perl hack.pl -s model.stat < test.txt > test.hack.txt
Varianta pro arabštinu
V arabštině (a také v hebrejštině) se diakritická znaménka používají pro zápis krátkých samohlásek, zdvojování souhlásek a další jevy. V běžném textu se vynechávají (na rozdíl od češtiny ne jenom tam, kde to vyžadují omezené technické prostředky, ale všude; mluvčí arabštiny je většinou dokáže doplnit z kontextu). Pro počítačové zpracování je potřeba krátké samohlásky rekonstruovat (např. kvůli přepisu do latinky, převedení textu na řeč nebo kvůli rozlišení mluvnických tvarů).
Spisovná arabština má pouze 3 krátké samohlásky: a, i a u. Diakritická znaménka, kterými se tyto samohlásky zapisují, se objevují nad nebo pod předcházející souhláskou, mají však svůj vlastní kód v Unicode. Na rozdíl od češtiny, kde lze jedním znakem zapsat c a jiným znakem č, pro arabštinu nejsou definovány znaky ba, bi a bu. Místo toho se dotyčné slabiky reprezentují dvojicemi znaků, např. b+a. Odháčkování je tím pádem jednodušší, stačí z textu odstranit všechny výskyty znaků pro arabská diakritická znaménka.
Následuje přehled diakritických znamének v arabštině. V příkladech je použita souhláska b:
Kód | Název | Význam | Příklad | Přepis |
064E | fatha | a | بَ | ba |
064F | damma | u | بُ | bu |
0650 | kasra | i | بِ | bi |
0651 | shadda | zdvojení souhlásky | بّ | bb |
0652 | sukun | žádná samohláska | بْ | b |
064B | fathatan | a + nunace | بً | ban |
064C | dammatan | u + nunace | بٌ | bun |
064D | kasratan | i + nunace | بٍ | bin |
Pro učení budete mít k dispozici vokalizované (= opatřené samohláskami) texty z Pražského arabského závislostního korpusu (PADT).
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.
Další informace k úkolu najdete v http://ufal.mff.cuni.cz/~zeman/vyuka/podklady/pzpj03-prvni_ukoly.pdf.
V zimním semestru 2009-2010 je v nabídce arabština. Pro přístup k datům je potřeba souhlasit s licenční smlouvou a odeslat registraci na http://ufal.mff.cuni.cz/corp-lic/padt10-reg.html; do kolonky Optional information vyplňte “NPFL007”. O registraci bych se měl dozvědět a poslat vám odkaz na data.
V zimním semestru 2007-2008 jsou v nabídce slovenština, polština a maďarština. Odkazy na trénovací data následují.