Table of Contents

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:

Co není k dispozici v XML, může být dostupné ve vertikále v adresáři /cnk/common/korpus/vertikaly:

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:

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:

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:

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ášť:

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.

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

Anotace

Kompilace korpusu

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

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.