140 likes | 304 Views
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
E N D
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 • Neutralizovat vliv opakujících se slovPrvní výskyt slova:$xgram{$_}++; $xgramu++;Další výskyty téhož slova:$xgram{$_} += $c; $xgramu+= $c; • 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í]] 0.346934068377748 2012568 de 0.0427298005002577 247876 …
Rozpoznání jazyka • Spočítat vzdálenost (<0,1>) zvlášť prounigramy, 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í dokumentuObecné 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í dokumentuJiné 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í pavoukURL my $url = URI->new('http://aBc.De:80/f/../g/h.html?p1=x&p2=y#frag')->canonical; $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; push @dok_odkazy, $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 • http://download.wikipedia.org/http://static.wikipedia.org/downloads/November_2006/ro/ archiv (7z) 67 M, rozbalené 2 GB, vyčištěný korpus 40 MB (5,8 MW, 50 000 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ářů:…<div id="contentSub"></div> <!-- start content --> <p><b>Daca</b> este un paloş curb, armă caracteristică … <!-- end content --> • 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 '<!-- start content -->'; $wiki_content = 0 if $text eq '<!-- end content -->'; } sub text_hook($) { if ($dok_zanoreni{'body'} and !$dok_zanoreni{'script'} and $wiki_content and (!$wiki || !$dok_zanoreni{'table'})) { $odstavec .= shift; } }
Wiki eiarntulocsdmpă, ă 0.0212 ş 0.0094 ţ 0.0088 î 0.0086 â 0.0042 Î 0.0010 Web aietrnulcsodmp, ă 0.0023 ţ 0.0012 ş 0.0008 î 0.0008 â 0.0004 Î 0.00005 Rumunština
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