Wiki spuštěna 24. 7. 2025

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 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 <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 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/<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 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-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

QR Code
QR Code wiki:user:skoumal:infra:syn2020 (generated for current page)