Wiki spuštěna 24. 7. 2025

Návod na výrobu korpusu hybridem

Tento návod se týká korpusů do SYNv8 včetně.

  • Pracujeme v csts a UTF-8.
  • Vstup dostáváme v XML, musíme si ho převést na plain text Pavlovým (Vondřičkovým) programem.
  • Je třeba ošetřit řádky obsahující jen mezery a tabulátory a taky řádky končící mezerou nebo tabulátorem.
  • Celé zpracování se pouští skriptem make-whole-corp-csts.sh.
  • Na konci je třeba zrestaurovat XML.

Skript na odstranění XML značek

  • Nejdřív je třeba dostat do textů entity &url; a &email; a odlepit < a > od okolních slov:
    parallel-filter.sh \
    -C "perl -pe 's:<ref/>: &url; :g' | perl -pe 's:<email/>: &email; :g' \
    | perl -pe 's/((\&[gl]t;)+)/ \$1 /g'" -p45 -s orig -t orig-url -v
  • 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.

make-whole-corp-csts.sh

  • Plain text je v adresáři in-utf8
  • make-whole-corp-csts.sh se pouští s parametry -Eucs2 -M -f -v -p40:
    make-whole-corp-csts.sh -Eucs2 -M -f -v -p40
  • Výsledek je v adresáři csts-rules-frazrl-rulh1-tag-vid-corr
  • Pokud nechci označit, kdo za co může, pustím příkaz bez parametru -M:
    make-whole-corp-csts.sh -Eucs2 -f -v -p40
  • Výsledek je pak v adresáři csts-rules-frazrl-rulh1-tag-vid-corr

Podrobný popis jednotlivých kroků

  1. Morfologie
    • PreMorfo
    • Vlastní morfologie
    • PostMorfo
    • remove-dupl-csts-mark.pl M
  2. Pravidla: v prvním kroku označí negramatické kolokace.
    • root0
    • sed
    • remove-dupl-csts-mark.pl 0
  3. FRAZRL: používají se programy a tabulky v adresáři $FRAZRL_PREFIX/FRAZRL
    • c4001a_dis_vetne_csts.x a c4001a_dis_fraz_csts.x
    • remove-dupl-csts-mark-wrapper.pl:
      • remove-dupl-csts-mark.pl
      • normalize
  4. Pravidla
    • root (root0 + root1)
    • sed
    • remove-dupl-csts-mark.pl 1
  5. Heuristika
    • [normalize]
    • disheu1
    • sed
    • remove1314.pl
    • remove-dupl-csts-mark.pl h
  6. Tagger
    • [normalize]???
    • featurama
    • sed
    • negr_kolokace_csts_ucs2.pl
    • označení pachatele
  7. Vidy
  8. Závěrečné úpravy

Průběžné kontroly výsledku

  • Korektní csts:
    cd csts-morf
    for ff in *; do check-csts.pl < $ff > /dev/null; done
  • Pokud neprojde, udělat kontrolu i s výpisy názvů souborů:
    for ff in *; do echo $ff; check-csts.pl < $ff > /dev/null; done [> ../error.txt]
  • anebo paralelně:
    parallel-filter.sh -C "check-csts.pl 16" -p10 -s csts-rules-frazrl-rulh1-tag-vid-corr -n
  • Všechny adresáře testujeme proti csts-morf:
    cmp-lines-csts.sh csts-morf csts-rules

Závěrečné [ú|o]pravy

  • Opravy vidů
  • Restaurování mezer a pomlček ve formách
  • Entity?
  • Zjednodušení tagů
  • Sjednocení interpunkce
  • Velká/malá písmena
  • Kontrola tagů

Vrácení XML do výsledku a příprava vertikály pro Bonito

  • Nejdřív musíme uvést všechny formy do původního tvaru (&space;, QQQQ atd.)
  • Převedeme csts do vertikály skriptem csts2cnk.pl:
    mkdir -p ../vert-corr
    cd csts-rules-frazrl-rules1-rulh1-tag-vid-corr
    for ff in *; do echo $ff; csts2cnk.pl [-E] < $ff > ../vert-corr/$ff; done

    nebo paralelně:

    parallel-filter.sh -C "csts2cnk.pl [-E]" -s csts-rules-frazrl-rules1-rulh1-tag-vid-corr -t vert-corr -p40 -v

    nebo

    parallel-filter.sh -C "csts2cnk.pl [-E]" -s csts-kolok -t vert-kolok-corr -p40 -v

