Table of Contents
Výroba korpusu SYN2020 a dalších ve stejném formátu a stejnými nástroji
- Pracujeme v
UTF-8
a převážně ve vertikále. - Vstup dostáváme v XML, musíme si ho převést na plain text Pavlovým (Vondřičkovým) programem.
- Na morfologii používáme
morfflex
s našimi vylepšeními. - Pravidla používají 23-místný tag.
- Po pravidlech vše dorazíme
MorphoDiTou
. - U vybraných korpusů ještě provedeme syntaktickou analýzu a/nebo frazeologii.
- Na závěr dodáme sublemmata, ošetříme agregáty a provedeme některé jednoduché opravy.
- Výsledek je buď zcela bez mark-up (pro ČNK), nebo s úplným mark-upem (pro Bonito).
Přípravná fáze
Příprava korpusu z Tomášových dat
Cvičný SYN2015
- data u Tomáše:
~tomas/syn2020/vert-bonito
- data u mě:
~/PROJEKTY/INFRASTRUKTURA/syn2020/vert-SYN2015
- převod od Tomáše do formátu s mark-upem:
cd ~tomas/syn2020/vert-bonito for ff in *; do echo $ff; ~/PROJEKTY/INFRASTRUKTURA/syn2020/bin/add-struct.pl $ff < $ff \ > ~/PROJEKTY/INFRASTRUKTURA/syn2020/vert-SYN2015/$ff; done
- vytvoření korpusu:
cd ~/PROJEKTY/INFRASTRUKTURA/syn2020 manatee-registry.sh -c. -f vert-SYN2015 -C
config:
PATH /net/chomsky/store/manatee-registry/syn2020-SYN2015-data ENCODING utf-8 INFO "Korpus SYN2015 s tokenizací a značkováním pro SYN2020, 20.6.2020" ATTRIBUTE word { TYPE "FD_FGD" } ATTRIBUTE space { TYPE "FD_FGD" } ATTRIBUTE lemma { TYPE "FD_FGD" MULTIVALUE y MULTISEP " " } ATTRIBUTE sublemma { TYPE "FD_FGD" MULTIVALUE y MULTISEP " " } ATTRIBUTE tag { TYPE "FD_FGD" MULTIVALUE y MULTISEP " " } ATTRIBUTE verbtag { TYPE "FD_FGD" MULTIVALUE y MULTISEP " " } ATTRIBUTE clspstpos { TYPE "FD_FGD" MULTIVALUE y MULTISEP " " } STRUCTURE doc { ATTRIBUTE name } STRUCTURE p STRUCTURE s
Ostrá fáze
Odstranění XML značek
- Stejně jako u SYNv8
- Již nenahrazujeme chybějící emaily a url entitami.
Nejdřív je třeba dostat do textů entity&url;
a&email;
a odlepit<
a>
od okolních slov: - Skript na odstranění XML značek je u nás umístěn v
/usr/local/corp/xml2standoff
(na grimmovi). - Nejnovější verze je na trnkovi v adresáři
/cnk/common/tools/xml2standoff
. - Jako vstup očekává příponu
.xml
. XML
→ plain text:for ff in *.xml; do echo $ff; python3 xml2standoff.py $ff; done
Nebo paralelně:
parallel-mask.sh -C xml2standoff.py -d . -m ".*\.xml$" -p45 -v
Kromě
.xml
souborů dostaneme.txt
(plain text) a.json
.
process_text.sh
- Skript pro celý proces:
- Morfologie
- [Pravidla]
- MorphoDiTa
- Závěrečné úpravy (vzájemně se vylučující):
- Sublemma, agregáty a závěrečné opravy po MorphoDitě
mdita-correct
aconllu-in
- Sublemma, agregáty a závěrečné opravy po syntaxi
- Úprava mark_upu
Vstupní data
- XML soubory jsou uložené v adresáři
orig
, extrahované.txt
soubory jsou zkopírované doin-utf8
- Neprovádíme doplňování
&email;
a&url;
Přepínače
- Skript
process_text.sh
používá tyto přepínače:-a add structures to the final corpus instead of removing them -D debug; save all intermediate results -h print this help and exit -l add 8 positions to tag (for LanGR - default) -L LanGR mode: in-utf8 is created from STDIN input intermidiate results and errors are saved in /tmp or work_dir result is sent to STDOUT do not use existing corp_dir as work_dir---it will be ERASED! -m add 6 positions to tag (for MDiTa) -n no syntax: script remove_structures doesn't expect synt columns -p <num> number of parallel threads; default is 1 -s <start> start the process in one of these dirs: in-utf8 (default) vert [vert-]morf [vert-morf-]simp [vert-morf-simp-]nosp [vert-morf-simp-nosp-]sgcr [vert-morf-simp-nosp-sgcr-]con [vert-morf-simp-nosp-sgcr-con-]sublm [vert-]vrbtg8 [vert-]rules [vert-rules-]mdita [vert-rules-mdita-conllu-]out -t <target> stop the process in one of these dirs (targets): [vert-]vrbtg8 [vert-]rules [vert-rules-]mdita [vert-rules-mdita-sublm-]agr (default) [vert-rules-mdita-conllu-]in -v be verbose: print the names of processed files, etc.
- Typické použití přepínačů pro různé průběhy:
- Začni v
in-utf8
, proveď morfologii, pravidla, Mditu a závěrečné úpravy s finálními opravami a odstraněním mark-upu:process_text.sh -p45 -v
- Začni výsledkem Mdity (před kterou běžela pravidla), připrav vstup pro syntax:
process_text.sh -p45 -v -s mdita -t in
- Začni v
in-utf8
, bez pravidel, připrav vstup pro syntax:process_text.sh -p45 -v -m -t in
- Proveď závěrečné úpravy po syntaxi:
process_text.sh -p45 -v -s out
- Spusť skript jako filtr, pouze morfologii, zachovej mezikroky (používá se ve webovém rozhraní):
process_text.sh -L -D
Kontroly a finální úpravy pro předání
- Provádíme 3 druhy kontrol:
no_space_after_token_morphanal.pl
- kontrolu syntaktické správnosti řádků a tagů
- Vondřičkův skript
Kontroly
no_space_after_token_morphanal.pl
:cd vert-final for ff in *; do no_space_after_token_morphanal.pl ../in-utf8/$ff /dev/null < $ff > /dev/null; done
- syntaktická správnost:
parallel-filter.sh -C check-vert-tag-v2020.pl -n -p10 -s vert-rules
Finální úpravy a kontrola Vondřičkou
- Vytvoříme adresář
CNK
, do kterého zkopírujeme hotové soubory a přejmenujeme je na.vrt
:mkdir CNK cd vert-final for ff in *.txt; do cp -p $ff ../CNK/${ff%.txt}.vrt; done cd ../CNK for ff in *.vrt; do ln -s ../orig/${ff%.vrt}.txt for ff in *.vrt; do ln -s ../orig/${ff%.vrt}.json
- Kontrola Vondřičkou:
cd CNK parallel-mask.sh -C vrt2standoff.py -m ".*\.vrt$" -v -p45 -d.
- Soubory, které mají
.vrt.json
, se mohou odeslat.
Korpus SYN2020_predvyber-sublemma
- Korpus obsahuje
word
,space
,lemma
,sublemma
,tag
averbtag
- Použije se Tomášův program
~tomas/syn2020/bin/Tools/priprav_morfanal_pro_bonito.pl
:cd /store/corp/SYNv9/SYN2020_predvyber/vert-morf-simp-nosp-sgcr-con-sublm-vrbtg8-rules for ff in *; do echo $ff; \ ~tomas/syn2020/bin/Tools/priprav_morfanal_pro_bonito.pl \ ../vert-morf-simp-nosp-sgcr-con/$ff < $ff > ../bonito/$ff; done
Korpus SYN2020_predvyber-rules-MorphoDiTa, kontrola souborů pro ČNK
- Texty jsou na grimmovi v adresáři
store/corp/SYNv9/SYN2020_predvyber
. - Pustí se skript
process_text_grimm.sh
, který provede morfologickou analýzu, pravidla z rootu a potom tagování MorphoDiTou. - Výsledek, který je v adresáři
vert-rules-mdita-sublm-agr
, se zbaví entit&email;
a&url;
a zkontroluje programemvrt2standoff.py
:cd vert-rules-mdita-sublm-agr rm -f ../vert-CNK/*.vrt* for ff in *; do echo $ff; perl -pe 's/<s>//' $ff | grep -vP "^</?[gps]/?>$" | grep -v '&url;' | grep -v '&email;' > ../vert-CNK/${ff%.txt}.vrt; done
a potom se známým způsobem zkontrolují soubory (
.txt
a.json
musí být z adresáře../orig
):cd ../vert-CNK parallel-mask.sh -C "vrt2standoff.py" -m ".*\.vrt$" -v -p40 -d.
Ty, které prošly, se převedou do formátu pro
manatee-registry.sh
tímto příkazem:for ff in *.vrt.json; do echo $ff; echo "<doc file=\"${ff%.vrt.json}\">" | cat - ../vert-rules-mdita-sublm-agr/${ff%.vrt.json}.txt \ | cat - <(echo "</doc>") | grep -v "&(url|email);" > ../vert-rules-MorphoDiTa/${ff%.vrt.json}; done
- Korpus se pak vyrobí příkazem
manatee-registry.sh -c. -f vert-rules-MorphoDiTa -C
Vertikály pro ČNK
- Odevzdáváme soubory z adresáře
vert-rules-mdita-sublm-agr
, ale jenom ty, které prošly skriptemvrt2standoff.py
:cd vert-CNK for ff in *.vrt.json; do ln -s ../vert-rules-mdita-sublm-agr/${ff%.vrt.json}.txt ../vert-CNK-odeslat/${ff%.json}; done
- Provedeme kontrolu, jestli něco není ukousnuté. Buď
cd vert-rules-mdita-sublm-agr
nebo
cd vert-CNK-odeslat
Podle toho, jestli kontrolujeme všechno, nebo jenom to, co prošlo Vondřičkou. Potom:
rm ../vert-CNK-corr/* for ff in *; do echo $ff; perl -pe 's/<s>//' $ff | grep -vP "^</?[gps]/?>$" > ../vert-CNK-corr/${ff%.txt}.vrt; done cd ../vert-CNK-corr ls *.vrt | parallel -j 45 "cat {} | no_space_after_token_morphanal.pl ../orig/{.}.txt /dev/null > /dev/null" 2>../errlog/short-files.log for ff in $(cut -c 6- ../errlog/short-files.log | cut -f1 -d':'); do echo $ff; rm ../vert-CNK-odeslat/${ff%.txt}.vrt; done
- Seznam ukousnutých vyrobíme takto:
cd ../errlog cut -c6- short-files.log | cut -f1 -d':' | sort > short-files.lst
- Všechny vadné zkopírujeme do adresáře pro opravu:
cd ../in-utf8 for ff in $(comm -3 <(ls) <(ls ../vert-CNK-odeslat/ | perl -pe 's/\.vrt/.txt/')); do cp -p $ff ../../SYN2020_oprava/in-utf8/; done
Zmrazené a distribuční verze
Zmrazená verze
- Soupis programů a souborů, které jsou zapotřebí pro běh zmrazené verze
- Vytvoření zmrazené verze
- Program
- Kontroly
- Spouštění zmrazené verze
Distribuční verze
Programy se dají distribuovat na systémy, které splňují následující SW požadavky:
- Perl
- List/MoreUtils.pm
- Python3
- numpy
- tensorflow
- parallel
- Nainstalovaná MorphoDiTa
Distribuce se provádí v zazipovaném souboru, který vznikne spuštěním programu make-ver2020-distr.sh
v adresáři se zmrazenou verzí:
cd /usr/local/syn2020/versions/202105 make-ver2020-distr.sh
Archiv disamb-2020-distr-202105.zip
se zkopíruje na vzdálený stroj a rozbalí do adresáře, ve kterém má být umístěn celý balík. Potom se spustí program set-env.sh
:
cd distr_home/202105 bin/set-env
a objeví se hláška
Put .versyn2020.rc to your HOME and use the command bash --rcfile ${HOME}/.versyn2020.rc
Ještě je třeba zkontrolovat, jestli se správně přepsal soubor options.json
:
lh syn2020/morphodita-research/models/Current_Model/options.json
Pro běh programu je třeba nastavit prostředí a v případě, že lokální instalace MorphoDiTy vyžaduje ještě vlastní nastavení, je třeba spustit i to. Na sag.korpus.cz
je to
source /usr/local/morphodita-research/env/bin/activate