Wiki spuštěna 24. 7. 2025

Variabilita

Tagování textů a generování tvarů pro databázi variability.

Tagování si má být co nejpodobnější, a proto vše sjíždíme stejnými nástroji a neděláme žádné dodatečné úpravy. Jednotlivé součásti ale potřebují speciální přípravu a potom zase nápravu.

Tagování korpusů

Příprava dat

Data dostáváme ve vertikále s mark-upem. Některá vertikála má jenom formy, některá i lemmata a tagy, a některá původní formy. Každá má ale trochu jiný mark-up. Většinu mark-upu můžeme vyházet, protože pro účely variability není zapotřebí.

new_diakorp_v6

  • Mark-up obsahuje <doc …>, <s …>, <f>, <k>, <m>, <n>, <o>, <v> a <x>.
  • Rozdělíme na docy:
    splitdoc-xml new_diakorp_v6 < new_diakorp_v6
  • Vezmeme první sloupec a tagy <f> a další nahradíme entitami: &tagf;, &tagfc; atd.:<code> cd orig cut -f1 new_diakorp_v6 | tag2ent.pl | vert_csts_simple.pl > ../csts/new_diakorp_v6</code>
  • Vezmeme první sloupec a přebytečné tagy vyházíme:
    for ff in new_diakorp_v6.00*; do echo $ff; cut -f1 $ff | grep -Pv "^</?[fkmnovx]>" \
    | vert_csts_simple.pl > ../csts/$ff; done

oral_vertikala

  • Soubor je moc velký, naporcujeme ho na docy:
    splitdoc-xml oral_vertikala < oral_vertikala
  • Mark-up obsahuje <doc …>, <sp …> a <seg …>.
  • Vezmeme první sloupec a <sp> přejmenujeme na <s> a <seg> nahradíme entitou:<code> for ff in oral_vertikala.*; do echo $ff; cut -f1 $ff | fill-spaces.pl | perl -pe 's:^(</?s)p:$1:' \ | tag2ent.pl | vert_csts_simple.pl > ../csts/$ff; done</code>
  • Na konci je pak třeba vrátit původní tagy <seg> s názvy nahrávek.
  • Vezmeme první sloupec, dlouhé poznámky v závorce zkrátíme, <sp> přejmenujeme na <s> a <seg> vyhodíme:
    for ff in oral_vertikala.0*; do echo $ff; cut -f1 $ff | perl -pe 's:^(\([^ ]+) .*:$1_):' \
    | grep -Pv "^</?seg" | perl -pe 's:^(</?s)p:$1:' | vert_csts_simple.pl > ../csts/$ff; done
  • Na konci musíme opravit <s> na <sp>.

ortofon_vertikala

  • Soubor je moc velký, naporcujeme ho na docy:
    splitdoc-xml ortofon_vertikala < ortofon_vertikala
  • Mark-up obsahuje <doc …>, <sp …>, <overlap>, <para>, <pw> a <unclear>.
  • Vezmeme první sloupec a <sp> přejmenujeme na <s> a <pw> nahradíme entitou:<code> for ff in ortofon_vertikala.*; do echo $ff; cut -f1 $ff | fill-spaces.pl | perl -pe 's:^(</?s)p:$1:' \ | tag2ent.pl | vert_csts_simple.pl > ../csts/$ff; done</code>
  • Vezmeme první sloupec, zkrátíme závorky, <sp> přejmenujeme na <s> a <pw> vyhodíme:
    for ff in ortofon_vertikala.00*; do echo $ff; cut -f1 $ff | perl -pe 's:^(\([^ ]+) .*:$1_):' \
    | grep -Pv "^</?overlap" | grep -Pv "^</?para" | grep -Pv "^</?pw" | grep -Pv "^</?unclear" \
    | perl -pe 's:^(</?s)p:$1:' | vert_csts_simple.pl > ../csts/$ff; done
  • Na konci musíme opravit <s> na <sp>.

