Table of Contents
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<
. 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/^<$/</' \ | 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čímefrazrl
: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