[ Skip to the content ]

Institute of Formal and Applied Linguistics Wiki


[ Back to the navigation ]

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
user:zeman:ukoly:trideni-jazyku [2007/10/27 23:37]
zeman vytvořeno
user:zeman:ukoly:trideni-jazyku [2013/10/08 08:05] (current)
zeman quest
Line 1: Line 1:
 ====== Rozpoznávání a třídění jazyků ====== ====== Rozpoznávání a třídění jazyků ======
-//(úloha z počítačového zpracování přirozeného jazyka)// +{{template>spolecne}}
- +
-//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 [[zeman@ufal.mff.cuni.cz|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, který dokáže rozpoznat jazyk dokumentu, věty a slova a roztřídit vstupní text podle jazyků. Součástí zadání bude konkrétní skupina jazyků, které má program umět poznat, váš program by však měl být jazykově nezávislý. Vše, co potřebuje o konkrétních jazycích vědět, by měl být schopen se naučit z dat. (Z toho plyne, že vy dané jazyky ovládat nemusíte, naopak je možná výhodou, když jsou vám zcela neznámé.) Napište program, který dokáže rozpoznat jazyk dokumentu, věty a slova a roztřídit vstupní text podle jazyků. Součástí zadání bude konkrétní skupina jazyků, které má program umět poznat, váš program by však měl být jazykově nezávislý. Vše, co potřebuje o konkrétních jazycích vědět, by měl být schopen se naučit z dat. (Z toho plyne, že vy dané jazyky ovládat nemusíte, naopak je možná výhodou, když jsou vám zcela neznámé.)
- 
----- 
- 
-NEDOKONČENO 
- 
----- 
  
 Úloha má tyto části: Úloha má tyto části:
-  - Vlastní pavouk. Program, který leze po webu, stahuje dokumenty, čistí je a vypisuje je (nebo vybrané části) na standardní výstup. 
   - Program na natrénování statistiky, podle které dokážeme rozpoznat jazyk dokumentu.   - Program na natrénování statistiky, podle které dokážeme rozpoznat jazyk dokumentu.
-  - Rozšíření pavouka o modul, který načte natrénované statistiky jazyků a o stahovaných dokumentech pak dokáže říct, zda jsou v požadovaném jazyku, nebo ne+  - Program, který na základě statistiky přiřadí jazyk dokumentu i jednotlivým jeho částem. Skupinu dokumentů v jedné složce dokáže roztřídit do složek podle jazyka
-  - Vytipování počátečního URL pro jazyk, který vám byl zadánSpusťte pavouka a stáhněte korpuskterý po vyčištění bude obsahovat alespoň 500000 slov (před tokenizací, tedy od mezery do mezery). +  - Natrénování rozpoznávačpro zadanou skupinu jazyků a kódováníTrénovací data sežeňte saminapříklad na webu.
- +
-Odevzdávat budete oba programy a stažený korpus.+
  
-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).+Odevzdávat budete oba programy a natrénované statistiky.
  
 ===== Specifikace programu pro trénování jazyků ===== ===== Specifikace programu pro trénování jazyků =====
Line 49: Line 38:
 a       0.0422775315376747</code> a       0.0422775315376747</code>
  
 +===== Specifikace programu pro rozpoznávání jazyků =====
  
-===== Specifikace volání práce pavouka =====+Program se jmenuje ''rjaz.pl'' volá se takto (příklad): 
 +<code>rjaz.pl -f ~/frq -i . -o ../roztrideno [-xdN|-xpN|-xwN] 
 +rjaz.pl -f ~/frq < vstup > vystup [-xdN|-xpN|-xwN]</code>
  
