Hranice slov a vět Počítačové zpracování přirozeného jazyka Jan Kálal, ZS 2007/08
Zadání 3 programy: 1. tokenizátor rozdělující text na slovní jednotky 2. učitel zkratek zjišťující seznam slov, která tečce navzdory nekončí větu 3. oddělovač vět rozbíjející nečleněné odstavce na samostatné věty
Zadání – společný rys vstup dat: text v UTF-8 ze standardního vstupu nebo ze souboru zadaného jako parametr výstup dat: text v UTF-8 v určeném formátu na standardní výstup
Zadání – perla pedagoga Kdo bude místo na STDOUT čmárat do souboru, jehož cesta je zadrátována ve zdrojáku jakoC:\Documents and Settings\PanVopička\Dokumenty\tisíc_ dalších_adresářů\mujchytrysoubor.dat apod., nejenže nedostane zápočet, ale bude podroben veřejnému zostuzení.
Tokenizátor (token.pl) idea postupu: 1. načtení jednotlivé řádky 2. přebytečných mezer 3. rozřezání po mezerách do pole 4. průzkum tokenů v poli a jejich případný rozpad na menší jednotky 5. vypsání výsledného pole
Tokenizátor – odmezerování bílé znaky pryč ze začátku řádku $radek =~ s/^\s+//; výmaz bílých znaků z konce řádku $radek =~ s/\s+$//; redukce prostředních bílých znaků vždy na jedinou mezeru $radek =~ s/\s+/ /g;
Tokenizátor – řežba po odstranění mezer je prvotní tokenizace už = split(/\s/, $radek);
Tokenizátor – několik matchů $slova =~ m/^([\p{L}|\p{N}]+[\.|\-|_])* \p{L}{2,6}/g; URL: $slova =~ m/^(\p{L}{3,5}:\/\/)? ([\p{L}|p{N}|\-])+(\.[\p{L}|\{N}|\-]+)+ (\/[\p{L}|\p{N}|~].*[\p{L}|\p{N}])? ([\/|=|&])?/g;
Učitel zkratek (sentrain.pl) předpoklad: na každém řádku jen jedna věta z něj plyne: 1. pokud je za slovem tečka 2. a za tečkou následuje další slovo 3. musí jít o zkratku, 4. která se vyskytuje uvnitř věty
Učitel zkratek – idea idea postupu: 1. načtení tokenizované řádky 2. rozdělení do pole slovních jednotek 3. postupné vyhledání teček 4. tam, kde je před tečkou i za tečkou slovo jde o zkratku 5. zařazení do asociativního pole 6. počítání výskytů nekoncových zkratek 7. vytištění asociativního pole
Učitel zkratek – výtisk as. pole $oddelovac = " "; %zkratky = (); my($zkratka) = (); my($hodnota) = 0; while (($zkratka, $hodnota) = each(%zkratky)) { print $zkratka, $oddelovac, $hodnota, "\n"; }
Oddělovač vět (sent.pl) soubor se zkratkami může mít jako parametr use Getopt::Std; &getopts("s:"); if ($opt_s) { open(ZKRAT, $opt_s); binmode(ZKRAT, ":utf8"); while ($vstup = ) { … } close(ZKRAT); }
Oddělovač vět – idea idea: 1. naučení se seznamu nekoncových zkratek, pokud existuje 2. načtení tokenizované řádky (odstavce) 3. postupné vyhledání všech hranic vět 4. postupné vypisování nalezených vět 5. odřádkování za odstavcem
Oddělovač vět – hledání hranice postupné vyhledání symbolů konce věty, pravých závorek, pravých a obecných uvozovek a různých apostrofů if ($slova =~ /^[\p{STerm}| \p{Pf}|\p{Pe}|\"|\`|\']+$/) … pokud je víc takových symbolů po sobě, nejzajímavější je jen ten poslední if ($slova[$pozice+1] =~ /^[\p{STerm}| \p{Pf}|\p{Pe}|\"|\`|\']+$/) { next; }
Oddělovač vět – různé možnosti naučenou zkratkou nalevo od tečky věta obvykle nekončí tečka mezi dvěma (krátkými) číselnými je nejspíš součástí datumu pokud je před obecnou uvozovkou terminální symbol a napravo od ní je slovo, může tu končit věta, ale také nemusí
Oddělovač vět - specifika jazyk: ruština zvýšená míra užívání symbolu - - ve větě oddělovač s ním ale neměl problém - - Это не значит, - - продолжил он, - - что мы не видим тактических недостатков. (Kommersant.ru)
Oddělovač vět – výsledky sportu výsledky NHL " Колумбус " - - " Анахайм " 3 : 4 ( овертайм ; Жердев ( " Колумбус " ), ). " Вашингтон " - - " Нью - Джерси " 3 : 2 ( Виктор Козлов, ; Овечкин ( оба - - " Вашингтон " ), Зубрус ( " Нью - Джерси " ), ). " Буффало " - -
Oddělovač vět – běžný text " Милан " тряхнет " Золотым мячом " Футбол Сегодня и завтра в Японии состоятся полуфинальные матчи турнира, в котором формально выявляется лучший футбольный клуб мира. Будет удивительно, если за это звание в воскресенье вновь не поспорят лучшая европейская и лучшая южноамериканская команды - - итальянский " Милан " и аргентинский " Бока Хуниорс ". На пути к финалу клубного мирового первенства у них стоят " Урава Ред Даймондс " из Японии и " Этюаль дю Сахель " из Туниса.