Vrácení XML

  • Vyrobíme zvláštní adresář vert-CNK a do něj zkopírujeme hotové vertikály (s tabulátory), ale s příponou .vrt
    cd ../vert-corr
    for ff in *.txt; do echo $ff; cp -p $ff ../vert-CNK/${ff%.txt}.vrt; done

    nebo

    for ff in *.txt; do echo $ff; cp -p $ff ../vert-kolok-CNK/${ff%.txt}.vrt; done

    Pokud jsme vkládali entity &url; a &email;, je třeba je odstranit:

    parallel-filter.sh -C 'grep -Pv "^\&url;\t" | grep -Pv "^\&email;\t" | cat -s' \
    -p45 -s vert-corr -t vert-CNK -v

    (pozor na tabulátory místo mezer). A pak ještě přejmenujeme .txt na .vrt:

    for ff in *.txt; do mv $ff ${ff%.txt}.vrt; done
  • Z adresáře orig přikopírujeme soubory .txt a .json:
    cd ../vert-CNK
    for ff in *.vrt; do ln -s ../orig/${ff%.vrt}.txt; done
    for ff in *.vrt; do ln -s ../orig/${ff%.vrt}.json; done
  • V adresáři vert-CNK vyrobíme soubory .vrt.json:
    cd .../vert-CNK
    for ff in *.vrt; do echo $ff; vrt2standoff.py $ff; done

    Anebo paralelně:

    parallel-mask.sh -C "vrt2standoff.py" -m ".*\.vrt$" -v -p40 -d.
  • Vytvoříme adresář ../vert-CNK-vrt a soubory, které prošly, tam přesuneme:
    for ff in *.vrt.json; do echo $ff; mv ${ff%.vrt.json}.* ../vert-CNK-vrt; done
  • Vytvoříme XML soubory:
    for ff in *.txt; do echo $ff; standoff2xml.py $ff; done

    Anebo paralelně:

    parallel-mask.sh -C "standoff2xml.py" -m ".*\.txt$" -v -p40 -d.
  • Vytvoříme vertikálu pro Kontext:
    for ff in *.merged.xml; do gg=${ff%.merged.xml}; xml2vrt.py $ff | vrtcleaner.py -e i,b,u,hi \
    | perl -pe "s/(\<doc)/\$1 name=$gg/" > ../vert-final/$gg; done

Kontrola souborů, které neprošly

  • Soubory, které neprošly vrt2standoff.py
    for ff in *.vrt; do echo $ff; perl -i -pe 's/&gt;/>/g' $ff; done
    for ff in *.vrt; do echo $ff; perl -i -pe 's/&lt;/</g' $ff; done

    a zbytek ručně

  • Soubory, které neprošly standoff2xml.py

Příprava textů pro manatee

  • Vytvoříme adresář …/vert-tagged
  • Převedeme soubory z vert-corr — nahradíme mezery podtržítky a zkonvertujeme do ISO Latin 2:
    cd vert-corr
    for ff in *; do echo $ff; tr ' ' '_' < $ff | cstocs --fillstring="ßßß" utf8 il2 > ../vert-tagged/$ff; done

    případně paralelně:

    cd .../korpus
    parallel-filter.sh -C "tr ' ' '_' | cstocs --fillstring="ßßß" utf8 il2" -s vert-corr -t vert-tagged -p40 -v

Přidání kolokací a syntaxe

  • Do adresáře vert-synt zkopírujeme syntax.
  • Vyrobíme kolokace příkazem make-kolok-csts.sh. Výsledek je v adresáři csts-kolok. Převedeme je do vertikály do adresáře vert-kolok programem csts2cnk.pl:
    cd csts-kolok
    for ff in *; do csts2cnk.pl < $ff > ../vert-kolok/$ff; done
  • Vytvoříme adresář vert-cols a v něm shromažďujeme sloupce do výsledné vertikály:
    mkdir vert-cols
    cd vert-CNK-vrt
    for ff in *.vrt; do sed '1{/^$/d}' < $ff | cut -f1-4 > ../vert-cols/$ff.1-4; done
    cd ../vert-kolok
    for ff in *.txt; do sed '1{/^$/d}' < $ff | cut -f5 > ../vert-cols/${ff%.txt}.vrt.5; done
    for ff in *.txt; do sed '1{/^$/d}' < $ff | cut -f6 > ../vert-cols/${ff%.txt}.vrt.6; done
    cd ../vert-synt
    for ff in *.txt; do sed '1{/^$/d}' < $ff | cut -f5- > ../vert-cols/${ff%.txt}.vrt.7-; done
  • Vytvoříme adresář vert-kolok-synt a poslepujeme sloupce:
    cd ../vert-cols
    for ff in *.vrt.5; do paste ${ff%.5}.1-4 $ff ${ff%.5}.6 ${ff%.5}.7- > ../vert-kolok-synt/${ff%.5}; done
  • Nakonec opět zkontrolujeme skriptem vrt2standoff.py.

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