-Program se bude jmenovat ''pavouk.pl''bude se volat s jedním nebo více argumenty, které se interpretují jako URL (internetové adresy)Kromě toho se mohou mezi argumenty nacházet i volby (options), které určujíkolik textu z jakého jazyka se má stáhnout.+První volání znamená: 1. Ve složce ''~/frq'' najdi všechny soubory, jejichž název končí příponou ''.frq''načti z nich frekvenční charakteristiky známých jazyků. Za název jazyka se považuje název souboru po odtržení cesty a přípony ''.frq''. Např. soubor ''cs.iso-8859-2.frq'' obsahuje charakteristiku jazyka "cs.iso-8859-2". 2. Postupně načítej soubory ze složky ''.'' (aktuální složka), pro každý z nich urči jazyk. Pokud je podobnost dokumentu všem známým jazykům příliš maláprohlaš jazyk za neznámý (''unknown''). 3. Kopii načteného rozpoznaného dokumentu ulož do ''../roztrideno'' do podsložky, která se jmenuje stejně jako jazyk dokumentu(Pokud taková podsložka ještě neexistuje, vytvoř ji.)
  
-<code>pavouk.pl -l frq/cs.frq -t 0.36 -500000 http://seznam.cz/ http://centrum.cz/</code>+Není-li zadána volba ''-i'' (jako ve druhém příkladu), čte se jediný dokument ze standardního vstupuNa **standardní chybový výstup (STDERR)** se vypíše vyhodnocení jazyka celého dokumentu, tj. seznam známých jazyků, spolu s číselným vyjádřením podobnosti dokumentu každému jazyku, seřazený sestupně podle podobnosti. Pokud dokument není žádnému známému jazyku podobný dostatečně, před seznam se ještě napíše upozornění, že jde pravděpodobně o neznámý jazykNa standardní výstup (STDOUT) se vypíše dokument ze vstupu; to má smysl jen při volbách ''-xd'', ''-xp'' nebo ''-xw''.
  
-''-l frq/cs.frq'' říká, že v souboru frq/cs.frq program najde frekvenční charakteristiku jazyka, ve kterém mají dokumenty být. Parametrem ''-t'' můžete předat prahovou hodnotu míry podobnosti dokumentu danému jazyku, pod kterou už se mají dokumenty zahodit (alternativně můžete zadat cestu ke složce s charakteristikami dalších jazyků a text, který se více podobá jinému jazyku, taky zahodit; bez prahu se ale neobejdete, protože jinak hrozí, že narazíte na jazyk, který se dostatečně nepodobá ničemu, co máte natrénováno, ale bohužel vašemu jazyku se podobá o něco víc než těm ostatním). 
  
-Parametr ''-n 500000'' říká že program má procházení ukončit poté, co velikost získaného korpusu překročí půl miliónu slov. Volba ''-n 0'' by znamenala, že má běžet tak dlouho, dokud ho někdo neukončí násilím. 
  
-Úkolem programu je stahovat dokumenty na uvedených adresáchhledat v nich odkazy na další dokumenty, ty také stahovat takto pokračovat až do nalezení dostatečného množství textu. Dokumenty, které nejsou v požadovaném jazyku, zahodí. Program se nesmí zacyklit, tj. opakovaně zpracovávat stránky, na kterých už byl. (K identifikaci takových stránek někdy nestačí URL, potřebujete sledovat i obsah. Některé dynamicky generované stránky obsahují odkaz na sebe sama pokaždé s jiným URL.)+==== Volby -xd-xp -xw ====
  
