====== Různé úkony s LanGrem a gc.x ======
===== Starý LanGR =====
==== Kompilace různých verzí LEXu ====
* LanGr pracuje s pravidly, se seznamem negr. kolokací a se slovníkem z MFF
* Umístění souborů potřebných pro kompilaci: ''.../langr/rules/src''.
* ''abbrevs.txt'' -- zkratky
* ''cattrans.txt'' -- mapování kategorií
* ''e.cpd -> latest/CZ180817ae.cpd''
* ''jhtagset.txt -> latest/CZ180817ag.txt''
* ''kolokaceGC.win -> kolokaceGC10.rev-sort.win''
* ''kolokaceGC10.rev-sort.win''
* ''latest -> /usr/local/CZ180817ax'' -- poslední verze morfologie
* ''lex_build_no''
* ''synth.cpd -> latest/hgddCZ.cpd''
* ''u.cpd -> latest/CZ180817au.cpd''
* ''w.cpd -> latest/CZ180817aw.cpd''
* LanGr kompiluje aktuální verzi pravidel a ''latest'' morfologii
* Pro kompilaci se starší morfologií je třeba v adresáři ''.../langr/rules/src'' změnit linky skriptem ''change_morph_version.sh''.
===== Stále platné pokyny =====
==== Přepínače programu gc.x ====
* Seznam přepínačů dostaneme, pustíme-li ''gc.x'' bez argumentů:/usr/local/langr/rules/bin/gc_ucs2_release.x
Required arguments:
--lex=
Accepted arguments:
--input_file= use given input file instead of stdin, ignored when not '--mode=single'
--mode=(single|filter|batch) default is 'filter'
--action=(gc|ma|disamb|disheu1|single|gcsingle|connect|listrules|tokenization) default is 'gc'
--input=(plain|jh_vertical|wide_vertical|tokenized_vertical|jh_csts|wide_csts|tokenized_csts) default is 'plain'
--output=(native|jh_vertical|wide_vertical|tokenized_vertical|tokenized_vertical_with_tp|jh_csts|wide_csts) default is 'native'
--trace_deletions=(detailed|stat_used|stat_unused|stat_all|no) default is 'no'
--morphological_guesser=(yes|no) default is 'no'
--internal_guesser=(yes|no) default is 'no'
--print_lemma_variant=(yes|no) default is 'no'
--print_correct_sentences=(yes|no) default is 'no'; on gc/gcsingle with native output, print the correct sentences too
--group= unused by default, required with --action=single
--user_abbrevs= list of user-defined abbrevs
--empty_positions=(restore|keep|modified) default is 'keep', applies to any vertical output
--collocations=(restore|keep|modified|modified_subst) default is 'keep'
--ignore_rules= contains a list of '\n' separated variant identifiers
These variants will be ignore during the operation. If not set, all rules are active.
--verificator=(yes|no) default is 'yes'; if set to 'no', correction options are not checked for their correctness
Current settings:
TAG_LENGTH=23
* Význam některých argumentů:
*
--action=(gc|ma|disamb|disheu1|single|gcsingle|connect|listrules|tokenization)
Pro pravidla používáme pouze ''single'' spolu s ''group''.
*
--group=
Jméno skupiny pravidel, která se spouští.
*
--input=(plain|jh_vertical|wide_vertical|tokenized_vertical|jh_csts|wide_csts|tokenized_csts)
*
--output=(native|jh_vertical|wide_vertical|tokenized_vertical|tokenized_vertical_with_tp|jh_csts|wide_csts)
Vstup a výstup je ''wide_vertical'' nebo ''wide_csts'' (podle toho následuje-li nebo předchází-li ''frazrl'').
*
--trace_deletions=(detailed|stat_used|stat_unused|stat_all|no)
* ''detailed'' --- napíše číslo pravidla do tagu ''''
* ''stat_used | stat_unused | stat_all'' --- má vypsat, kolikrát se které pravidlo použilo
* ''no''
*
--empty_positions=(restore|keep|modified)
* ''restore'' --- vrať všechny smazané tagy
* ''keep'' --- nechej prázdné (nevyhovující, potřebujeme alespoň jeden tag)
* ''modified'' --- vyznač smazání změnou varianty na velké písmeno
*
--collocations=(restore|keep|modified|modified_subst)
* ''restore'' --- vrať původní tagy
* ''keep'' --- ponechej tag ''D?''
* ''modified'' --- vrať původní tagy a vyznač kolokaci změnou varianty na malé písmeno
* ''modified_subst'' --- ponechej tag ''D?'' a vyznač kolokaci změnou varianty na malé písmeno
==== Statistika použití pravidel ====
* Tagování se pustí až k targetu ''vert-morf''.
* Následně se pustí pravidla s přepínačem ''-l ''. Log jde do ''/tmp/errlog.log''.
* Z logu se vypreparují statistiky příkazem$ extract-stat.pl < /tmp/errlog.log
V aktuálním adresáři vzniknou soubory ''stat.00001'' až ''stat.nnnnn''.
#!/usr/bin/perl
my $cnt=0;
my $stat=0;
my $fname="stat";
my $fh;
while ($radek = ) {
if ($radek =~ /= STATISTICS/) {
$cnt++;
$stat=1;
$fname="stat." . sprintf("%05d",$cnt);
print STDERR "$fname\n";
open($fh,">",$fname);
} elsif ($radek =~ /= END/) {
$stat=0;
close($fh);
} elsif ($stat eq 1) {
if ($radek !~ /^Tags/) {
print $fh $radek;
}
}
}
* Pravidla zkompilovaná ve skupině, která byla použita pro desambiguaci (''root0''), zjistíme příkazem$ /disk3/rules/bin/gc.x --lex=/corp/LEX --action=listrules --group=root0 2> ~/tmp/ROOT0
* Statistiky pro jednotlivá pravidla dostaneme příkazem$ get-stat.sh > STAT
#!/bin/bash
for w in $(cat ROOT0); do
let c1=$(fgrep -h -w $w stat.* | cut -f1 | xargs | tr ' ' '+' | bc)
let c2=$(fgrep -h -w $w stat.* | cut -f2 | xargs | tr ' ' '+' | bc)
let c3=$(fgrep -h -w $w stat.* | cut -f3 | xargs printf '%.0f\n' | xargs | tr ' ' '+' | bc)
printf "%9.0f\t%9.0f\t%9.0f\t%s\n" "$c1" "$c2" "$c3" "$w";
done
* Statistika obsahuje 3 sloupce čísel: \\ '' '' \\ Počítají se jen případy, kdy se nějaký tag smazal.
===== Nový LanGR =====
==== Kompilace bez morfologie ====
* Člověk při tom musí být nalogovaný do LanGRa, ale pracovat jako ''root'' v ''/usr/local/langr/rules/bin''
* Použijeme skript ''bldlex.sh'' v adresáři ''/usr/local/langr/rules/bin'':
env BASEDIR=/usr/local/langr/rules USE_MORPHOLOGY=none \
TAGSET_OUR=~skoumal/PROJEKTY/INFRASTRUKTURA/morfologie/MFF-spoluprace/tagset_our.txt.CZ20170531 \
TAGSET_OUR_UNKNOWN=~skoumal/PROJEKTY/INFRASTRUKTURA/morfologie/MFF-spoluprace/tagset_our_unknown.txt.CZ20170531 \
COLLOCATIONS=/usr/local/langr/rules/src/kolokaceGC.win ICONV_IN_CHARSET=CP1250 \
USER_DIR=/usr/local/langr/rules/linguists/hanka/modules/ ./bldlex.sh
* Odzkoušená verze z července 2020:
env BASEDIR=/usr/local/langr/rules USE_MORPHOLOGY=none \
INTERACTIVE=0 \
TAGSET_OUR=/usr/local/langr/rules/src/ourtags.txt \
TAGSET_OUR_UNKNOWN=/usr/local/langr/rules/src/ourtags_unkn.txt \
COLLOCATIONS=/usr/local/langr/rules/src/kolokaceGC.win \
ICONV_IN_CHARSET=CP1250 \
USER_DIR=/usr/local/langr/rules/linguists/hanka/modules/ \
PROCESS_GROUPS="-i root -i heuristika1" \
CATTRANS=/usr/local/langr/rules/src/cattrans.txt.new \
COMPILER=/usr/local/langr/rules/bin/compiler_ucs2_release.x ./bldlex.sh
==== Statistika použitých pravidel ====
* Morfologickou analýzu máme v adresáři ''vert-vrbtg8''
* Pro účely statistiky je lepší výsledek pravidel neukládat, protože používáme přepínače ''%%--empty_positions=modified%%'' a ''%%--collocations=modified%%'':parallel-filter.sh -C "${SYN2020_PREFIX}/bin/gc_ucs2_release.x \
--lex=${SYN2020_PREFIX}/LEX_ucs2 --action=single --input=wide_vertical --output=wide_vertical \
--empty_positions=modified --collocations=modified --trace_deletions=stat_all --group=root" \
-s vert-vrbtg8 -t /dev/null -v -p10 2>>errlog/rules_stat.log
* Soubor ''errlog/rules_stat.log'' obsahuje veškerý výstup, který šel na STDERR. Musíme vypreparovat statistiky a poskládat je dohromady:extract-stat.pl < errlog/rules_stat.log | sort -k4 | count-stat.pl > rules-stat.log
a setřídit seznam podle počtu použití:sort -n -k2 rules-stat.log > rules-stat.srt