Toto je starší verze dokumentu!
Obsah
Hledání v syntakticky anotovaném korpusu
Korpus SYN2015 byl opatřen syntaktickou anotací, která k morfologické anotaci a lemmatizaci přidává informaci o vztazích mezi slovy ve větě. Syntaktická anotace vychází z Pražského závislostního korpusu, z anotace na tzv. analytické (povrchové) rovině. Anotace je závislostní, to znamená, že každý token (tedy jak slovo, tak interpunkční znaménka aj.) je závislý buď na jiném tokenu v téže větě, nebo na technickém (umělém) „kořenu“ věty v případě, že slovo má v celé větě řídící funkci (obvykle sloveso). Korpus byl označkován automaticky, přičemž chybovost značkování je cca 16%, tj. výrazně vyšší než v případě anotace morfologické. Chybovost je vyšší u méně častých a složitějších konstrukcí, nižší u jednodušších. Pro efektivní vyhledávání v rozsáhlém korpusu bylo nutno anotaci zjednodušit, vyhledávat lze tedy ve směru od závislého tokenu k řídícímu, ne naopak. Syntaktická anotace je podrobněji popsána v samostatném hesle; zde se naučíme, jak se syntaktickou anotací pracovat. Všechny dotazy jsou založené na dotazovacím jazyce CQL.
1. Zobrazování závislostních struktur
Než se ale dostaneme k dotazům na syntaktickou anotaci, podíváme se na to, jak závislostní struktury (tzv. stromy) v KonTextu zobrazovat. Celý korpus SYN2015 je syntakticky označkovaný, u výsledku jakéhokoli dotazu můžeme vždy zobrazit kliknutím na ikonku na levé straně konkordanční řádky, jak ukazuje obrázek:
Po kliknutí se zobrazí syntaktický strom:
V syntaktickém stromě jsou graficky znázorněny závislostní vztahy mezi slovy (závislé a řídící slovo jsou propojeny čarou, závislé slovo je níže než řídící), u každého slova je uvedena jeho syntaktická funkce. Pořadí slov ve větě se zachovává.
2. Vyhledávání na základě syntaktické funkce
Zajímá-li nás syntaktická funkce slova, na které se ptáme, použijeme atribut afun. Úplný výčet syntaktických funkcí (tj. možných hodnot tohoto atributu) najdete ve specializovaném seznamu, zde vyjmenujeme především základní funkce:
- přísudek Pred
- jmenná část verbonominálního přísudku Pnom
- podmět Sb
- předmět Obj
- příslovečné určení Adv
- přívlastek Atr
- doplněk Atv.
Kromě těchto funkcí jsou v korpusu i funkce pomocné pro neplnovýznamová slova a interpunkci, např. pomocné sloveso AuxV, předložka AuxP, podřadicí spojka AuxC. A funkce označující slova (tokeny), které reprezentují slova ve vztahu koordinace Coord (obvykle spojky) a apozice Apos (nejčastěji interpunkce).
Chci-li například najít v korpusu SYN2015 všechna zájmena, která mají syntaktickou funkci „jmenná část verbonominálního predikátu“, zadám následující dotaz:
[afun="Pnom" & pos="P" & case="7"]
tedy hledám slova, která mají zároveň (&)
- syntaktickou funkci Pnom: afun="Pnom"
- slovní druh zájmeno: pos="P"
- a pád instrumentál: case="7"
Případně lze týž dotaz vyjádřit jen s pomocí syntaktické funkce a celé morfologické značky:
[afun="Pnom" & tag="P...7.*"]
. V korpusu SYN2015 takto najdeme cca 12 000 výskytů.
Zadaný dotaz nám však nenajde případy, kdy jsou hledaná slova součástí koordinace. To, že je určité slovo součástí koordinace či apozice, se totiž projevuje na syntaktické funkci, která v takových případech dostává koncovku _Co pro koordinaci, popř. _Ap pro apozici. Koordinovaná slova s funkcí Pnom tak mají přiřazenu funkci Pnom_Co.
Pro vyhledání všech výskytů včetně koordinovaných ve výše uvedeném příkladu bychom museli zadat afun="Pnom.*"
, tedy přidat za hodnotu syntaktické funkce ještě tečku a hvězdičku, abychom umožnili jak vyhledání samotné funkce Pnom, tak funkce Pnom s jakýmkoli pokračováním, celý dotaz by tedy vypadal takto:
[afun="Pnom.*" & pos="N" & case="7"]
.
Rozdíl je ovšem minimální, najdeme jen o 100 výskytů více (a jen malá část z těchto koordinovaných výskytů je označkovaná správně).
3. Vyhledávání na základě pozice řídícího slova
Jestliže chceme znát postavení slova, na které se ptáme, ve vztahu k jeho řídícímu slovu, pak použijeme atribut parent. Tento atribut je číselný, vyjadřuje vzdálenost mezi řídícím slovem a slovem, na které se ptáme. Záporná čísla (např. parent="-2"
) ukazují „dozadu“ v textu, kladná čísla ukazují „dopředu“, tj. řídící slovo následuje po slově, na které se ptáme (před kladným číslem musí být umístěn znak plus, jemuž kvůli vlastnostem regulárních výrazů musí navíc předcházet zpětné lomítko \, například takto: parent="\+2"
). Znak zpětné lomítko "\" uvádíme v tomto kurzu před znakem plus pro označení kladných čísel vždy, protože při zadání dotazu v CQL musí být přítomen, ale ve skutečné hodnotě atributu, kterou si můžeme zobrazit v KonTextu, zpětné lomítko "\" obsaženo není. Řídící slova ve větě závislá přímo na (mimo větu umístěném, technickém) kořenu věty, mají hodnotu atributu 0.
Například v části věty na pobřeží dosud neokupovaném vítěznou Rudou armádou zobrazené na obrázku mají vybraná slova následující hodnoty:
- pobřeží parent="-1" (závisí na těsně předcházející předložce na)
- neokupovaném parent="-2" (závisí na dvě slova doleva stojícím substantivu pobřeží)
- vítěznou parent="\+2" (závisí na dvě slova vpravo stojícím substantivu armádou)
- Rudou parent="\+1" (závisí na těsně vpravo stojícím substantivu armádou)
- armádou parent="-3" (závisí na o tři slova doleva stojícím adjektivu neokupovaném)
Chceme-li tak například najít všechny řadové číslovky závislé na těsně následujícím tokenu, zadáme následující příkaz: [parent="\+1" & tag="Cr.+"]
. Pro vyhledání řadových číslovek závislých na jakémkoli následujícím tokenu (tedy v libovolné vzdálenosti), použijeme dotaz o trochu složitější: [parent="\+[0-9]+" & tag="Cr.+"]
. Hledáme totiž slova, která zároveň splňují tyto podmínky (&):
- morfologická značka začíná na písmena C (číslovka) a r (řadová), následují libovolné znaky:
tag="Cr.+"
- atribut parent začíná znakem plus \+, následuje libovolný počet čísel 0 až 9 (minimálně jedno):
parent="\+[0-9]+"
4. Vyhledávání na základě vlastností řídícího slova
Ke každému slovu v korpusu je kromě atributů afun a parent přiřazeno dalších pět atributů, které zpřístupňují vlastnosti řídícího slova. Je-li však slovo ve větě řídící, tedy závislé na externím, technickém kořenu věty (parent="0"), jsou hodnoty těchto pěti atributů prázdné. Všechny tyto atributy mají společný „prefix“ p_ (parent's), jinak mají stejné názvy a stejné potenciální hodnoty jako atributy bez tohoto prefixu:
- p_lemma: lemma řídícího slova
- p_afun: syntaktická funkce řídícího slova
- p_tag: morfologická značka řídícího slova
- p_pos: slovní druh řídícího slova
- p_case: pád řídícího slova
Můžeme tak vyhledávat slova zároveň podle jejich vlastností a vlastností jejich řídícího slova. Chceme-li například najít případy, kdy substantivum v genitivu závisí jako (kvantifikovaný) přívlastek na základní číslovce v nominativu či akuzativu (např. pět lidí), přičemž ale číslovka následuje až za kvantifikovaným substantivem (např. vln osm), musíme opět vyhledat slova, která splňují několik podmínek zároveň (&):
- slovní druh podstatné jméno: pos="N"
- pád genitiv: case="2"
- syntaktickou funkci Atr: afun="Atr"
- řídící slovo v pozici vpravo, dejme tomu ve vzdálenosti 1 až 4:
parent="\+[1-4]"
- řídící slovo je číslovka základní Cn v nominativu či akuzativu [14]:
p_tag="Cn..[14].+"
Dotaz v CQL bude vypadat tak, jak je naznačeno ve screenshotu, a vyhledá struktury, jako je třeba ta následující.
Mezi vyhledanými příklady je mnoho správně označkovaných, nemalá část (20, možná 25 %) jsou však chyby značkování. Je to také proto, že tento typ struktury je o něco méně častý a poněkud složitější, proto u něj automatické syntaktické značkování více chybuje.
5. Skutečný rodič
Jistě jste si všimli, že se funkční slova, např. předložky a spojky, zapojují do závislostní struktury, často jsou řídícími slovy plnovýznamových slov jako substantiv či sloves. Někdy nám to vyhledávání usnadní, jindy, třeba pro hledání vztahů mezi plnovýznamovými slovy, je to komplikace. Proto je všem plnovýznamovým slovům (tedy substantivům, adjektivům, zájmenům, číslovkám, slovesům a příslovcím) přiřazen ještě jeden atribut: „skutečný rodič“. Tento atribut odkazuje na nejbližší plnovýznamové slovo nadřazené slovu, na které se ptáme.
Například ve větě troufnou si i na ještěry nebo hady, zobrazené na obrázku je „skutečným“ rodičem slov ještěry a hady sloveso troufnou. Pro číselné vyjádření pozice „skutečného rodiče“ je zaveden atribut eparent, jeho rozsah hodnot je stejný jako u atributu parent, tj. záporná čísla pro slova, jejichž nejbližší plnovýznamové řídící slovo se nachází vlevo od něj, kladná čísla (psaná s \+) pro slova, jejichž plnovýznamové řídící slovo je vpravo, 0 pro ta, která (přímo či přes předložky a/nebo spojky) závisí na externím, umělém kořenu věty.
Ostatní slovní druhy (předložky, spojky, částice, citoslovce) a interpunkce mají atribut eparent prázdný.
Chceme-li tedy najít například všechny substantivní předměty závislé na následujícím slově bez ohledu na koordinaci nebo předložky, tedy včetně třeba slova peníze ve spojení O peníze jde až v první řadě, jehož vlastní řídící token (parent) je předložka vlevo, vyhledáme slova, která splňují následující podmínky zároveň:
- slovní druh substantivum:
pos="N"
- syntaktická funkce předmět (vč. koordinace):
afun="Obj.*"
nebo přesnějiafun="Obj((_Co)|(_Ap))?"
- „skutečný rodič“ vpravo, tedy kladný:
eparent="\+[0-9]+"
Takto bude vypadat celý dotaz: [pos="N" & afun="Obj((_Co)|(_Ap))?" & eparent="\+[0-9]+"]
.
Vícenásobné hodnoty
V jednom typu struktur mohou být hodnoty parametru eparent složitější, konkrétně obsahovat více hodnot vedle sebe (multihodnoty). Je to v případech, kdy určitý token rozvíjí jiné větné členy ve vztahu koordinace, např. přívlastek základních ve spojení Listina základních práv a svobod, jak ukazuje následující obrázek:
V této větě má (podle výše uvedené definice) přívlastek základních dva „skutečné rodiče“: substantiva práv a svobod, hodnota atributu eparent je tedy +1|+3 (tj. +1 nebo +3).
Zadáme-li například dotaz na slova s podmínkou eparent="\+1", najdeme jak případy, kdy má eparent pouze hodnotu +1, tak všechny další případy, kdy alespoň jeden ze „skutečných rodičů“ má hodnotu +1, tedy třeba výše uvedenou dvojí hodnotu eparent +1|+3 nebo vícenásobnou hodnotu eparent +1|+3|+5|+7.
Pokud chceme vyhledat slova, která mají vícenásobnou hodnotu atributu eparent, musí se v dotazu objevit znaky zpětné lomítko a svislice "\|". Svislice proto, že vícenásobná hodnota tento znak obsahuje, zpětné lomítko proto, aby se vyhledal skutečně znak "|", a nepoužil se způsobem obvyklým v regulárním výrazu, tj. jako alternativa mezi dvěma možnostmi. Dotaz pak bude vypadat třeba takto:
Obecný dotaz, který vyhledá všechna slova s multihodnotou atributu eparent, může být formulován takto: [eparent=".+\|.+"]
.
Rozdíl mezi dotazem [eparent="((\+1)|(\+3))"]
(bez zpětného lomítka před svislicí) a dotazem [eparent="((\+1)\|(\+3))"]
(se zpětným lomítkem před svislicí) je v tom, že první dotaz vyhledá všechny případy, kdy má eparent hodnotu +1 nebo +3, včetně vícenásobných hodnot, kdežto druhý dotaz vyhledá jen ty případy, kdy má eparent právě dvojí hodnotu +1 a +3.
Vícenásobné hodnoty „skutečného rodiče“ mohou ukazovat na složitější syntaktické struktury, u těch je však chybovost automatické syntaktické analýzy vyšší: výsledky je tedy nutné manuálně ověřovat.
6. Vyhledání podle vlastností skutečného rodiče
Vyhledávání podle pozice „skutečného rodiče“ vám možná připadá jako zbytečně složité a obtížně využitelné. Naproti tomu vlastnosti „skutečného rodiče“ využijeme při výzkumu české skladby mnohem snáze.
Podobně jako vlastnosti přímo nadřazeného tokenu (např. p_lemma) odkazují vlastnosti „skutečného rodiče“ od závislého slova k lemmatu, syntaktické funkci, morfologické značce, slovnímu druhu a pádu plnovýznamového řídícího slova. Jediný rozdíl je v tom, že tento atribut se týká jen vybraných slovních druhů (N, A, P, C, V, D) jak na straně závislého slova, tak na straně slova řídícího. Funkční slova jako předložky a spojky, které se ve struktuře (formálně) nacházejí na cestě mezi závislým a řídícím plnovýznamovým slovem, tento atribut ignoruje.
Atributů, které zpřístupňují vlastnosti nejbližšího plnovýznamového řídícího slova, je pět. Mají „prefix“ ep_, jinak jsou názvy atributů stejné (lemma, afun, tag, pos, case):
- ep_lemma: lemma nejbližšího řídícího plnovýznamového slova
- ep_afun: syntaktická funkce nejbližšího řídícího plnovýznamového slova
- ep_tag: morfologická značka nejbližšího řídícího plnovýznamového slova
- ep_pos: slovní druh nejbližšího řídícího plnovýznamového slova
- ep_case: pád nejbližšího řídícího plnovýznamového slova
U funkčních slov a interpunkce mají tyto atributy prázdné hodnoty. Prázdné hodnoty najdeme i v případě, že dané slovo nemá žádné plnovýznamové řídící slovo (dané slovo je přímo či přes předložky a spojky závislé na externím, umělém kořenu věty). Rozlišení mezi funkčními a plnovýznamovými slovy vyplývá přímo ze slovního druhu, tj. i např. pomocná slovesa nebo reflexiva se, si se považují pro tyto účely za plnovýznamová slova.
Například ve výše uvedené větě troufnou si i na ještěry nebo hady má slovo hady ep_lemma troufnou; slova i, na a nebo mají atribut ep_lemma prázdný. Slova, která ve struktuře „zůstávají“ a u nichž jsou zobrazeny hodnoty výše uvedených atributů, jsou na obrázku zvýrazněné, naopak funkční slova (která nemohou být „skutečným rodičem“ a atributy mají prázdné) jsou šedá.
Chceme-li tak najít všechna adjektiva závislá na slovese, a to bez ohledu na spojky či předložky, které mohou (formálně) stát v závislostní struktuře mezi závislým a řídícím slovem, použijeme CQL dotaz, který vyžaduje splnění těchto podmínek zároveň: [pos="A" & ep_pos="V"]
7. Vyhledávání slov řízených předložkou
U slovních druhů, které lze skloňovat (tj. u substantiv, adjektiv, zájmen a číslovek) se při analýze vztahů ve větě může hodit ještě jedna informace, která úzce souvisí s atributy parent a eparent, ale není s nimi totožná: informace o tom, zda je tvar daného slova přímo řízen předložkou, a pokud ano, tak kterou. Tuto informaci můžeme leckdy zjistit přes atribut parent a jeho vlastnosti (zvl. p_pos), ovšem jen tehdy, je-li dané slovo přímo závislé na předložce. Například ve výše uvedeném příkladu troufnou si i na ještěry nebo hady není vztah mezi slovy ještěry a hady (zeleně zvýrazněno v obrázku) a předložkou na (oranžově zvýrazněna) nijak vyjádřen dosud probranými atributy (tj. ani vlastnostmi přímého řídícího tokenu, ani vlastnostmi „skutečného rodiče“). Přitom je tato vlastnost určitého slova pro výzkum české skladby velmi důležitá.
Byl proto zaveden atribut prep, který obsahuje základní tvar (lemma) předložky, která přímo určuje tvar daného slova, tj. v závislostním stromu je určité slovo závislé buď přímo na předložce, nebo přes spojku na předložce. V případech, kdy je tvar slova určen shodou s řídícím slovem, např. u shodných přívlastků rozvíjejících substantivum v předložkovém pádě (případy jako v minulém roce, s městem Prahou), atribut prep bude prázdný. Dále je atribut prep prázdný, když dané slovo není (přímo či přes spojku) závislé na předložce a když dané slovo nepatří mezi sklonné slovní druhy.
S pomocí atributu prep tak můžeme vyhledat například všechny substantivní přívlastky v bezpředložkovém instrumentálu závislé na (jiném) substantivu. Musíme vyhledat slova, která splňují následující podmínky zároveň:
- slovní druh podstatné jméno:
pos="N"
- pád instrumentál:
case="7"
- prostý, nepředložkový pád:
prep=""
- závislé (přímo či přes spojku) na substantivu:
ep_pos="N"
Kdybychom chtěli vyloučit shodné přívlastky (panem Novákem, městem Prahou), museli bychom ještě vyloučit případy, kdy se řídící a závislé substantivum shodují v pádě. Ztratili bychom tím však i část jiných výskytů. Stačí vyloučit instrumentál u „skutečného rodiče“ pomocí ep_case!="7"
.
Vyhledáme tak 72 000 výskytů přívlastků, nejčastěji závislých na slovech cesta, jízda, společnost, zásobování nebo rána.
8. Využití syntaktických atributů ve statistikách
Syntaktické atributy můžeme využívat i jinými způsoby než pro vyhledávání přes dotazy CQL, například v negativních i pozitivních filtrech na zadané dotazy nebo při zjišťování frekvenčních distribucí. Zde si ukážeme, jak na základě frekvencí některých atributů analyzovat syntaktické vlastnosti určitého slova.
Můžeme třeba chtít zjistit, jaké typy neshodných substantivních přívlastků (z hlediska syntaktické struktury) rozvíjejí substantivum zájem. Nejprve tedy vyhledáme všechny substantivní přívlastky rozvíjející toto slovo (přímo či přes předložku) následujícím příkazem: [pos="N" & afun="Atr.*" & ep_lemma="zájem"]
.
Připomínáme, že při vyhledávání s využitím syntaktických atributů je třeba postupovat od závislých slov k řídícím, opačně to není možné, proto hledáme všechna substantiva s funkcí přívlastku závislá na (nejbližším plnovýznamovém) slově zájem. Po vyhledání a zobrazení konkordance v korpusu si vytvoříme frekvenční distribuci (Frekvence → Vlastní). Na úrovni 1. zvolíme atribut prep, prokliknutím modrého tlačítka plus vlevo dole přidáme úroveň a na úrovni 2. zvolíme atribut case. Pozici a (Node) začít od necháme beze změny.
Získáme tak frekvenční distribuci typů syntaktických prostředků, jimiž se projevuje závislost substantivních přívlastků na slově zájem:
Kliknutím na písmeno p ve spojení p/n (pod hlavičkou Filtr) aktivujeme pozitivní filtr s obsahem daného řádku na již vyhledanou konkordanci, díky čemuž lze rychle ověřit, nakolik je v daném případě syntaktická anotace správná. Uvidíme tak, že prostý nominativ a akuzativ jsou vesměs chybně interpretované jako přívlastky (popř. chybně morfologicky značkované), stejně tak třeba přívlastky s předložkou s a instrumentálem nebo s předložkou o a lokálem (chyba v určení pádu). Jinak je ale vrchní část tabulky zřejmě v pořádku, frekvence spojení „zájem o + akuzativ“ převyšuje frekvenci „zájem + genitiv“, s větším odstupem následují „zájem na + lokál“, „zájem v + lokál“ a „zájem z + genitiv“. Z frekvenční distribuce je rychlý přístup k jednotlivým typům struktur.
Zadané dotazy a následné frekvenční distribuce mohou být výrazně cílenější i mnohem obecnější, záleží na cíli, kterého chceme dosáhnout. Syntaktické atributy nabízejí mnoho možností, jak z anotovaného textu získávat informace o syntaktických strukturách, možnosti však nejsou neomezené, například není snadné získat zobecněné informace o celých větných strukturách, popř. o více slovech závislých na jednom a též slově… A vždy je třeba pamatovat na nutnost odstranit z výsledků chyby, které tam automatická syntaktická analýza vnáší.
— Tomáš Jelínek