-Snažte se identifikovat a likvidovat opakované výskyty téhož odstavce (zejména pokud jde o jednoslovné odstavce, jako jsou různé položky nabídek na internetových portálech). Volitelně můžete také zkusit identifikovat jazyk každého odstavce vyhodit intervenující např. anglické odstavce dokumentu, který je jinak evážně ve vámi hledaném jazykuPočítejte ale s tímžurčit statisticky jazyk krátkého řetězce je těžší než u delšího dokumentu.+Kterákoli z těchto voleb způsobí, že: 
 +  - O vstupním dokumentu se předpokládá, že je tokenizovaný, tj. slova i jiné tokeny (interpunkce) jsou už oddělené mezerami a zalomení řádku odděluje odstavce
 +  - Na výstupu není dokument pouze opsánale je obalen XML značkami podle následujících pravidel: 
 +    * Celý dokument je obalen značkami ''<doc>''...''</doc>''
 +    * Každý odstavec (řádekje obalen značkami ''<p>''...''</p>''
 +    * Každé slovo (token) je obaleno značkami ''<w>''...''</w>''. Mezi těmito značkami se nevyskytují mezerové znaky (mezery, zalomení řádku aj.) Naopak vně těchto značek nemají mezerové znaky žádný zvláštní význam, takže může být např. každý token (včetně svých <w>...</w> značek) na samostatném řádku. 
 +    * Odstavce slova mají ve svých počátečních značkách atribut ''id'', který je v rámci dokumentu jednoznačně identifikuje. Např. ''<p id="1"><w id="1.1">''
 +    * Počáteční značka dokumentu, odstavce i slova může obsahovat atributy ''lang'' a ''lw'', které udávají jazyk dokumentu / odstavce / slova a váhu (míru podobnosti) jazyka. Volba ''-xd'' znamenáže tyto údaje mají být uvedeny u dokumentu. Volba ''-xp'' zapne rozpoznávání jazyka odstavců a implikuje taky volbu ''-xd''. Volba ''-xw'' znamená, že jazyk má být rozpoznáván na všech třech úrovních (dokument, odstavec i slovo). 
 +    * Nezapomeňte, že na výstupu v XML musíte zakódovat znaky "&", "<" a ">" jako entity ("&amp;", "&lt;", "&gt;"). 
 +    * K volbám ''-xd'', ''-xp'' a ''-xw'' může být ještě ilepen parametr ''N'' (buď číselný, nebo písmeno "a"), s jehož pomocí lze vynutit podrobné informace o rozpoznávání jazyka pro dokument nebo jeho prvek. V tom případě se navíc vypíše struktura ''<langs>'' (viz příklad níže), která obsahuje sestupně uspořádaný seznam jazyků s váhami, jaký se jinak také vypisuje na STDERR. 
 +      * Struktura langs, patřící celému dokumentu, se píše hned za počáteční značku dokumentu. 
 +      * Struktura langspatřící celému odstavci, se píšhned za počáteční značku odstavce. 
 +      * Struktura langs, patřící slovu, se píše hned za **koncovou** značku slova (tedy ne dovnitř slova, ale za něj). 
 +      * Číselný parametr N říká, kolik nejpravděpodobnějších jazyků má být ve strukturách langs vypsáno. Je-li N="a" //(all)//, mají se vypsat všechny známé jazyky. Výchozí hodnotou N je 1, v tom případě se vůbec nevypisuje struktura langs a stačí atributy lang a lw uvnitř počáteční značky prvku. Pokud je N vyšší než 1 nebo "a", vypisují se jak atributy lang a lw uvnitř počáteční značky prvku, tak struktura langs. Pokud je N 0, nevypisuje se struktura langs ani atribut lw v počáteční značce prvku, vypisuje se pouze atribut lang. Pokud je jazyk neznámý a N > 1, potom atribut lang ve značce prvku obsahuje informaci, že jazyk je neznámý, ale struktura langs zobrazuje váhy známých jazyků pro posuzovaný prvek. 
 +    * V příkladu si všimněte, že na začátku dokumentu XML se uvádí značka ''<?xml...?>'', ve které se mimo jiné musí říct, jaké kódování dokument používá. Spolu s jazykem tedy musíte rozpoznat i kódování.
  
-===== Specifikace výstupního formátu =====+<code xml> 
 +<?xml version="1.0" encoding="utf-8"?> 
 +<doc lang="cs" lw="0.363445894"> 
 +  <langs> 
 +    <li lang="cs" lw="0.363445894"/> 
 +    <li lang="sk" lw="0.289303854"/> 
 +    <li lang="en" lw="0.154494783"/> 
 +  </langs> 
 +  <p id="1"> 
 +    <w id="1.1">To</w> 
 +    <w id="1.2">je</w> 
 +    <w id="1.3">čeština</w> 
 +  </p> 
 +</doc> 
 +</code>
  
-Dokumenty, které projdou uvedeným filtrem, vyčistěte od veškerého kódu HTML a **vypište na standardní výstup (STDOUT)**. Zachovejte pouze informaci o tom, kde začíná nový odstavec (HTML prvky div, h1, h2, h3, h4, h5, h6, p, table, tr, th, td, ul, ol, li, dl, dt, dd, select, option a možná některé další). Nezapomeňte odstranit kód JavaScriptu, definice stylů a text, který není součástí těla dokumentu (třeba prvek head). Entity převeďte na normální znaky. +===== Jazyky, které máte umět =====
- +
-Výstup je vždy v kódování UTF-8. Pokud umíte na webu rozpoznat texty v jiném kódování téhož jazyka, překódujte je. +
- +
-Každý řádek na výstupu odpovídá právě jednomu odstavci staženého dokumentu. Prázdné odstavce vynechte. Odstraňte všechny mezery na začátku a na konci každého řádku (odstavce). Pokud mezi slovy uvnitř odstavce leží více než jedna mezera, zařiďte, aby tam zůstala právě jedna mezera. Mezerové znaky jako tabulátor (kód 9), neoddělitelná mezera (kód 160), popř. řídící znaky nahraďte normální mezerou (kód 32). Text ale netokenizujte (tj. nesnažte se třeba odtrhnout čárku od předcházejícího slova, pokud mezi nimi v původním dokumentu mezera nebyla). +
- +
-===== Stahování vašeho jazyka ===== +
- +
-Sežeňte si dostatečně velkou webovou stránku v daném jazyce jako výchozí bod. Jazyky, které jsou součástí zadání, mohou být exotické, ale žádný není natolik vzácný, aby se na webu nedal objevit alespoň ve Wikipedii (http://wikipedia.org/). Ta je navíc celá v UTF-8, takže se ani nemusíte starat o různá další kódování. +
- +
-Úvodní stránku si uložte jako text (bez HTML entit!) a získejte z ní frekvenční charakteristiku daného jazyka. Potom pokusně pusťte pavouka z této stránky na web a sledujte, jakých hodnot dosahuje vámi navržená míra podobnosti frekvenčních vektorů. Podle toho odhadněte vhodnou prahovou hodnotu a pusťte pavouka naostro.+
  
 +V zimním semestru 2007-2008 jsou součástí zadání následující jazyky. Samozřejmě můžete svůj program naučit i libovolné další jazyky. Nemáte-li pro dané jazyky trénovací data, sežeňte si je na webu. Trénovací data pro různá kódování získejte překódováním trénovacích dat z UTF-8.
  
 +| čeština | utf-8 | iso-8859-2 | cp1250 |
 +| slovenština | utf-8 | iso-8859-2 | cp1250 |
 +| slovinština | utf-8 | iso-8859-2 | cp1250 |
 +| ruština | utf-8 | koi8-r | cp1251 |
 +| angličtina | utf-8 | iso-8859-1 | cp1252 |
 +| němčina | utf-8 | iso-8859-1 | cp1252 |
 +| nizozemština | utf-8 | iso-8859-1 | cp1252 |
 +| francouzština | utf-8 | iso-8859-1 | cp1252 |
 +| španělština | utf-8 | iso-8859-1 | cp1252 |
 +| italština | utf-8 | iso-8859-1 | cp1252 |
  
 ===== Další informace ===== ===== 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).+Tento úkol (včetně zadání konkrétního jazyka) si můžete zarezervovat vyplněním formuláře na http://quest.ms.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. 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. 
- 
-Krátké ukázky z jazyků, které jsou v nabídce v zimním semestru 2007-8: 
- 
-==== Rumunština ==== 
-Limba română (sau dacoromână) este o limbă indo-europeană, din grupul italic, făcând parte din subgrupul oriental al limbilor romanice. Printre limbile romanice, româna este a cincea ca mărime după numărul de vorbitori, în urma spaniolei, portughezei, francezei şi italienei. 
- 
-==== Svahilština ==== 
-Kiswahili ni lugha ya kibantu yenye misamiati mingi ya kiarabu inayozungumzwa katika eneo kubwa la Afrika ya Mashariki. Lugha hii ina utajiri mkubwa wa misamiati na misemo na mithali na mashairi na mafumbo na vitendawili na nyimbo. Nayo inatumika katika mashule kufundishia elimu mbali mbali za dini na dunia, na kuna vitabu vingi vilivyotungwa kwa kutumia lugha hii, vikiwa vya hadithi au hekaya au riwaya. 
- 
-==== Telužština ==== 
-తెలుగు, భారత దేశములోని దక్షిణ ప్రాంతములోని ఆంధ్రప్రదేశ్ రాష్ట్రపు అధికార భాష, మరియు దాని పక్క రాష్ట్రములయిన తమిళనాడు, కర్ణాటక, ఒరిస్సా, చత్తీస్‌గఢ్ ప్రజలు మాట్లాడే భాష. ప్రపంచంలో అత్యధికముగా మాట్లాడే వాటిలో పదిహేనవ స్థానములోనూ, భారత దేశములో రెండవ స్థానములోను నిలుస్తుంది. 2001 జనాభా లెక్కల ప్రకారం సుమారుగా ఏడుకోట్ల ముప్పై లక్షల మంది ఈ భాషను మాట్లాడతారు. 
- 
-Pokud je proti vašemu přesvědčení pracovat s textem, který si neumíte ani přečíst, zkuste ho prohnat programem [[telugu2latin.pl]]. Výstup vašeho pavouka ale samozřejmě musí být původní telužský text! 
- 
-==== Urdština ==== 
-اردو انڈوآریائی زبانوں کی انڈو ایرانی شاخ کی ایک زبان ہے جس کا تعلق انڈويورپی زبانوں سے ہے۔اردو تيرھويں صدی ميں بر صغير ميں پيدا ہوئی ـ اردو پاکستان کی سرکاری زبان ہے اور بھارت کی سرکاری زبانوں ميں سے ايک ہے۔ اردو بھارت ميں 5 کروڑ اور پاکستان ميں دو کروڑ لوگوں کی مادری زبان ہے مگر اسے بھارت اور پاکستان کے تقریباً 50 کروڑ لوگ بول اور سمجھ سکتے ھیں ۔ جن میں سے تقریباً 10.5 کروڑ لوگ اسے باقاعدہ بولتے ھیں۔ 
- 
-==== Vietnamština ==== 
-Tiếng Việt hay Việt ngữ[2] là ngôn ngữ của người Việt (người Kinh) và là ngôn ngữ chính thức tại Việt Nam. Đây là tiếng mẹ đẻ của khoảng 85% dân cư Việt Nam, cùng với gần ba triệu Việt kiều ở hải ngoại, mà phần lớn là người Mỹ gốc Việt. Tiếng Việt còn là ngôn ngữ thứ hai của các dân tộc thiểu số tại Việt Nam. Mặc dù tiếng Việt có nguồn từ vựng vay mượn từ tiếng Hán và trước đây dùng chữ Hán (chữ Nho) để viết, sau đó được cải biên thành chữ Nôm, tiếng Việt được coi là một trong số các ngôn ngữ thuộc hệ ngôn ngữ Nam Á có số người nói nhiều nhất (nhiều hơn một số lần so với các ngôn ngữ khác cùng hệ cộng lại). Ngày nay tiếng Việt dùng bảng chữ cái Latinh, gọi là chữ Quốc Ngữ, cùng các dấu thanh để viết. 
  

[ Back to the navigation ] [ Back to the content ]