Projekt trvá od 09/23 do 11/26.
Cílem je doplnit kvalitativně i kvantitativně databázi LEMUR a při značkování přejít na ni.
lovelace
.vert-rules0-frazrl-rules-mdita-correct
vert-rules0-frazrl-rules-mdita-kolok-sublm-agr
, ze kterého odstraníme anotaci FRANTou:mkdir -p vert-1-6 mkdir -p vert-7 mkdir -p vert-8 mkdir -p vert-9 cd vert-rules0-frazrl-rules-mdita-kolok-sublm-agr for ff in *; do cut -f1-6 $ff > ../vert-1-6/$ff; done for ff in *; do cut -f7 $ff > ../vert-7/$ff; done for ff in *; do cut -f8 $ff > ../vert-8/$ff; done
a pak můžeme provést lemurizaci
mkdir -p vert-mwe lemurtag -b -i vert-6 -o vert-mwe -m /cnk/local/ssd/vitovec/model_20240915.json -n100
mwe_tagger
a jeho poslední verze je na lovelace
v adresáři /cnk/local/ssd/vitovec/mwe_suite/target/release
.lemur_compiler
:$ lemur_compiler -h Compile Lemur data into representation suitable for data annotation Usage: lemur_compiler [OPTIONS] --model-file <MODEL_FILE> Options: -m, --model-file <MODEL_FILE> Model file [e.g. model.msgpack] -u, --url <URL> Lemur URL [default: https://yggdrasil.korpus.cz/ratatosk/api/cunits/_search] -p, --name-prefix <NAME_PREFIX> Name prefix: only dump MWEs whose name starts with the given prefix -i, --input-directory <INPUT_DIR> Local directory containing Lemur data -t, --transform Whether to derive additional data from the original data --gen-json Whether to generate JSON output along with the MSGPACK output -v, --verbose... Increase verbosity level (-v, -vv) -h, --help Print help -V, --version Print version
obvyklý postup kompilace je
cd ~/cnk-work/LEMUR lemur_compiler -t -m model-250820.msgpack > model-250820.log
mwe_tagger
:$ mwe_tagger -h Annotate data with multi-word expressions from the Lemur database Usage: mwe_tagger [OPTIONS] --input <INPUT> --output <OUTPUT> --model-file <MODEL_FILE> Options: -i, --input <INPUT> Input file or directory -o, --output <OUTPUT> Output file or directory -m, --model-file <MODEL_FILE> Model file -n, --number-of-threads <THREADS_NUMBER> Number of threads (batch mode only) [default: 1] -f, --format <FORMAT> Format of input data [default: long] [possible values: long, short] -b, --batch-mode Batch mode (input and output interpreted as directories) -t, --include-tags Include MWE tags -c, --compress Avoid matches that are part of another matches (partially overlapping matches still allowed) -h, --help Print help -V, --version Print version
obvyklý postup anotace je
mwe_tagger -b -i vert-rules0-frazrl-rules-mdita-sublm-agr -o mwe_out -t -n 100 [-c]
výstupní adresář musí existovat.
mkdir -p vert-kolok cd vert-1-6 for ff in *; do paste $ff ../vert-7/$ff ../vert-8/$ff ../vert-9/$ff | perl -pe 's/[\ \t]+$//' > ../vert-kolok/${ff%.txt}.vrt; done
cd vert-kolok for ff in ../orig/*.txt; do ln -s $ff; done for ff in ../orig/*.json; do ln -s $ff; done for ff in ../orig/*.xml; do ln -s $ff; done parallel-mask.sh -C "ann2standoff -c ../../ann2standoff.ini -p frantalemur -P none" -m ".*\.vrt" -v -p45 -d. parallel-mask.sh -C "standoff2xml " -m ".*\.txt$" -v -p100 -d. for ff in *.ann.xml; do xml2vrt -c ../../ann2standoff.ini -p frantalemur -g g $ff; done \ > /cnk/common/korpus/vertikaly/totalita-gacr/vertikala
V korpusu ortofon
postupujeme takto:
/cnk/common/korpus/vertikaly/ortofon_v3/vertikala
<pw>
, <para>
, <overlap>
a <unclear>
a zkrátit ji na 6 sloupců:cd cnk-work/Frazeologie/ortofon_v3/vert grep -vP "^<[/]?(para.*|pw|overlap|unclear)>$" /cnk/common/korpus/vertikaly/ortofon_v3/vertikala | cut -f1-6 | remove-sp.pl > vertikala
split-doc.pl < vertikala
Ve stejném adresáři vzniknou .txt
soubory obsahující jeden původní soubor.
orig
a odstraníme XML
mark-up:mv *.xml ../orig/ cd ../orig parallel-mask.sh -C xml2standoff -d . -m ".*\.xml$" -p45 -v
a přesuneme .txt
soubory do ../mwe-in
:
for ff in *.txt; do echo $ff; cat -s $ff | sed '1{/^$/d}' > ../mwe-in/$ff; done
mwe-in
slouží jako vstupní pro lemurizátor (provádíme na lovelace):cd cnk-work/Frazeologie/ortofon_v3 lemurtag -b -i mwe-in -o mwe-out -m /cnk/local/ssd/vitovec/model_20240915.json -n 10
Postupujeme stejně jako u Synů. Nejdřív vše zkontrolujeme (podle Návodu na výrobu korpusu...) a potom vyrobíme data pro Kontext (podle Skript process_text.sh)
cd <korpus> comm -3 <(ls mwe-in) <(ls mwe-out) cd .. parallel-filter.sh -C "check-vert-tag-v2020.pl -c5 -k -t -V" -n -s mwe-out -p45
(v současné době si stěžuje na tagy E---...
a H---...
a na lemuří tagy).
skeleton file
:cd orig grep -vP "\t" 15X028N.xml > ../mwe-out/15X028N.skel.xml
vrt2xml.pl
:cd ../mwe-out vrt2xml.pl 15X028N.skel.xml /dev/null < 15X028N.txt > 15X028N.ann.xml
nebo hromadně
for ff in *.txt; do echo $ff; vrt2xml.pl ${ff%.txt}.skel.xml ../failed-files.txt < $ff > ${ff%.txt}.ann.xml; done
.ann.xml
už můžou být poslepovány do vertikály:cat *.ann.xml > /cnk/common/korpus/vertikaly/ortofon_mwe/vertikala
a oindexovány do korpusu.
Zde jsou sepsané zásady pro frazémovou anotaci v SYNech počínaje verzí SYNv14 a SYN2025, přičemž něco se uplatní až v dalších korpusech.
mwe_tagger
.mwe_lemma
mwe_tag
mwe_ltag
mwe_lemma
: lemma z databáze LEMUR. Pod ním se mohou skrývat různé varianty lexikálního obsazení, ale lemma bude pro všechny varianty jen jedno:mrkat_na_drát
: mrkat, čučet, čumětmwe_tag
: tag popisující celou MWE, u všech slov stejný, až na příznak (momentálně 1) sloužící k tomu, abychom mohli každý výskyt najít jen jednou. Pozice v tagu:mwe_ltag
: tag popisující jednotlivá slova v MWE. Pozice v tagu:mwe_tag
přidáme ještě příznak, že jde o transformaci (a jakou).hození flinty do žita hodit_flintu_do_žita vn---z--
Podrobnější popis mwe_tag
a mwe_ltag
je zde.
Korpus anotovaný nejnovější verzí mwe_tagger
je např. NEWTON2023
Až bude LEMUR “hotový”, počítáme s prokliky z korpusu do databáze, jako je to v syn2020lemur.
Vstupní věty obsahují ID a text se závorkami, lomítky a svislítky, např.
6764 [dělat / vyvolávat / způsobit] zlou krev (mezi někým)|[dělat / vyvolávat / způsobit] (někde) zlou krev
7128 dávatxsi na někoho / něco (velkého) bacha / majzla
14170 čumět (na něco / někoho) jako puk
Je třeba text rozgenerovat, aby každá varianta tvořila celou větu. Netvoříme varianty, kde je něco vynecháno, vždy použijeme všechny pozice. Závorky jsou užitečné, protože vyznačují dosah lomítka. Tam, kde chybí, je doplníme perlovským skriptem paren_ASSC.pl
paren_ASSC.pl < assc-lemmata_062025_lemurizovat.txt > assc-lemmata_062025_paren_lemurizovat.txt
Výsledkem je soubor. kam jsou dodané složené závorky:
6764 [[dělat / vyvolávat / způsobit]] zlou krev (mezi někým)|[[dělat / vyvolávat / způsobit]] (někde) zlou krev
7128 dávatxsi na {někoho / něco} (velkého) {bacha / majzla}
2119 to by {člověk / jeden} blil|z toho by {jeden / člověk} blil
Pro rozgenerování všech variant máme skript split_ASSC.pl
. Je třeba ještě opravit xsi
a xse
na si
a se
a vyrazit duplikáty. Celé rozgenerování se pouští příkazem
paren_ASSC.pl < assc-lemmata_062025_lemurizovat.txt | split_ASSC.pl | perl -pe 's/x(s[ei])/ $1/g' > assc-lemmata_062025_split_lemurizovat.txt
anebo, chceme-li zachovat uzávorkování, dvěma po sobě jsoucími příkazy
paren_ASSC.pl < assc-lemmata_062025_lemurizovat.txt > assc-lemmata_062025_paren_lemurizovat.txt split_ASSC.pl < assc-lemmata_062025_paren_lemurizovat.txt | perl -pe 's/x(s[ei])/ $1/g' > assc-lemmata_062025_split_lemurizovat.txt
Pak je ještě třeba vyrazit duplikáty
sort -u -o assc-lemmata_062025_split_lemurizovat.txt assc-lemmata_062025_split_lemurizovat.txt
TODO: Je třeba ještě ošetřit spřežky:
$ grep -P "([\p{L}]+) ([\p{L}]+) / \1\2" assc-lemmata_062025_lemurizovat.txt 1542 blbnout na kvadrát / nakvadrát 24318 být [ten tam / tentam / ta tam / tatam] 28969 brát za své / zasvé 41772 svatá Anna, chladna z rána / zrána 41772 svatá Anna, chladna z rána / zrána 24081 vzít / brát za své / zasvé
$ grep -P "([\p{L}]+)([\p{L}]+) / \1 \2" assc-lemmata_062025_lemurizovat.txt 1567 totéž v bleděmodrém / bledě modrém|to samé v bleděmodrém / bledě modrém 10444 rozpálit / rozžhavit někoho doběla / do běla 14155 koukat / čumět / zírat doblba / do blba 15612 dátxsi (s něčím) načas / na čas 15613 dávatxsi (s něčím) načas / na čas 29547 jez dopolosyta / do polosyta (, pij dopolopita / do polopita) 43866 jít donaha / do naha 54432 spadnout z jahody (naznak / na znak) 52727 koukat (na to) jako zjara / z jara 55391 nemít (ani) (zdaleka / z daleka) vyhráno 55390 nemít (ještě) (zdaleka / z daleka) vyhráno 51229 [oznámit / sdělit / donést] někomu něco hned zatepla / za tepla 51228 [oznámit / sdělit / donést] někomu něco ještě / hned zatepla / za tepla 51230 [oznámit / sdělit / donést] někomu něco ještě zatepla / za tepla 51228 [oznámit / sdělit / donést] někomu něco ještě / hned zatepla / za tepla 51228 [oznámit / sdělit / donést] někomu něco ještě / hned zatepla / za tepla 47253 rozpálit / rozžhavitxse doběla / do běla 56621 (je to pravda,) jakože / jako žexse X jmenuju
Hotový soubor assc-lemmata_062025_split_lemurizovat.txt
zkopírujeme do adresáře in-utf8
a postupujeme obvyklým způsobem
process_text.sh -f -v
Adresář vert-rules0-frazrl-rules-mdita-sublm-agr
zlinkujeme jako mwe-in
, vyrobíme mwe-out
a lemurizujeme
mwe_tagger -i mwe-in/ -o mwe-out/ -m ~/cnk-work/LEMUR/model-250618.msgpack -b -t -c
Korpus (assč-lemur
) vyrobíme ze souboru v mwe-out
příkazem
mkdir /cnk/common/korpus/vertikaly/assc-lemur vert2verttab.pl mwe-out | perl -pe 'undef $/; s/<s>\n([0-9]+)[^\n]+/<s id="$1">/g' > /cnk/common/korpus/vertikaly/assc-lemur/vertikala