Skip to content

Commit

Permalink
Žádná viditelná změna.
Browse files Browse the repository at this point in the history
  • Loading branch information
dan-zeman committed Nov 14, 2011
1 parent 313e162 commit 7649f9a
Show file tree
Hide file tree
Showing 13 changed files with 8,949 additions and 8,949 deletions.
260 changes: 130 additions & 130 deletions aclass.pl
Original file line number Diff line number Diff line change
@@ -1,130 +1,130 @@
#!/usr/bin/perl
# Na základě morfologických značek rodiče a dítěte přiřadí syntaktickou značku.
# (c) 2007 Dan Zeman <[email protected]>
# Licence: GNU GPL

sub usage
{
print STDERR ("Usage: aclass.pl -m model [-z mdgdz] < input > output\n");
print STDERR (" model: the output of atrain.pl (trained model)\n");
print STDERR (" mdgdz: read structure from <MDg src=\"dz\">; default <g>\n");
print STDERR (" input: CSTS file to add syntactic tags\n");
print STDERR (" output: CSTS file with added syntactic tags\n");
}

use utf8;
use open ":utf8";
binmode(STDIN, ":utf8");
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");
use Getopt::Long;
use csts;
use lib '/home/zeman/projekty/parser';
use strom;



# Přečíst volby.
# Zdroj: prázdný nebo "rodic_vzor" znamená <g>, jinak třeba "mdgdz" znamená <MDg src="dz">.
GetOptions('model=s' => \$model, 'zdroj=s' => \$zdroj);
if($model eq "")
{
usage();
die("Chybí model.\n");
}
# Přečíst statistiku.
open(STAT, $model) or die("Nelze číst $model: $!\n");
while(<STAT>)
{
# Odstranit znak konce řádku.
s/\r?\n$//;
# Rozdělit řádek na klíč (dvojice morfologických značek) a hodnotu (syntaktickou značku).
my ($klic, $hodnota) = split(/\t/, $_);
# Uložit do hashe.
$stat{$klic} = $hodnota;
}
close(STAT);
csts::projit_data("-", \%konfig, \&zpracovat_vetu);
$n_spravne = 0 if($n_spravne eq "");
$n_spatne = $n_celkem-$n_spravne;
$uspesnost = $n_celkem ? $n_spravne/$n_celkem : 0;
print STDERR ("A $n_celkem - G $n_spravne - B $n_spatne - P $uspesnost\n");
print STDERR ("Neznámá dvojice mznaček, ale známá mznačka dítěte: $n_neznama_dvojice z toho chyb $n_chyb_neznama_dvojice\n");
print STDERR ("Není známa ani mznačka dítěte: $n_neznama_dvojice_i_dite z toho chyb $n_chyb_neznama_dvojice_i_dite\n");



#------------------------------------------------------------------------------
# Zpracuje poslední přečtenou větu.
#------------------------------------------------------------------------------
sub zpracovat_vetu
{
my $stav_cteni = shift; # hash s údaji o aktuálním dokumentu, odstavci a větě
my $anot = shift; # pole hashů o jednotlivých slovech
# Postavit si strom podle výstupu parseru.
strom::postavit($anot, $zdroj);
# Vypsat začátek věty.
print("<s>\n");
# Projít větu po slovech.
foreach my $slovo (@{$anot})
{
my $klic = "$slovo->{znacka} $slovo->{parent}{znacka}";
# Odstranit z klíče případné tabulátory a konce řádků, protože totéž jsme dělali při tréninku.
$klic =~ s/[\t\r\n]+/ /sg;
my $hodnota = $stat{$klic};
my $neznama_dvojice = 0;
my $neznama_dvojice_i_dite = 0;
# Jestliže jsme nenašli žádnou sznačku pro danou dvojici mznaček, zkusíme najít sznačku pro mznačku dítěte.
if($hodnota eq "")
{
$klic = $slovo->{znacka};
$klic =~ s/[\t\r\n]+/ /sg;
$hodnota = $stat{$klic};
$n_neznama_dvojice++;
$neznama_dvojice = 1;
}
# Jestliže jsme ani teď nenašli žádnou sznačku, zkusíme najít nejčastější sznačku.
if($hodnota eq "")
{
$klic = "";
$hodnota = $stat{$klic};
$n_neznama_dvojice_i_dite++;
$neznama_dvojice_i_dite = 1;
}
# Zkontrolovat, zda hodnota z naší statistiky odpovídá skutečné syntaktické značce slova.
$slovo->{afun} =~ s/[\t\r\n]+/ /sg;
if($hodnota eq $slovo->{afun})
{
$n_spravne++;
}
else
{
if($neznama_dvojice)
{
$n_chyb_neznama_dvojice++;
}
elsif($neznama_dvojice_i_dite)
{
$n_chyb_neznama_dvojice_i_dite++;
}
}
$n_celkem++;
# Vypsat slovo.
if($slovo->{ord})
{
$slovo->{form} =~ s/&/&amp;/g;
$slovo->{form} =~ s/</&lt;/g;
$slovo->{form} =~ s/>/&gt;/g;
$slovo->{lemma} =~ s/&/&amp;/g;
$slovo->{lemma} =~ s/</&lt;/g;
$slovo->{lemma} =~ s/>/&gt;/g;
$slovo->{znacka} =~ s/&/&amp;/g;
$slovo->{znacka} =~ s/</&lt;/g;
$slovo->{znacka} =~ s/>/&gt;/g;
$hodnota =~ s/&/&amp;/g;
$hodnota =~ s/</&lt;/g;
$hodnota =~ s/>/&gt;/g;
print("<f>$slovo->{form}<l>$slovo->{lemma}<t>$slovo->{znacka}<r>$slovo->{ord}<g>$slovo->{rodic_vzor}<A>$slovo->{afun}<MDg src=\"dz\">$slovo->{mdgdz}<MDA src=\"dz\">$hodnota\n");
}
}
}
#!/usr/bin/perl
# Na základě morfologických značek rodiče a dítěte přiřadí syntaktickou značku.
# (c) 2007 Dan Zeman <[email protected]>
# Licence: GNU GPL

