Pavouk - rumunština Martin Popel
Naučení frekvenční charakteristiky jazyka Čištění dokumentů Vlastní pavouk Wikipedia Rumunština
Naučení frekvencí Je-li málo dat, lze 1.Neutralizovat vliv opakujících se slov První výskyt slova: $xgram{$_}++; $xgramu++; Další výskyty téhož slova: $xgram{$_} += $c; $xgramu += $c; 2.Sehnat více dat Učit se frekvence na několikrát Najít zdroj bez jiných jazyků
Naučení frekvencí Ukládat i absolutní četnosti – možnost budovat frekvenční slovník postupně Odříznout „chvost“ (např. rel. frek. < 0.001) a přepočítat frekvence, aby sčítaly do 1. Ukládat i častá slova (ale zvolit práh např. nad 100 výskytů) Úprava zadání Sekce se slovy oddělena prázdným řádkem [[ostatní]] de …
Rozpoznání jazyka Spočítat vzdálenost ( ) zvlášť pro unigramy, bigramy a trigramy a zprůměrovat. Spočítat kolik procent slov z určovaného odstavce je pokryto slovníkem. Z těchto dvou vzdáleností vážený průměr (např. pokrytí * 3 + x-gram-vzdálenost / 4) Odstranit ze slovníku anglická slova? Co čísla?
Čištění dokumentu Obecné otázky Odstranit krátké odstavce (< 70 znaků)? Každý odstavec jen jednou? Partial match ??? (např. hashovat pomocí crc obě poloviny odstavce zvlášť) „modified by user xy at 22:27“
Čištění dokumentu Jiné jazyky Seznam „nepřátelských“ jazyků a jejich nejčastějších slov (the, of, with,…) Vymazat odstavce obsahující tato slova. Pro některá využití korpusu nepřijatelné. Může se hodit pro vytvoření textu, ze kterého se určí frekvence (slovníku).
Čištění dokumentů Pevná mezera use HTML::Entities; my $odst="Za v se píše pevná mezera."; print "$odst\n"; decode_entities($odst); print "$odst\n"; my $ods_slov = ($odst=~s/\s+/ /g) + 1; print "$ods_slov slov: $odst\n"; #6 slov
Vlastní pavouk URL my $url = URI->new( ' $url->scheme eq ‘http’; $url->host eq ‘abc.de’; $url->fragment eq ‘frag’; $url->path eq ‘/f/../g/h.html’; $url->opaque eq ‘//abc.de/f/../g/h.html?p1=x&p2=y’; Postup: return if lc($adresa) =~ m!$prefiltr_neg!o); #obrázky atd. my $url1 = URI->new_abs($adresa, $dok_base)->canonical; my $url = $url1->scheme.':'.$url1->opaque; #bez fragmentu return if exists $nalezene_adresy{$url}; return if ($url !~ m!$filtr_poz!o); $nalezene_adresy{$url} = 1; $url;
Vlastní pavouk Dokument i nalezené odkazy si ukládat zvlášť Přidat do korpusu (a odkazy do fronty) až, je-li dokument „kvalitní“. Určí se např. z počtu „kvalitních“ odstavců, případně i počtu odstavců duplicitních, krátkých či cizojazyčných. Paralelní stahování z více serverů…
Wikipedia archiv (7z) 67 M, rozbalené 2 GB, vyčištěný korpus 40 MB (5,8 MW, dokumentů, cca 5 minut čištění) pavouk.pl –f wiki/ro/d > korpus_wiki_ro_d Stránky uživatelů, obrázků, kategorií,… mají v názvu „~“ ( Discuţie_Utilizator~Dbacosit_b709.html ) Obsah článku lze v html poznat podle komentářů: … Daca este un paloş curb, armă caracteristică … Dále odstranit: pahýly (stub), tabulky,…
Wikipedia $parser->handler(comment => \&comment_hook, 'text') if $wiki; sub comment_hook($) { my $text = shift; $wiki_content = 1 if $text eq ' '; $wiki_content = 0 if $text eq ' '; } sub text_hook($) { if ($dok_zanoreni{'body'} and !$dok_zanoreni{'script'} and $wiki_content and (!$wiki || !$dok_zanoreni{'table'})) { $odstavec.= shift; }
Rumunština Wiki eiarntulocsdmpă, ă ş ţ î â Î Web aietrnulcsodmp, ă ţ ş î â Î
Rumunština „k“ a „y“ jen v cizích slovech (ale hidrant) Nejčastější plnovýznamová slova: este (je), fost (byl), sunt (jsem/jsou), era (býval), fiind (jedná [se o]), are (má), anul (rok), mare (velký), două (dvě), parte (část, strana), poate (může), multe (hodně), judeţul (župa) război 6917, pace 594 moarte 1924, naşterea 622