Table of Contents
Návod na výrobu korpusu hybridem
Tento návod se týká korpusů do SYNv8
včetně.
- Pracujeme v
csts
aUTF-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:<ref/>: &url; :g' | perl -pe 's:<email/>: &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čí 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
ac4001a_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/(\<doc)/\$1 name=$gg/" > ../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/</</g' $ff; done
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 doISO 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ářicsts-kolok
. Převedeme je do vertikály do adresářevert-kolok
programemcsts2cnk.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
.