sub usage
{
print STDERR ("Usage: aclass.pl -m model [-z mdgdz] < input > output\n");
print STDERR (" model: the output of atrain.pl (trained model)\n");
print STDERR (" mdgdz: read structure from <MDg src=\"dz\">; default <g>\n");
print STDERR (" input: CSTS file to add syntactic tags\n");
print STDERR (" output: CSTS file with added syntactic tags\n");
}

use utf8;
use open ":utf8";
binmode(STDIN, ":utf8");
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");
use Getopt::Long;
use csts;
use lib '/home/zeman/projekty/parser';
use strom;



# Přečíst volby.
# Zdroj: prázdný nebo "rodic_vzor" znamená <g>, jinak třeba "mdgdz" znamená <MDg src="dz">.
GetOptions('model=s' => \$model, 'zdroj=s' => \$zdroj);
if($model eq "")
{
usage();
die("Chybí model.\n");
}
# Přečíst statistiku.
open(STAT, $model) or die("Nelze číst $model: $!\n");
while(<STAT>)
{
# Odstranit znak konce řádku.
s/\r?\n$//;
# Rozdělit řádek na klíč (dvojice morfologických značek) a hodnotu (syntaktickou značku).
my ($klic, $hodnota) = split(/\t/, $_);
# Uložit do hashe.
$stat{$klic} = $hodnota;
}
close(STAT);
csts::projit_data("-", \%konfig, \&zpracovat_vetu);
$n_spravne = 0 if($n_spravne eq "");
$n_spatne = $n_celkem-$n_spravne;
$uspesnost = $n_celkem ? $n_spravne/$n_celkem : 0;
print STDERR ("A $n_celkem - G $n_spravne - B $n_spatne - P $uspesnost\n");
print STDERR ("Neznámá dvojice mznaček, ale známá mznačka dítěte: $n_neznama_dvojice z toho chyb $n_chyb_neznama_dvojice\n");
print STDERR ("Není známa ani mznačka dítěte: $n_neznama_dvojice_i_dite z toho chyb $n_chyb_neznama_dvojice_i_dite\n");



#------------------------------------------------------------------------------
# Zpracuje poslední přečtenou větu.
#------------------------------------------------------------------------------
sub zpracovat_vetu
{
my $stav_cteni = shift; # hash s údaji o aktuálním dokumentu, odstavci a větě
my $anot = shift; # pole hashů o jednotlivých slovech
# Postavit si strom podle výstupu parseru.
strom::postavit($anot, $zdroj);
# Vypsat začátek věty.
print("<s>\n");
# Projít větu po slovech.
foreach my $slovo (@{$anot})
{
my $klic = "$slovo->{znacka} $slovo->{parent}{znacka}";
# Odstranit z klíče případné tabulátory a konce řádků, protože totéž jsme dělali při tréninku.
$klic =~ s/[\t\r\n]+/ /sg;
my $hodnota = $stat{$klic};
my $neznama_dvojice = 0;
my $neznama_dvojice_i_dite = 0;
# Jestliže jsme nenašli žádnou sznačku pro danou dvojici mznaček, zkusíme najít sznačku pro mznačku dítěte.
if($hodnota eq "")
{
$klic = $slovo->{znacka};
$klic =~ s/[\t\r\n]+/ /sg;
$hodnota = $stat{$klic};
$n_neznama_dvojice++;
$neznama_dvojice = 1;
}
# Jestliže jsme ani teď nenašli žádnou sznačku, zkusíme najít nejčastější sznačku.
if($hodnota eq "")
{
$klic = "";
$hodnota = $stat{$klic};
$n_neznama_dvojice_i_dite++;
$neznama_dvojice_i_dite = 1;
}
# Zkontrolovat, zda hodnota z naší statistiky odpovídá skutečné syntaktické značce slova.
$slovo->{afun} =~ s/[\t\r\n]+/ /sg;
if($hodnota eq $slovo->{afun})
{
$n_spravne++;
}
else
{
if($neznama_dvojice)
{
$n_chyb_neznama_dvojice++;
}
elsif($neznama_dvojice_i_dite)
{
$n_chyb_neznama_dvojice_i_dite++;
}
}
$n_celkem++;
# Vypsat slovo.
if($slovo->{ord})
{
$slovo->{form} =~ s/&/&amp;/g;
$slovo->{form} =~ s/</&lt;/g;
$slovo->{form} =~ s/>/&gt;/g;
$slovo->{lemma} =~ s/&/&amp;/g;
$slovo->{lemma} =~ s/</&lt;/g;
$slovo->{lemma} =~ s/>/&gt;/g;
$slovo->{znacka} =~ s/&/&amp;/g;
$slovo->{znacka} =~ s/</&lt;/g;
$slovo->{znacka} =~ s/>/&gt;/g;
$hodnota =~ s/&/&amp;/g;
$hodnota =~ s/</&lt;/g;
$hodnota =~ s/>/&gt;/g;
print("<f>$slovo->{form}<l>$slovo->{lemma}<t>$slovo->{znacka}<r>$slovo->{ord}<g>$slovo->{rodic_vzor}<A>$slovo->{afun}<MDg src=\"dz\">$slovo->{mdgdz}<MDA src=\"dz\">$hodnota\n");
}
}
}
92 changes: 46 additions & 46 deletions atrain.pl
Original file line number Diff line number Diff line change
@@ -1,46 +1,46 @@
#!/usr/bin/perl
# Čte CSTS a učí se vztah mezi morfologickými značkami rodiče a dítěte a syntaktickou značkou.
# (c) 2007 Dan Zeman <[email protected]>
# Licence: GNU GPL

