====== 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:: &url; :g' | perl -pe 's:: &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ů ====
- Morfologie
* PreMorfo
* Vlastní morfologie
* PostMorfo
* ''remove-dupl-csts-mark.pl M''
- Pravidla: v prvním kroku označí [[wiki:user:skoumal:infra:negr_kolok|negramatické kolokace]].
* ''root0''
* ''sed''
* ''remove-dupl-csts-mark.pl 0''
- 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''
- Pravidla
* ''root'' (''root0'' + ''root1'')
* ''sed''
* ''remove-dupl-csts-mark.pl 1''
- Heuristika
* [''normalize'']
* ''disheu1''
* ''sed''
* ''remove1314.pl''
* ''remove-dupl-csts-mark.pl h''
- Tagger
* [''normalize'']???
* ''featurama''
* ''sed''
* ''negr_kolokace_csts_ucs2.pl''
* označení pachatele
- Vidy
- 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/(\ ../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/>/>/g' $ff; done
for ff in *.vrt; do echo $ff; perl -i -pe 's/</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''.