====== GAČR 2024-2026 -- Frazeologie ====== Návody a poznámky k řešení GAČRu ===== Příprava korpusů ===== Návody na přípravu jednotlivých korpusů: ''Totalita'', ''SYN'' a ''ONLINE'' ==== Umístění jednotlivých korpusů v ÚČNK ==== Korpusy dostupné v ÚČNK jsou uloženy ve formátu ''XML'' v adresáři ''/cnk/common/korpus/xml''. Pro nás jsou relevantní adresáře: * ''monitora'' -- nový Online * ''net'' -- starý Online * ''onomos'' -- Rudé právo * ''synkorp'' -- všechno možné Co není k dispozici v ''XML'', může být dostupné ve vertikále v adresáři ''/cnk/common/korpus/vertikaly'': * ''online_old'' -- starý Online * ''monitora'' -- nový Online Dále existují texty na CD ke korpusu ''Totalita'' Zdroje potřebují obvykle nějak upravit, aby měly všechny jednotný formát a stejnou množinu ''metadat''. Všechny tyto úpravy zdrojů provádím u sebe v adresáři ''/home/skoumal/PROJEKTY/GACR2426/zdroje''. ==== Metadata ==== Metadata jsou uložena v databázi [[https://trnka.korpus.cz/adminer/?server=Trnka&username=skoumal&db=frape|Adminer]] (krátký [[wiki:user:skoumal:frap:adminer|návod]]). Protože máme data z různých zdrojů a různé povahy, budou v některém subkorpusu některé atributy vždy prázdné. Atributy metadat: Column Type Comment id char(100) author char(255) title char(255) subtitle char(255) publisher char(200) pubplace char(100) pubyear char(4) issue char(100) first_published char(4) isbnissn char(100) translator char(100) medium char(100) srclang char(20) txtype char(100) genre char(100) audience char(100) date char(100) media_type char(100) resource char(255) subcorpus char(20) t.id char(100) t.author char(255) t.title char(255) t.resource char(255) Každý dokument má jeden tag '''' a nejméně jeden tag ''''. V případě, že dokument není členěn na texty, zkopírují se do atributů ''t.author'', ''t.title'' a ''t.resource'' hodnoty z tagu ''''. Atribut ''t.id'' se odvodí z ''id''. Atribut ''id'' je název souboru. Podle něj se identifikují ostatní atributy, které se do souboru dodají. Pro výrobu finálních ''XML'' souborů se správnými ''metadaty'' potřebujeme export (v ''CSV'') z databáze v adresáři ''/home/skoumal/PROJEKTY/GACR2426/zdroje/databaze'', např. ''totalita.csv''. ==== Subkorpus Totalita ==== Korpus je umístěn v adresáři ''/cnk/work/skoumal/Frazeologie/Totalita'' Zdrojáky jsou v adresáři ''/home/skoumal/PROJEKTY/GACR2426/zdroje/subkorp_totalita'', kde jsou ještě rozděleny podle zdroje: * ''Totalita_cz'' -- texty z webu [[https://totalita.cz|Totalita.cz]] * ''onomos'' -- texty z ÚČNK, Rudé právo nepoužité v korpusus ''Totalita'' * ''synkorp'' -- beletrie z ÚČNK * ''totalita'' -- původní korpus ''Totalita'' * ''totalita_CD'' -- texty z CD, které nebyly použité v korpusu ''Totalita'' === Příprava zdrojových textů === U všech zdrojů je třeba text převést do pseudo-XML, které má následující strukturu:

text...

...
anebo

text...

...
Tag '''' může obsahovat i další atributy, ale k nim se nepřihlíží. Atribut ''id'' musí obsahovat název souboru a slouží pro identifikaci souboru při zpracování. Zde je popis, co bylo potřeba udělat s texty z korpusus ''Totalita'', kde navíc názvy souborů neodpovídaly údajům v databázi: Je třeba udělat tyto kroky: * Z textových souborů vyrobit ''.xml'' s metainformacemi. * V souboru ''meta.xml'' jsou vygrepnuté metainformace z vertikály. Nám stačí řádek '' * V souboru ''filenames.txt'' jsou **//zkrácená//** jména souborů seřazená tak, jak jsou abecedně plná jména souborů. Jména si musí odpovídat (''files.tsv''). * Vytvoříme soubor ''meta.tsv'', který obsahuje: * zkrácené jméno * plné jméno * řádek '' * Textové soubory jsou umístěny v adresáři ''txt-orig''. * Program ''txt2xml.sh'' spuštěný v adresáři ''Totalita'' převede soubory z adresáře ''txt-orig'' do ''.xml'' v adresáři ''orig''. V každém adresáři (''Totalita_cz'', ''onomos'', ''synkorp'', ''totalita'' a ''totalita_CD'') je adresář ''source'' a/nebo ''source-text''. V těchto adresářích jsou umístěny zdrojové texty s pseudo-markupem. (V adresářích ''source-text'' jsou soubory, které obsahují tagy '''', jež se mají zachovat.) Z těchto souborů vyrobíme ''.xml'' soubory příkazem ''source2xml-tot.pl'':cd source source2xml-tot.pl ../../../databaze/totalita.csv .nebocd source-text source2xml-tot.pl -t ../../../databaze/totalita.csv . V adresáři přibudou soubory ''.xml'', které přesuneme do adresáře ''orig'':mv *.xml ../../orig/ ==== Subkorpus SYN2020 ==== Zdrojáky jsou umístěny v adresáři ''/cnk/work/skoumal/Frazeologie/SYN2020'' Anotace se provádí v adresáři ''/home/skoumal/PROJEKTY/GACR2426/zdroje/subkorp_syn2020''. === Metadata === Metadata jsou vytažena z vertikály: ''/cnk/common/korpus/vertikaly/syn2020/vertikala'' pomocí programu: cd ~/PROJEKTY/GACR2426/zdroje/subkorp_syn2020/metadata meta-syn2020.pl < /cnk/common/korpus/vertikaly/syn2020/vertikala > vertikala.tsv Nová tabulka v ''Admineru'' se vyrobí tak, že se exportuje tabulka ''totalita'', vybere se začátek: SET NAMES utf8; SET time_zone = '+00:00'; SET foreign_key_checks = 0; SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; SET NAMES utf8mb4; DROP TABLE IF EXISTS `totalita`; CREATE TABLE `totalita` ( `id` char(100) NOT NULL, `author` char(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_nopad_ci NOT NULL, `title` char(255) NOT NULL, `subtitle` char(255) NOT NULL, `publisher` char(200) NOT NULL, `pubplace` char(100) NOT NULL, `pubyear` char(4) NOT NULL, `issue` char(100) NOT NULL, `first_published` char(4) NOT NULL, `isbnissn` char(100) NOT NULL, `translator` char(100) NOT NULL, `medium` char(100) NOT NULL, `srclang` char(20) NOT NULL, `txtype` char(100) NOT NULL, `genre` char(100) NOT NULL, `audience` char(100) NOT NULL, `date` char(100) NOT NULL, `media_type` char(100) NOT NULL, `resource` char(255) NOT NULL, `subcorpus` char(20) NOT NULL, `t.id` char(100) NOT NULL, `t.author` char(255) NOT NULL, `t.title` char(255) NOT NULL, `t.resource` char(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;a uloží se do souboru ''MySQL.txt''. V editoru se přepíše ''totalita'' na nové jméno a SQL příkaz se provede příkazem ''Import'' (v levém menu). Následně se tabulka vybere a provede se import dat ze souboru ''vertikala.tsv''. Metadata jsou uložena v databázi ''Adminer'' a byly v nich provedeny drobné opravy: * chybně uvedený jazyk Po provedené oprav se metadata exportují příkazem Export ve formátu TSV do souboru ''syn2020.csv.gz''. === Data === Zdrojové texty pocházejí jednak z kolekce ''SYN2020'' (1621 souborů) a jednak z kolekce ''NEWTON2019'' (2289 souborů) Soubory jsou rozděleny do adresářů ''.../subkorp_syn2020/author/'' a ''.../subkorp_syn2020/noauthor/'' podle toho, jestli mají ''texty'' různé autory nebo ne. Adresář ''noauthor'' se shoduje se soubory z kolekce ''SYN2020'' -- jde o knihy, u kterých je autor uveden v tagu '''' a tag '''' má atribut ''author'' prázdný. ==== Subkorpus SYN-pub ==== Jde o 75milionový korpus vytažený ze SYNv13, který obsahuje pouze publicistiku. === Metadata === V adresáři ''~/PROJEKTY/GACR2426/zdroje/subkorp_syn-pub'' jsou metadata v různých formátech: * ''hlavicky_opusu_syn_v13'' -- celý SYNv13, hlavičky z vertikály doplněné o údaje o počtu tokenů a slov * ''hlavicky_opusu_syn_v13-NMG'' -- výběr obsahující pouze ''%%txtype_group="NMG: publicistika"%%'' * ''hlavicky_opusu_syn_v13.tsv'' -- celé hlavičky; pouze hodnoty atributů oddělené tabulátorem * ''75mil_SYNv13_non-totalita_news_1989-2023.tsv'' -- výběr hodnot s tabulátory pro 75mil. korpus SYN-pub * ''75mil_SYNv13_non-totalita_news_1989-2023_id.srt'' -- seznam názvů souborů (bez koncovky) pro 75mil. korpus V adresáři ''~/PROJEKTY/GACR2426/zdroje/subkorp_syn-pub/metadata'' jsou jednotlivé hodnoty pro všechny soubory z 75mil. korpusu. Vznikly tak, že se soubor ''75mil_SYNv13_non-totalita_news_1989-2023.tsv'' nasekal po sloupcích (zde se berou hlavičky ze souboru ''db0104.tsv''):cd metadata cut -f1 ../db0401.tsv > title cut -f2 ../db0401.tsv > subtitle cut -f3 ../db0401.tsv > author cut -f4 ../db0401.tsv > issue cut -f5 ../db0401.tsv > publisher cut -f6 ../db0401.tsv > pubplace cut -f7 ../db0401.tsv > pubyear cut -f8 ../db0401.tsv > first_published cut -f9 ../db0401.tsv > translator cut -f10 ../db0401.tsv > srclang cut -f11 ../db0401.tsv > authsex cut -f12 ../db0401.tsv > transsex cut -f13 ../db0401.tsv > txtype_group cut -f14 ../db0401.tsv > txtype cut -f15 ../db0401.tsv > genre_group cut -f16 ../db0401.tsv > genre cut -f17 ../db0401.tsv > medium cut -f18 ../db0401.tsv > periodicity cut -f19 ../db0401.tsv > audience cut -f20 ../db0401.tsv > isbnissn cut -f21 ../db0401.tsv > biblio cut -f22 ../db0401.tsv > syn cut -f23 ../db0401.tsv > idJe třeba dodat ještě soubor ''empty'' obsahující jenom tabulátor. Tyto hodnoty se použijí pro nové hlavičky souborů:cd metadata paste id author title subtitle publisher pubplace pubyear issue first_published isbnissn translator medium srclang txtype genre audience empty empty empty empty empty empty empty empty > ../syn-pub.meta Je třeba ještě doplnit záhlaví s atributy:date media_type resource subcorpus t.id t.author t.title t.resourcea dát prázdné hodnoty do uvozovek:perl -i.bak -pe 's/\t\t/\t""\t/g' syn-pub.meta perl -i.bak -pe 's/\t\t/\t""\t/g' syn-pub.meta perl -i.bak -pe 's/\t$/\t""/' syn-pub.metaOpravený soubor zkopírujeme do adresáře ''~/cnk-work/Frazeologie/SYN-pub'', kde anotujeme korpus: cp -p syn-pub.meta ~/cnk-work/Frazeologie/SYN-pub/ === Oprava hlaviček ve zdrojových souborech === Pracujeme v adresáři ''~/cnk-work/Frazeologie/SYN-pub/''. Je třeba odstranit první řádku (''%%%%'') a opravit řádek ''%%'' s atributy a na prázdné. Potom opravíme každý druh zvlášť: * Převod do ''quasi-xml'':cd archive for ff in *.xml; do gg=${ff%.xml}; echo $gg; \ grep -v '(\n\1/g" | perl -pe 's/>\n

\n

//" > ../quasi-xml/$gg; done * Oprava tagů '''': * Ve výsledném korpusu mají být atributy ''id'', ''author'', ''title'' a ''resource''. V SYNu se může vyskytovat ''author'', ''id'' stanovíme podle ID dokumentu. * Opravu provedeme programem ''add-textattr.pl'':cd quasi-xml for ff in *; do echo $ff; ~/bin/totalita/add-textattr.pl < $ff > ../source-text/$ff; done * Převedeme texty do XML formátu se správnými hlavičkami: ~/bin/totalita/source2xml-tot.pl -t syn-pub.meta source-text/ orig/ xml ==== Subkorpus ONLINE ==== === Aktuální ONLINE === Existuje verze s "našimi" hlavičkami ve vertikále. Ta se zpracovává jako starý ONLINE (viz níže). Zdroje k aktuálnímu ''ONLINE'' jsou umístěny v adresáři ''/cnk/common/korpus/zdroje/monitora'' a jsou uloženy jako ''JSON''. * Na strojích ''chomsky'', ''trnka'' a ''lovelace'' existují programy na jejich převedení do ''XML''. * Každý stroj má vlastní adresář s pythonovskými moduly a vlastní nastavení v ''.bashrc_profile'' nebo ''.profile'': * ''chomsky'':PATH=/home/skoumal/bin/local_python/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/syn2020/bin:/usr/local/syn2020/xml2standoff:/home/skoumal/bin PYTHONPATH=/home/skoumal/bin/local_python/lib/python3.10/site-packages * ''trnka'':PATH=/home/skoumal/local_python/bin:/home/skoumal/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/go/bin PYTHONPATH=/home/skoumal/local_python/lib/python3.8/site-packages * ''lovelace'':PATH=/home/skoumal/local_python/bin:/cnk/local/ssd/vitovec/lemurizer/target/release:/home/skoumal/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin PYTHONPATH=/home/skoumal/local_python/lib/python3.8/site-packages * Program ''read_json_keys.py'' vypíše metainformace:python ~/.local/bin/totalita/read_json_keys.py < 2024-01-21.json * Program ''read_json.py'' převede ''JSON'' na ''XML'':cd .../Monitora ls *.json | parallel -j100 "json2xml.sh < {} > /cnk/work/skoumal/Frazeologie/Monitora/orig/{.}.xml" === Starý i nový ONLINE ve vertikále === Je uložen pouze v adresáři ''/cnk/common/korpus/vertikaly/online_old'', resp. ''/cnk/common/korpus/vertikaly/monitora''. * Soubory zkopírujeme (pro jistotu) k sobě: ''/cnk/work/skoumal/Frazeologie/Online/zdroj''. * Pro vybírání podkorpusů máme program ''pick-doc-online.pl'':Usage: pick-doc-online.pl type typval [out_dir] types: date pubyear media_type source resource txtype_group txtype genre_group genre medium cnk_crawl_date id * Antisystémové weby vybereme takto:cd .../Online mkdir -p Antisyst/zdroj cd zdroj cat vert_20* | pick-doc-online.pl media_type Antisystémové ../Antisyst/zdroj cd ../Antisyst/zdroj for ff in *; do mv $ff ${ff}.xml; done * Odstraníme slovenské soubory:cd zdroj grep "[ĺľŕ]" *.xml | grep -v "Biľak" | cut -f1 -d ':' | sort -u > ../slovak-letters.txt grep -Pl "^sa\t" *.xml > ../slovak-sa.txt .. sort -u slovak-letters.txt slovak-sa.txt > slovak-files.txt cd zdroj for ff in $(cat ../slovak-files.txt); do echo $ff; rm $ff; done * V některých souborech je ''e-breve'' (**ĕ**) místo ''e-caron'' (**ě**). Opravíme je takto:cd zdroj fgrep -l ĕ * > ../breve.txt .. perl -i -pe 's/\.xml$//' breve.txt for ff in $(cat ../breve.txt); do echo $ff; perl -i -pe 's/ĕ/ě/g' $ff.xml; done * Přepíšeme ''&'' na ''&'':cd zdroj fgrep -l "&" * > ../ampersand.txt for ff in $(cat ../ampersand.txt); do echo $ff; perl -i -pe 's/&/&/g' $ff; done * Vyrobíme ''.xml'' soubory:cd .../Online/Antisyst/zdroj parallel-filter.sh -C "perl -pe 's:^([^\t]+)\t[^\t]+\t[^\t]+$:\1 :g' | perl -pe 's/ \" ([^\"]+) \" / "\1" /g' \ | perl -pe 's: ([,\.\)\;\!\?\:]):\1:g' | perl -pe 's:( \() :\1:g' | perl -pe 's: $:\n:'" -p50 -s . -t ../orig -v * Soubory z ''monitory'' nejdřív zbavíme duplikátů:cd source for ff in *.vrt; do echo $ff; remove-dupl-text.pl ${ff%.vrt} < $ff > ../source-nodupl/${ff%.vrt}nebo paralelně ls *.vrt | parallel -j40 "echo {}; remove-dupl-text.pl {.} < {} > ../source-nodupl/{.}" * Soubory v ''/home/skoumal/PROJEKTY/GACR2426/zdroje/subkorp_online/online_old/source[-nodupl]'' naporcujeme na jednotlivé docy pomocí programu ''splitdoc-xml'':cd .../source for ff in vert_2020-*; do splitdoc-xml ${ff%.vrt} < $ff; donenebo paralelně ls -S | parallel -j40 "splitdoc-xml {} < {}"a hotové soubory přesuneme do ''source-split''. Je-li souborů moc, uděláme několik adresářů a přesouvíme podle ročníku:cd source-nodupl for ff in 2021*.?????; do mv $ff ../source-split-2021/; done for ff in 2022*.?????; do mv $ff ../source-split-2022/; done for ff in 2023*.?????; do mv $ff ../source-split-2023/; done for ff in 2024*.?????; do mv $ff ../source-split-2024/; done for ff in 2025*.?????; do mv $ff ../source-split-2025/; done * Vybereme typ textu (např. Antisyst) a vyrobíme si seznamy:cd .../source-split-2021 ls | xargs grep -l "media_type=\"Antisyst" - > ../2021-Antisyst.txt cd ../source-split-2022 ls | xargs grep -l Antisyst - > ../2022-Antisyst.txt cd ../source-split-2023 ls | xargs grep -l Antisyst - > ../2023-Antisyst.txt cd ../source-split-2024 ls | xargs grep -l Antisyst - > ../2024-Antisyst.txt cd ../source-split-2025 ls | xargs grep -l Antisyst - > ../2025-Antisyst.txt * Přesuneme vybraný typ do zvláštního adresáře a zároveň do hlaviček připíšeme počet tokenů a slov: cd .../monitora mkdir Antisyst cat 2021-Antisyst.txt | parallel -j45 'echo {}; tok=$(grep -c -v "^<" source-split-2021/{}); \ wrd=$(grep -v "^<" source-split-2021/{} | grep -cv -P "\tZ[0:]-------"); \ sed "1s/>$/ word_count=\"$wrd\" token_count=\"$tok\">/" < source-split-2021/{} > Antisyst/{}' cat 2022-Antisyst.txt | parallel -j45 'echo {}; tok=$(grep -c -v "^<" source-split-2022/{}); \ wrd=$(grep -v "^<" source-split-2022/{} | grep -cv -P "\tZ[0:]-------"); \ sed "1s/>$/ word_count=\"$wrd\" token_count=\"$tok\">/" < source-split-2022/{} > Antisyst/{}' cat 2023-Antisyst.txt | parallel -j45 'echo {}; tok=$(grep -c -v "^<" source-split-2023/{}); \ wrd=$(grep -v "^<" source-split-2023/{} | grep -cv -P "\tZ[0:]-------"); \ sed "1s/>$/ word_count=\"$wrd\" token_count=\"$tok\">/" < source-split-2023/{} > Antisyst/{}' cat 2024-Antisyst.txt | parallel -j45 'echo {}; tok=$(grep -c -v "^<" source-split-2024/{}); \ wrd=$(grep -v "^<" source-split-2024/{} | grep -cv -P "\tZ[0:]-------"); \ sed "1s/>$/ word_count=\"$wrd\" token_count=\"$tok\">/" < source-split-2024/{} > Antisyst/{}' cat 2025-Antisyst.txt | parallel -j45 'echo {}; tok=$(grep -c -v "^<" source-split-2025/{}); \ wrd=$(grep -v "^<" source-split-2025/{} | grep -cv -P "\tZ[0:]-------"); \ sed "1s/>$/ word_count=\"$wrd\" token_count=\"$tok\">/" < source-split-2025/{} > Antisyst/{}' * Soubory je třeba ještě přejmenovat a zároveň změnit ''doc.id'' na nový název souboru. Výsledek bude v adresáři ''source-rename''. Dále už pracujeme v něm. * Je třeba vytahat z dokumentů metainformace pro databázi. Metainformace z tagu '''' se načtou a '''' se přepíše tak, že obsahuje jen ''id'' (tohle není úplně nutné - můžou tam zůstat i ostatní metainformace). Tag '''' se přepíše tak, aby se mohl použít, tj. * upraví se ''id'' -- před původní ''id'' docu se předřadí ''online_'' * kromě ''id'' se ponechá ''author'', ''resource'' a ''subject'' * ''subject'' se přejmenuje na ''title'' (pozor na prázdné subjekty) * metainformace se uloží do databáze * Zpracované soubory jsou v adresářích ''xml-PB'' (politický bulvár), ''xml-anti'', ''xml-bulvar'' a ''xml-nazor'' (názorové deníky). * Je třeba odstranit (kde to jde) entitu ''&symbol;'':cd .../xml-anti for ff in *.xml; do perl -pe 's/( &symbol;)+([ ,\.\!\?;\)])/$2/g' $ff \ | perl -pe 's/^&symbol; //' > ~/cnk-work/Frazeologie/Online/Antisyst-slovak/orig-mix/$ff; done * Dále je třeba odpreparovat slovenské texty. K tomu slouží program ''remove-slovak.pl'':cd .../orig-mix ls -S | parallel --compress --tmpdir /store/tmp/ -j40 "echo {}; remove-slovak.pl {} ../orig ../orig-slovak < {}"anebo metoda ŽAVES cd .../Antisyst grep -v "(Biľak|Ľubo)" * | grep "[ľĺŕô]" | cut -f1 -d':' | sort -u > ../slovak.txt for ff in $(cat ../slovak.txt); do rm $ff; done * Z xml-vertikál je zapotřebí udělat klasické ''XML'', ze kterého budeme dělat ''in-utf8'':cd .../orig-vrt cut -f1 zvedavec.org_2022-02-26.xml | tr "\n" " " | perl -pe "s: ::g" | perl -pe "s/ />\n/g" > ../orig/zvedavec.org_2022-02-26.xml * Obojí se dělalo v adresáři ''/home/skoumal/cnk-work/Frazeologie/Online'', je třeba to přesunout zpátky do PROJEKTǓ ===== Anotace ===== * Postupuje se jako obvykle: ''xmltostandoff.py'', ''process_text.sh'' a ''process_kolok.sh'': process_kolok.sh -s vert-kolok -v -p40 * Chceme-li přidat pro porovnání anotaci LEMURem, provedeme [[wiki:user:skoumal:tacr23#anotace_lemurem|lemurizaci]] na výsledné vertikále. Musíme ale utrhnout anotaci kolokací (musíme vytvořit adresář ''vert-kolok-merged''): mkdir -p mwe-in mkdir -p mwe-out parallel-filter.sh -C "cut -f1-6" -s vert-rules0-frazrl-rules-mdita-kolok-sublm-agr/ -t mwe-in/ -p100 -v mwe_tagger -b -i mwe-in -o mwe-out -c -n 100 -t -m /cnk/work/skoumal/LEMUR/model-250321.msgpack cd vert-rules0-frazrl-rules-mdita-kolok-sublm-agr for ff in *; do echo $ff; paste <(cut -f1-6 $ff) <(cut -f7 $ff) <(cut -f8 $ff) <(cut -f7- ../mwe-out/$ff) \ | perl -pe 's/[\t]+$//' > ../vert-kolok/${ff%.txt}.vrt; donenebo paralelně: ls | parallel -j100 "echo {}; paste <(cut -f1-6 {}) <(cut -f7 {}) <(cut -f8 {}) <(cut -f7- ../mwe-out/{}) \ | perl -pe 's/[\t]+$//' > ../vert-kolok/{.}.vrt" * Dále použijeme Vondřičkovy skripty. Musíme si ale připravit vlastní konfigurační soubor: cp -p /usr/local/corp/xml2standoff/ann2standoff.ini .a do něj přidat tyto řádky: [frantalemur] attributes = sword,lemma,sublemma,tag,verbtag,col_lemma,col_type,mwe_lemmaPak můžeme použít skripty: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 /cnk/work/skoumal/LEMUR/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 /cnk/work/skoumal/LEMUR/ann2standoff.ini -p frantalemur -g g $ff; done \ > /cnk/common/korpus/vertikaly/frap-totalita/vertikala * Anotace Frantou se dělá stejně [[wiki:user:skoumal:infra:process_text_run|jako u SYNů]]. * Anotace LEMURem je posána [[wiki:user:skoumal:tacr:lemurizer|na stránce TAČRu]]. ===== Kompilace korpusu ===== * Předpokládáme, že máme anotovaný text a správné hlavičky (s naší sadou metadat). * Je potřeba nachystat data do jednoho adresáře a potom udělat tyto kroky: * Slepit sloupce:cd columns for ff in *.7; do paste ${ff%.7}.1-6 $ff ${ff%.7}.8 ${ff%.7}.9 | perl -pe 's/[\t]+$//' > ../vert-final/${ff%.txt.7}.vrt; done * Slepit sloupce:cd vert-rules0-frazrl-rules-mdita-kolok-sublm-agr for ff in *; do echo $ff; paste ../mwe-in/$ff <(cut -f 7 $ff) <(cut -f 8 $ff) <(cut -f 7- ../mwe-out/$ff) > ../vert-kolok/${ff%.txt}.vrt; donenebo paralelně: ls | parallel -j100 "echo {}; paste ../mwe-in/{} <(cut -f 7 {}) <(cut -f 8 {}) <(cut -f 7- ../mwe-out/{}) > ../vert-kolok/{.}.vrt" * Udělat linky:cd .../vert-kolok for ff in *.vrt; do ln -s ../orig/${ff%.vrt}.txt; done for ff in *.vrt; do ln -s ../orig/${ff%.vrt}.json; done for ff in *.vrt; do ln -s ../orig/${ff%.vrt}.xml; done * Vyrobit ''.ann.json'' z anotace:cd .../vert-kolok parallel-mask.sh -C "ann2standoff -c /cnk/work/skoumal/LEMUR/ann2standoff.ini -p frantalemur -P none" -m ".*\.vrt" -v -p45 -d. * Vyrobit ''.ann.xml'':parallel-mask.sh -C "standoff2xml" -m ".*\.txt$" -v -p45 -d. * Vyrobit vertikálu:mkdir /cnk/common/korpus/vertikaly/frap-synv13-pub (for ff in *.ann.xml; do >&2 echo $ff; xml2vrt -c /cnk/work/skoumal/LEMUR/ann2standoff.ini -p frantalemur -e hi $ff; done \ > /cnk/common/korpus/vertikaly/frap-synv13-pub/vertikala) 2> ../xml2vrt.err ===== Statistiky ===== ==== Četnost kolokačních lemmat ==== Vytvoříme frekvenční seznamy v různých korpusech (viz [[https://jakobson.korpus.cz/dokuwiki/doku.php?id=frape:start|web projektu]]). Seznamy uložíme jako ''CSV'' a vytvoříme čisté (bez uvozovek) ''TSV''. * Seznamy pro porovnání vytvoříme takto: join -e0 -a1 -a2 -t " " <(sort kolokace-Totalita-240509.tsv) -o auto <(sort kolokace-SYN2020-240509.tsv) \ | join -e0 -a1 -a2 -t " " - -o auto <(sort kolokace-Antisyst-240509.tsv) > kolokace-join-240509.tsv * Import do spreadsheetu: * zaškrtnout oddělovač ''TAB'' * vybrat češtinu * záhlaví: Totalita SYN2020 Antisyst col_lemma freq ipm freq ipm freq ipm * oddělit záhlaví v LibreOffice: vybrat první buňku s daty a z menu vybrat ''View'' ---> ''Freeze Rows and Columns'' * sloupce s čísly zformátovat //česky// * buňky s chybějící hodnotou vyplnit **0** (kvůli sortění)