====== 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 '''', '''', '''', '''', '''', '''', '''', '''' a ''''. * Rozdělíme na docy:splitdoc-xml new_diakorp_v6 < new_diakorp_v6 * Vezmeme první sloupec a tagy '''' a další nahradíme entitami: ''&tagf;'', ''&tagfc;'' atd.: cd orig cut -f1 new_diakorp_v6 | tag2ent.pl | vert_csts_simple.pl > ../csts/new_diakorp_v6 * 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 "^" \ | 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 '''', '''' a ''''. * Vezmeme první sloupec a '''' přejmenujeme na '''' a '''' nahradíme entitou: for ff in oral_vertikala.*; do echo $ff; cut -f1 $ff | fill-spaces.pl | perl -pe 's:^( ../csts/$ff; done * Na konci je pak třeba vrátit původní tagy '''' s názvy nahrávek. * Vezmeme první sloupec, dlouhé poznámky v závorce zkrátíme, '''' přejmenujeme na '''' a '''' vyhodíme: for ff in oral_vertikala.0*; do echo $ff; cut -f1 $ff | perl -pe 's:^(\([^ ]+) .*:$1_):' \ | grep -Pv "^ ../csts/$ff; done * Na konci musíme opravit '''' na ''''. === ortofon_vertikala === * Soubor je moc velký, naporcujeme ho na ''docy'': splitdoc-xml ortofon_vertikala < ortofon_vertikala * Mark-up obsahuje '''', '''', '''', '''', '''' a ''''. * Vezmeme první sloupec a '''' přejmenujeme na '''' a '''' nahradíme entitou: for ff in ortofon_vertikala.*; do echo $ff; cut -f1 $ff | fill-spaces.pl | perl -pe 's:^( ../csts/$ff; done * Vezmeme první sloupec, zkrátíme závorky, '''' přejmenujeme na '''' a '''' vyhodíme: for ff in ortofon_vertikala.00*; do echo $ff; cut -f1 $ff | perl -pe 's:^(\([^ ]+) .*:$1_):' \ | grep -Pv "^ ../csts/$ff; done * Na konci musíme opravit '''' na ''''. === 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 '''' a ''''. 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čí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:^( ../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