====== 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 -Cconfig: 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; doneNebo paralelně: parallel-mask.sh -C xml2standoff.py -d . -m ".*\.xml$" -p45 -vKromě ''.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'' a ''conllu-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é do ''in-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 number of parallel threads; default is 1 -s 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 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'' a ''verbtag'' * 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 programem ''vrt2standoff.py'':cd vert-rules-mdita-sublm-agr rm -f ../vert-CNK/*.vrt* for ff in *; do echo $ff; perl -pe 's///' $ff | grep -vP "^$" | grep -v '&url;' | grep -v '&email;' > ../vert-CNK/${ff%.txt}.vrt; donea 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 "" | cat - ../vert-rules-mdita-sublm-agr/${ff%.vrt.json}.txt \ | cat - <(echo "") | 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 skriptem ''vrt2standoff.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-agrnebocd vert-CNK-odeslatPodle 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///' $ff | grep -vP "^$" > ../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-enva 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 tosource /usr/local/morphodita-research/env/bin/activate