Table of Contents
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
– zkratkycattrans.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 morfologielex_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 skriptemchange_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=<path> Accepted arguments: --input_file=<path> 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=<group_name> unused by default, required with --action=single --user_abbrevs=<filename> 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=<filename> <filename> 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 sgroup
.--group=<group_name>
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
nebowide_csts
(podle toho následuje-li nebo předchází-lifrazrl
).--trace_deletions=(detailed|stat_used|stat_unused|stat_all|no)
detailed
— napíše číslo pravidla do tagu<MMt>
stat_used | stat_unused | stat_all
— má vypsat, kolikrát se které pravidlo použilono
--empty_positions=(restore|keep|modified)
restore
— vrať všechny smazané tagykeep
— 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í tagykeep
— ponechej tagD?
modified
— vrať původní tagy a vyznač kolokaci změnou varianty na malé písmenomodified_subst
— ponechej tagD?
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 <stat_used | stat_unused | stat_all>
. 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
.- extract-stat.pl
#!/usr/bin/perl my $cnt=0; my $stat=0; my $fname="stat"; my $fh; while ($radek = <STDIN>) { 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
- get-stat.sh
#!/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:
<pocet_vet> <pocet_tokenu> <pocet_tagu>
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