use utf8;
use open ":utf8";
binmode(STDIN, ":utf8");
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");
use csts;

csts::projit_data("-", \%konfig, \&zpracovat_vetu);
# U každé dvojice nahradit pole možností s četnostmi tou nejčetnější možností.
my @klice = sort(keys(%stat));
foreach my $klic (@klice)
{
my @klice2 = sort{$stat{$klic}{$b}<=>$stat{$klic}{$a}}(keys(%{$stat{$klic}}));
my $odpoved = $klice2[0];
# Kvůli uložení nahradit v klíči i v odpovědi všechny tabulátory něčím jiným.
$klic =~ s/[\t\r\n]+/ /sg;
$odpoved =~ s/[\t\r\n]+/ /sg;
# Uložit statistiku.
print("$klic\t$odpoved\n");
}



#------------------------------------------------------------------------------
# Zpracuje poslední přečtenou větu.
#------------------------------------------------------------------------------
sub zpracovat_vetu
{
my $stav_cteni = shift; # hash s údaji o aktuálním dokumentu, odstavci a větě
my $anot = shift; # pole hashů o jednotlivých slovech
# Projít větu po slovech.
foreach my $slovo (@{$anot})
{
# Zjistit morfologickou značku slova, morfologickou značku jeho rodiče a syntaktickou značku slova.
my $klic = "$slovo->{znacka} $anot->[$slovo->{rodic_vzor}]{znacka}";
my $klic2 = $slovo->{afun};
$stat{$klic}{$klic2}++;
$stat{$slovo->{znacka}}{$klic2}++;
$stat{""}{$klic2}++;
}
}
#!/usr/bin/perl
# Čte CSTS a učí se vztah mezi morfologickými značkami rodiče a dítěte a syntaktickou značkou.
# (c) 2007 Dan Zeman <[email protected]>
# Licence: GNU GPL

use utf8;
use open ":utf8";
binmode(STDIN, ":utf8");
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");
use csts;

csts::projit_data("-", \%konfig, \&zpracovat_vetu);
# U každé dvojice nahradit pole možností s četnostmi tou nejčetnější možností.
my @klice = sort(keys(%stat));
foreach my $klic (@klice)
{
my @klice2 = sort{$stat{$klic}{$b}<=>$stat{$klic}{$a}}(keys(%{$stat{$klic}}));
my $odpoved = $klice2[0];
# Kvůli uložení nahradit v klíči i v odpovědi všechny tabulátory něčím jiným.
$klic =~ s/[\t\r\n]+/ /sg;
$odpoved =~ s/[\t\r\n]+/ /sg;
# Uložit statistiku.
print("$klic\t$odpoved\n");
}



#------------------------------------------------------------------------------
# Zpracuje poslední přečtenou větu.
#------------------------------------------------------------------------------
sub zpracovat_vetu
{
my $stav_cteni = shift; # hash s údaji o aktuálním dokumentu, odstavci a větě
my $anot = shift; # pole hashů o jednotlivých slovech
# Projít větu po slovech.
foreach my $slovo (@{$anot})
{
# Zjistit morfologickou značku slova, morfologickou značku jeho rodiče a syntaktickou značku slova.
my $klic = "$slovo->{znacka} $anot->[$slovo->{rodic_vzor}]{znacka}";
my $klic2 = $slovo->{afun};
$stat{$klic}{$klic2}++;
$stat{$slovo->{znacka}}{$klic2}++;
$stat{""}{$klic2}++;
}
}
Loading

0 comments on commit 7649f9a

Please sign in to comment.