Wiki spuštěna 24. 7. 2025

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 Adminer (krátký 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 <doc> a nejméně jeden tag <text>. 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 <doc>. 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 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:

<doc id="nazev_souboru">
<p>text...</p>
...
</doc>

anebo

<doc id="nazev_souboru">
<text id="nazev_souboru.identifikator" author="Author" title="Title">
<p>text...</p>
</text>
<text id=...>
...
</text>
</doc>

Tag <doc> 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:

Click to display ⇲

Click to hide ⇱

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 <opus, který je v souboru opus.xml.
  • 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 <opus s metainformacemi
  • 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 <text>, 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 .

nebo

cd 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 <doc> a tag <text> 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 > id

Je 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.resource

a 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.meta

Opravený 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 (<?xml version="1.0" encoding="UTF-8"?>) a opravit řádek <doc ... a případně <text .... Musíme roztřídit soubory na ty, které mají tag <text> 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 '<?xml' $ff | perl -pe "s/>(<text)/>\n\1/g" | perl -pe 's/><head/>\n<head/g' | perl -pe 's/><p/>\n<p/g' \
    | perl -pe "s/^[ ]+</</" | perl -pe "s/<doc .*>/<doc id=\"$gg\">/" > ../quasi-xml/$gg; done
  • Oprava tagů <text>:
    • 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.

Click to display ⇲

Click to hide ⇱

  • 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 &amp; na &:
    cd zdroj
    fgrep -l "&amp;" * > ../ampersand.txt
    for ff in $(cat ../ampersand.txt); do echo $ff; perl -i -pe 's/&amp;/&/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: </s>$:\n</s>:'" -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; done

    nebo 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 <doc> se načtou a <doc> se přepíše tak, že obsahuje jen id (tohle není úplně nutné - můžou tam zůstat i ostatní metainformace). Tag <text> 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/> ::g" | perl -pe "s/ </\n</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 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; done

    nebo 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_lemma

    Pak 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

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:

Click to display ⇲

Click to hide ⇱

  • 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; done

    nebo 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 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í)

QR Code
QR Code wiki:user:skoumal:gacr24 (generated for current page)