vert_archiv_19_stol

  • Naporcujeme na původní soubory:
    splitdoc-xml vert_archiv_19_stol < vert_archiv_19_stol
  • Soubory obsahují i poničené tagy a znaky <. Nahradíme je entitou &lt;. Při restaurování musíme dát pozor, aby byly na řádku samotné.
  • Mark-up obsahuje <doc …> a <s>. Soubory upravíme takto:
    for ff in vert_archiv_19_stol.00*; do echo $ff; cut -f1 $ff | perl -pe 's/^<$/&lt;/' \
    | vert_csts_simple.pl > ../csts/$ff; done

Tagování

  • Nejprve spustíme morfologii na tokenizovaný text v csts:
    make-corp.sh -s csts -t csts-morf -Eucs2 -M -A1 -B0 -p45 -v
  • Potom vše dorazíme:
    screen make-whole-corp-csts.sh -Eucs2 -M -f -v -p45 -trules
  • Některé texty zpřeházejí -li. U nich přeskočíme frazrl:
    cmp-lines-csts.sh csts csts-rules-frazrl > diffs-frazrl.txt
    for ff in $(grep "File: " diffs-frazrl.txt | cut -f2 -d' '); \
    do cp -p csts-rules/$ff oprava/csts-rules-frazrl/; done
    cd oprava
    screen make-whole-corp-csts.sh -Eucs2 -M -f -v -p45 -trulh1

Závěrečné kontroly a úpravy

  • Kontrola, jestli jsou soubory celé:
    cmp-lines-csts.sh csts csts-rules-frazrl-rulh1-tag-vid-corr
  • Kontrola csts včetně tagů:
    for ff in *; do echo $ff; check-csts-tag.pl 16 < $ff > /dev/null; done
  • Převedeme do vertikály:
    cd csts-rules-frazrl-rulh1-tag-vid-corr
    for ff in new_diakorp_v6.00* vert_archiv_19_stol.00*; do echo $ff; csts2cnk.pl < $ff \
    > ../vert-corr/$ff; done
    for ff in or*; do echo $ff; csts2cnk.pl < $ff | perl -pe 's:^(</?s):$1p:' > ../vert-corr/$ff; done
  • Opět spojíme do jednoho souboru (a zahodíme poslední sloupec):
    cut -f1-3 new_diakorp_v6.00* > ../vert-tagged/new_diakorp_v6
    cut -f1-3 oral_vertikala.0* > ../vert-tagged/oral_vertikala
    cut -f1-3 ortofon_vertikala.00* > ../vert-tagged/ortofon_vertikala
    cut -f1-3 vert_archiv_19_stol.00* > ../vert-tagged/vert_archiv_19_stol

Generování tvarů

  • Soubor nasekáme programem split na menší kousky.
  • Ty pak proženeme příkazem synth:
    for ll in $(cat lemmata/lemmata.aa); do echo $ll; echo $ll | cstocs utf8 il2 | synth | cstocs il2 utf8 > tvary/tvary.aa; done &
  • Vybereme jenom ty, ke kterým se něco nagenerovalo a kde je lemma obsaženo mezi tvary:
    cd tvary
    for ff in tvary.??; do echo $ff; list2morfflex.pl < $ff > ../found/tvary.found.${ff#tvary.}; done
  • Nenalezené zkusíme s indexy:
    for ll in $(cat lemmata/lemmata.ag); do for i in 1 2 3 4 5 6 7 8 9; do echo $ll-$i; echo $ll-$i | cstocs utf8 il2 | synth | cstocs il2 utf8; done; done > tvary/tvary.ag
  • Rozgenerujeme Hajičovy tagy a vyrobíme jeden soubor:
    cd ../found
    cat tvary.found.a? | JH-wide-var.pl | grep -vP "\tVi-.---3--.---.\t" > ../variabilita.tvary.lem-tag-form.txt
  • Opravíme lemmata u zájmen (já – my, ty – vy, on – oni, jeho – její – jejich?)
  • Nakonec ještě zkontrolujeme tagy:
    cd ..
    cut -f2 variabilita.tvary.lem-tag-form.txt | sort -u | check-tags.pl

QR Code
QR Code wiki:user:skoumal:infra:var-tagging (generated for current page)