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-correctvert-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.
cd mwe-out for ff in *; do cut -f7- $ff > ../vert-9/$ff; done
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_lemmamwe_tagmwe_ltagmwe_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 / majzla14170 č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 krev7128 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
/cnk/work/utkl/Lemur. Je tam vertikala.lemur a adresář vert-lemur s jednotlivými soubory.vertikala.lemur./cnk/work/skoumal/LEMUR/syn2020lemur (/home/skoumal/cnk-work/LEMUR/syn2020lemur).docs a nasekáme do něj jednotlivé soubory z vertikály:split-doc-xml.pl < ../vertikala.lemur
orig a soubory z docs do něj převedeme, aby co nejvíce připomínaly originální XML soubory. Zrušíme dělení na věty – segmentaci uděláme znovu:parallel-filter.sh -C 'cut -f1 | perl -C -pe "undef $/; s/([^>])\n/\1 /g" | perl -C -pe "undef $/; s: <g/>\n::g" \ | perl -C -pe "s/ </\n</" | perl -C -pe "undef $/; s/([^>])\n<hi/\1 <hi/g" | perl -C -pe "undef $/; s/(<hi[^>]+>)\n/\1/g" \ | perl -C -pe "undef $/; s:\n(</hi>):\1:g" | perl -C -pe "undef $/; s:(</hi>)\n([^<]):\1 \2:g" \ | perl -C -pe "undef $/; s:\n</s>\n<s[^>]*>\n: :g" | perl -pe "undef $/; s:</?s[^>]*>\n::g"' -e -s. -t ../orig/ -p45 -v
orig máme XML, na která můžeme pustit Vondřičkovy skripty.