====== 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; doneNebo paralelně: parallel-mask.sh -C xml2standoff.py -d . -m ".*\.xml$" -p45 -vKromě ''.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; donenebo paralelně:parallel-filter.sh -C "csts2cnk.pl [-E]" -s csts-rules-frazrl-rules1-rulh1-tag-vid-corr -t vert-corr -p40 -vnebo 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; donenebo for ff in *.txt; do echo $ff; cp -p $ff ../vert-kolok-CNK/${ff%.txt}.vrt; donePokud 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; doneAnebo 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; doneAnebo 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; donepří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''.