Pavouk - rumunština
-
Upload
baker-ramirez -
Category
Documents
-
view
33 -
download
4
description
Transcript of Pavouk - rumunština
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, lze1. 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í]] 0.346934068377748 2012568de 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;
}
}
Rumunština
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
• „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