Lingvistické nástroje a data na ÚFALu

Tato stránka vznikla jako doprovodný web k semináři o lingvistických nástrojích pro studenty bohemistiky na Univerzitě Palackého v Olomouci. Zabývá se především daty a nástroji poskytovanými ÚFALem, ale nejenom jimi. Občas upozorňuje i na související software vzniklý buď zcela na jiném pracovišti, nebo jako výsledek společného projektu ÚFALu s dalšími ústavy.

Související prezentaci si můžete stáhnout ve formátu pro Libre Office nebo v PDF.

Morfologická analýza a syntéza

Úplně nejdříve se podíváme na nástroje, které obsahují český slovník a jsou schopné pro daný slovní tvar vrátit odpovídající základní tvar (lemma) a morfologickou značku (zakódované informace o slovním druhu a morfologických kategoriích). Morfologické značky budeme při další práci potkávat prakticky pořád, přitom sada značek, která se používá na ÚFALu, se liší od sady analyzátoru Ajka používaného v Brně. Proto se musíme s pražskou sadou seznámit a zejména si ukázat, kde na webu najdeme další informace.

Hajičův morfologický analyzátor (webové rozhraní) …
http://ufal-point.mff.cuni.cz/services/morph/
(pozor, zpracování textu bez diakritiky zřejmě nefunguje)

Morfo (David Kolovratník) …
http://ufal.mff.cuni.cz/morfo/,
webové rozhraní …
http://quest.ms.mff.cuni.cz/cgi-bin/zeman/morfo/index.pl

Brněnský morfologický analyzátor Ajka (webové rozhraní) …
http://nlp.fi.muni.cz/projekty/ajka/ajkacz.htm
a jeho novější verze Majka (ta už je k dispozici i volně ke stažení) …
http://nlp.fi.muni.cz/ma/

Interset (webové rozhraní) …
http://quest.ms.mff.cuni.cz/cgi-bin/interset/index.pl?tagset=cs::pdt
Vysvětlivky k hodnotám rysů v Intersetu …
https://wiki.ufal.ms.mff.cuni.cz/user:zeman:interset:features

Manuál pro morfologickou anotaci korpusu PDT 2.0 (obsahuje dokumentaci k pražským morfologickým značkám a k doplňkovým značkám v lemmatech) … http://ufal.mff.cuni.cz/~zeman/publikace/2005-01/mmanual.pdf

Stručnější dokumentace pražských značek …
http://ufal.mff.cuni.cz/pdt/Morphology_and_Tagging/Doc/hmptagqr.html

Rozpoznávání pojmenovaných entit
http://lindat.mff.cuni.cz/services/nametag/

Pokusy s morfologickou analýzou

Morfologické analyzátory (MA) mají pro homonyma vrátit všechny interpretace. Naopak od taggerů (značkovačů) se očekává, že vyberou nejpravděpodobnější interpretaci s ohledem na kontext. Nezřídka vám MA dodá i taková čtení, která by vás napoprvé vůbec nenapadla. Některé zajímavé příklady nejednoznačných slov a frází následují.

Jen

Dobrý den.

Ženu holí stroj.

Mám hnát domů.

Pánové, nežeňte se.

zaječí matka

Otec i matka onemocněli, ale syn je stále ještě zdraví.

Lež, má krátké nohy.

Jedli nahoře bez holí.

A tahle kráva se jmenuje jak?

Baví se dva králové: „Můj šašek polyká meče!“ — „No, ten můj polyká mlaskaje.“

A když budete mít štěstí, český analyzátor vám rozebere i anglickou větu:

I do not stop past a pole.

Pokusy s morfologickým generátorem

žena

stát

jak

přijít

obhospodařovávatelný

o

Treebanky

Treebank, čili „stromová banka“ je korpus, ve kterém jsou anotovány nejen vlastnosti jednotlivých slov (morfologie), ale také vztahy mezi slovy (syntax). Struktuře, která větnou stavbu zachycuje, říkáme strom. Skládá se z uzlů (též vrcholů) propojených hranami. Hrany si lze představit jako šipky vedoucí shora dolů od uzlů ve vyšších patrech k uzlům v nižších patrech. Jde o hierarchickou strukturu, ve které má každý uzel právě jednoho rodiče, ale libovolný počet dětí. Jediný uzel, který nemá rodiče, se nachází na vrcholu této struktury a říká se mu kořen. Na rozdíl od živých stromů se tedy náš strom kreslí vzhůru nohama, kořen je nahoře a větve směřují dolů.

Dva nejčastější druhy stromů, které se používají ve formální lingvistice, jsou

  • frázový strom

  • závislostní strom

V závislostním stromu většina uzlů odpovídá slovům ve větě. Ve frázovém stromu je znázorněno, jak se slova skládají do frází a ty do ještě větších frází, přičemž uzly reprezentují slova nebo fráze. Prakticky všechny treebanky z ÚFALu se skládají ze závislostních stromů.

PDT – Prague Dependency Treebank / Pražský závislostní korpus 2.5
1,25 mil. slov tisku z počátku 90. let (Lidové noviny, Mladá fronta Dnes, Českomoravský profit, Vesmír). Volně dostupné ke stažení, k prohlížení nebo k prohledávání on-line.

http://ufal.mff.cuni.cz/pdt2.5/ Browse.

ČAK – Český akademický korpus. Jeden z nejstarších českých korpusů (1971 – 1985) z ÚJČ AV ČR, nyní upraven do podobného tvaru jako PDT.
http://ufal.mff.cuni.cz/rest/CAC/cac_20.html

PCEDT – Prague Czech-English Dependency Treebank / Pražský česko-anglický závislostní korpus 2.0
Základem je kolem 1 mil. slov z Wall Street Journalu, původně anotovaných frázovými stromy ve slavném Penn Treebanku. Tyto texty byly přeloženy do češtiny, zarovnány s anglickým originálem po slovech a obě strany anotovány pražskými závislostními stromy. Česká část je volně dostupná ke stažení nebo k prohlížení on-line. Pro anglickou část je nutné získat licenci LDC (kvůli licenci na původní Penn Treebank).

http://ufal.mff.cuni.cz/pcedt2.0/ Data.

PEDT – Prague English Dependency Treebank. I tady jsou podkladem texty z Wall Street Journalu.
http://ufal.mff.cuni.cz/pedt2.0/ Data.

PDiT – Prague Discourse Treebank.
http://ufal.mff.cuni.cz/pdit/

PADT – Prague Arabic Dependency Treebank. Zatím byla zveřejněna verze 1, ale verze 2 by se měla objevit do roka.
http://ufal.mff.cuni.cz/padt/

PDTSC – Prague DaTabase of Spoken Czech (Pražská databáze mluvené češtiny).
http://ufal.mff.cuni.cz/pdtsc1.0/

PDTSE – Prague DaTabase of Spoken English (Pražská databáze mluvené angličtiny).
http://ufal.mff.cuni.cz/pdtse1.0/

Tred

Tred (http://ufal.mff.cuni.cz/tred/) je zkratka za tree editor. Hodí se pro různé operace s treebanky, od prohlížení přes ruční anotace až po rozsáhlé poloautomatické změny pomocí maker. Na ÚFALu jde o jeden z nejvýznamnějších nástrojů, kterým prošla většina našich dat. Je k dispozici pro platformy, pro které je k dispozici jazyk Perl, tedy mj. Windows, Linux i Mac. K Tredu je k dispozici řada rozšíření se specifickými makry nebo styly pro zobrazování konkrétních korpusů.

Abyste mohli v laboratoři nainstalovat Tred do standardního umístění ve složce Program Files, vedoucí semináře vás přihlásí na účet správce. Na výše uvedené adrese najděte část „Download“ a v ní „Windows“. Stáhněte první instalační program, nazvaný tred-installer-perl-included.exe. Uložte ho např. na plochu, pak ho spusťte. Protože na počítači pravděpodobně dosud nebyl nainstalován ani jazyk Perl, spustí se nejdříve instalace Strawberry Perlu. Až skončí, budete pokračovat v instalaci samotného Tredu (jiné instalační okno). Pokud vše proběhne úspěšně, objeví se na ploše ikonka, kterou můžete Tred spustit.

Při prvním spuštění Tredu budete pravděpodobně upozorněni, že máte zkontrolovat seznam nainstalovaných rozšíření. Pokud ne, vyvolejte správu rozšíření ručně v nabídce Setup / Manage Extensions… Abyste mohli otevřít některé typy souborů z treebanků, musíte mít nainstalována i příslušná rozšíření Tredu. Napoprvé budete mít seznam rozšíření prázdný, takže stiskněte tlačítko „Get New Extensions“. Ze serveru se stáhne seznam dostupných rozšíření, vy zaškrtnete políčko „Install“ u vybraných položek a nakonec stisknete tlačítko „Install Selected“. Doporučuji vám níže uvedená rozšíření; to první (PDT 2.5) je nutné.

  • Prague Dependency Treebank 2.5
  • EasyTreex – browse and edit Treex files (*.treex, *.treex.gz, *.streex)
  • PML Tree Query Interface for TrEd
  • Prague Dependency Treebank 2.0 Annotation
  • Prague Dependency Treebank 2.0 Sample Data

Nakonec si stáhněte balíček ukázkových souborů se stromečky, které jsem vám připravil. Je to zazipovaný archiv. Vybalte z něj složku „Data pro Tred“, třeba někam na plochu. Potom v Tredu vyberte z nabídky File / Open… a zkuste otevřít např. soubor „Data pro Tred/PDT 2.5 t-rovina/cmpr9410_001.a.gz“. Měl by se vám zobrazit strom věty (spíše nadpisu) „Celní unie v ohrožení“.

Data pro Tred (12 MB)

Pokusy s webovým „Bonitem“ (Sketch Engine v Brně)

Příklad: Zkoumáme použití české předložky „mimo“.

  1. Nasměrujte prohlížeč na http://corpora.fi.muni.cz/clarin/r.cgi/first_form.

  2. Vyberte korpus „CoNLL 2009 Shared Task – Czech Data (train)“.

  3. Do pole „Jednoduchý dotaz“ vyplňte slovo „mimo“ (bez uvozovek) a stiskněte tlačítko „Vytvořit konkordanci“.

  4. Zobrazí se prvních 20 výskytů slova „mimo“ v daném korpusu. Pro každý výskyt se zobrazí kontext několika okolních slov, resp. tokenů (tedy i interpunkčních symbolů, čísel apod.) Pokud kliknete na červeně zvýrazněné slovo „mimo“, zobrazí se v samostatném rámečku mnohem širší kontext. Nahoře vidíme informaci, že celkem bylo nalezeno 148 výskytů tohoto slova.

  5. Vypadá to, že většina výskytů tohoto slova je ve spojení „mimo jiné“. Pojďme se tedy podívat, kolik je takových výskytů. V nabídce vlevo klikněte na „Filtr“.

  6. V následujícím formuláři vyplňte filtr = „pozitivní“, vybraný token = „první“, rozsah hledání = „od 1 do 1“, nezahrnout KWIC (to znamená „key word in context“, tedy „klíčové slovo v kontextu“, v našem případě ono slovo „mimo“), jednoduchý dotaz = „jiné“. Stiskněte tlačítko „Filtrovat konkordanci“.

  7. Nyní se zobrazí pouze výskyty fráze „mimo jiné“ a nahoře se dozvíme, že je jich 75. Pojďme se podívat na ostatní výskyty a zkontrolovat jejich počet. Tlačítkem Zpět webového prohlížeče se vraťte na filtrovací formulář.

  8. Změňte typ filtru z pozitivního na negativní a znova klikněte na „Filtrovat konkordanci“.

  9. Objeví se prvních 20 výsledků a informace, že celkový počet výsledků je 73. Součet tedy sedí, celkem máme 148 výskytů slova „mimo“.

  10. Nyní zkusíme využít anotace, které jsou v tomto korpusu k dispozici. Nejdříve se na ně podíváme. V nabídce vlevo klikněte na Možnosti zobrazení“.

  11. V zaškrtávátkách atributů vyberte „word“ a „feat“, dále vyberte „zobrazit atributy pro každý token“. Velikost KWIC kontextu zvyšte třeba na 80 znaků (optimální hodnota závisí i na velikosti vaší obrazovky). Stiskněte tlačítko „Změnit možnosti zobrazení“.

  12. U každého slova nyní vidíme jeho lemma a zakódovaný slovní druh a morfologické kategorie. U samotné předložky „mimo“ můžeme pozorovat dvě různé anotace. Jedna končí na „Cas=2“, druhá, častější, na „Cas=4“. Tyto značky říkají, zda se v dané větě předložka pojí s genitivem, nebo s akuzativem. Zkusíme zjistit, v kolika případech se pojí s genitivem. V menu vlevo opět klikněte na „Filtr“.

  13. Ve filtrovacím formuláři je sice vyplněn váš předchozí dotaz „jiné“, ale tím se nenechte zmást. Budete dále vybírat už jen z výsledků, které prošly předchozími filtry, tj. nejde o frázi „mimo jiné“. Klikněte na „Typy dotazů“ a vyberte „CQL“ (to je zkratka za Corpus Query Language). Do políčka CQL vyplňte:
    [feat="Cas=2"]
    Odkazujete tím na atribut jménem „feat“ (features, tedy „rysy“), který je v tomto korpusu ručně vyplněn u každého slova a který jste si v předchozích krocích nechali zobrazit. Tento konkrétní atribut je zvláštní tím, že jeho hodnotou je vlastně jakýsi seznam podatributů a jejich hodnot; nás zajímá podatribut „Cas“ (case, tedy pád). Tím feat="Cas=2" ve skutečnosti nevyžadujeme, aby v atributu „feat“ bylo pouze ono přiřazení pádu a nic jiného. Rovnítko je poněkud zavádějící operátor. Ve skutečnosti totiž znamená, že hodnota „feat“ má obsahovat řetězec „Cas=2“, ale může v ní být i něco dalšího.

  14. Musíme ještě říct, u kterého ze slov v daném kontextu nás pád zajímá. Nastavíme tedy rozsah hledání od 0 do 0, zahrnout KWIC. Klikneme na „Filtrovat konkordanci“ a měli bychom se dozvědět, že pouze 5 výskytů předložky „mimo“ v tomto korpusu se pojí se 2. pádem.

  15. Vraťte se nyní na filtr (tlačítkem Zpět v prohlížeči), opět klikněte na „Typy dotazů“ a „CQL“ a nahraďte druhý pád čtvrtým. Měli byste dostat 67 výskytů. 67 + 5 je 72, původní počet byl ale 73 výskytů.

Cvičení 1: vytvořte filtr, kterým rychle zjistíte, co je zač onen chybějící výskyt a proč se neobjevil ani v jednom z obou výstupů.

Cvičení 2: opusťte nyní předložku „mimo“ (v nabídce vlevo nahoře klikněte na „Konkordance“) a navrhněte nový dotaz, kterým najdete všechny předložky z daného korpusu, které se pojí s genitivem. Tipy: Samotný dotaz stačit nebude, protože neposkytuje potřebné omezující volby, budete následně potřebovat i filtr. Váš popis řetězce znaků, který hledáte v atributu „feat“, je ve skutečnosti tzv. regulární výraz, ve kterém některé znaky mají zvláštní význam. Jedním z nich je svislítko. Pokud chcete, aby výsledek obsahoval svislítko, musíte jeho zvláštní význam potlačit tím, že před něj přidáte zpětné lomítko: „\|“. Až se zobrazí výsledek, můžete v nabídce vlevo kliknout na Třídění / Node.

PML-TQ

PML je datový formát, který používáme pro naše treebanky. Je to zkratka za „Prague Markup Language“. TQ je zkratka za „Tree Query“.

Nasměrujte webový prohlížeč na https://ufal-point.mff.cuni.cz/services/pmltq/. V samostatném okně si rovnou můžete otevřít stránky s dokumentací: http://ufal.mff.cuni.cz/pmltq/doc/pmltq_doc.html. Pozor! Prohlížeč by neměl být Microsoft Internet Explorer, protože jeho starším verzím chybí vestavěná podpora pro vektorovou grafiku ve formátu SVG! (Ale verzi 11 jsem otestoval a zdá se, že funguje.)

V nabídce korpusů uvidíte Prague Dependency Treebank 2.5. Klikněte u něj na tlačítko „Select“.

Zahřívací kolo: předložky s genitivem

Do okénka pro dotazy napište svůj první dotaz: a-node [ m/form='mimo' ]

Pod okénkem stiskněte tlačítko „Query“.

Po vyhodnocení se dole zobrazí první věta, ve které bylo nalezeno slovo „mimo“, a pod ní odpovídající strom (za předpokladu, že váš prohlížeč podporuje grafiku SVG). Strom si můžete myší posouvat podle potřeby a kolečkem myši zvětšovat nebo zmenšovat. Když ve větě kliknete na zvýrazněné slovo „mimo“, zvýrazní se vám toto slovo i ve stromě. U každého uzlu stromu vidíte slovní tvar a tzv. analytickou funkci (povrchově syntaktickou značku). Když najedete myší na některý uzel, zobrazí se vám navíc také lemma a morfologická značka tohoto uzlu. Navigace v pravém rohu vás upozorňuje, že v korpusu bylo nalezeno celkem 100 stromů odpovídajících vašemu dotazu. Ve skutečnosti jich tam může být víc, ale PML-TQ se ve výchozím nastavení kvůli efektivitě výpočtu omezuje na prvních 100. Pokud chceme znát skutečný počet výsledků, můžeme na konec dotazu přidat agregační funkci count:

a-node [ m/form='mimo' ]
>> count()

Výsledkem tentokrát nebudou stromy, ale malá tabulka s jediným číselným údajem, který nám řekne, že korpus obsahuje celkem 255 výsledků pro náš dotaz.

Nyní zkusíme naše hledání dále omezit na výskyty, kde je slovo „mimo“ předložkou, která se pojí s genitivem. Upravte dotaz takto: a-node [ m/form='mimo', m/tag~'RR--2' ]. Všimněte si, že u atributu m/tag jsme použili jiný operátor, místo rovnítka vlnovku. Na rozdíl od dotazovacího jazyka CQL ve Sketch Engine, tady rovnítko znamená skutečnou rovnost dvou řetězců. Pokud chceme říct, že značka má daný řetězec obsahovat, ale nemusí se mu rovnat, pak použijeme vlnovku, která zapne porovnávání regulárních výrazů. Tentokrát jsme dostali jen 7 výsledků.

Nyní nás bude zajímat, s jakými všemi značkami se slovo „mimo“ vyskytlo. Funkce pro výrobu tabulky bude malinko složitější. Do první části dotazu, kde se popisuje, co hledáme, přidáme kód, který je dole zvýrazněn červeně: „$n := “. Vytváříme tím jakousi nálepku, název $n, kterým se při procházení výsledku vždy můžeme odkázat na uzel, který v daném stromě odpovídá slovu „mimo“. Dole v konstrukci tabulky je pak vidět, k čemu takovou nálepku potřebujeme. Překlad této části dotazu do češtiny zní „pro každý uzel $n, který jsi našel, vezmi jeho značku (hodnota atributu m/tag) a do tabulky napiš jednak tuto značku ($1), jednak počet výskytů této značky mezi výsledky dotazu (funkce count()). (Pro zvídavé: té nálepce“ se v informatice i v matematice říká proměnná. Právě jsme přiřadili do proměnné nějakou hodnotu či údaj, v tomto případě hned celý uzel se všemi jeho atributy. Na jednotlivé atributy uzlu označeného $n se teď můžeme odkázat pomocí tečky, např. $n.m/tag nám řekne, jakou morfologickou značku má uzel $n. Ten uzel jsme si mohli pojmenovat i jinak než $n, třeba $x1, $muj_uzel nebo $mimo. A co je tedy to $1? Taky proměnná (nálepka)! Všechny proměnné v dotazech PML-TQ se poznají podle znaku dolaru na začátku. Tahle proměnná je ovšem trochu specifická. Nic jsme do ní nepřiřadili, neřekli jsme, co má být touhle nálepkou označeno. Očíslované proměnné nám totiž PML-TQ vytváří automaticky. Za chvíli uvidíme ještě další příklady, kde použijeme podobné číselné odkazy.)

a-node $n := [ m/form='mimo' ]
>> for
$n.m/tag
give
$1, count()

Po vyhodnocení dotazu dostaneme následující tabulku:

$1

$2

RR--2----------

7

Db-------------

2

RR--4----------

246

Shrňme tedy, co zatím víme:

  • Část dotazu před šipkami (>>) je výběrová, zde se říká, co hledáme. Tuto část musíme uvést vždy.

  • Pokud neuvedeme nic dalšího, zobrazí se stromy, ve kterých se našlo to, co hledáme. Pokud uvedeme šipky, říkáme, že místo stromů chceme souhrnnou tabulku.

  • Část za šipkami může obsahovat klíčová slova for a give. Mezi nimi vyjmenujeme atributy z první části dotazu, které nás zajímají. Pokud si řekneme o atribut morfologické značky (m/tag), pak se zjistí, jaké všechny různé značky se ve výsledcích našeho dotazu objevily, a pro každou z nich bude mít tabulka jeden řádek.

  • Za klíčovým slovem give pak popíšeme, jaké má mít tabulka sloupce. Zatím umíme dva druhy sloupců: buď se číselnou proměnnou odkážeme na první ($1), druhý ($2), třetí ($3) atd. atribut popsaný mezi slovy for a give, nebo si funkcí count() necháme vypsat, kolikrát se značka uvedená na tomto řádku vyskytla ve výsledcích našeho dotazu.

Pokud chceme tabulku seřazenou sestupně podle četností a jako druhé kritérium abecedně podle značek, přidáme na konec dotazu příkaz

sort by $2 desc, $1

Cvičení: Zjistěte, jaké se v korpusu vyskytují předložky s genitivem a vypište je spolu s jejich frekvencemi, seřazené sestupně podle frekvencí.

Problém: Dostaneme 63 různých slovních tvarů, ale některé se liší jen velkými písmeny, např. „bez“, „Bez“ a „BEZ“. To bychom rádi sjednotili. Tip: Nad dotazovým okénkem je několik rozbalovacích nabídek, ve kterých najdete klíčová slova, která se dají v dotazech použít. Podívejte se na řetězcové funkce (string functions).

a-node $n := [ m/tag~'RR--2' ]
>> for lower($n.m/form)
give $1, count()
sort $2 desc, $1

Cvičení: Se kterým pádem máme nejvíce a se kterým (kromě vokativu) nejméně různých předložek? (Jde nám o ty, které se vyskytly v korpusu; o pádové vazbě rozhoduje morfologická značka, i když v některých případech budeme mít asi podezření na anotační chyby.)

Pokud se vám zařazení některých předložek zdá podezřelé, zkuste dotaz upravit tak, aby zobrazil příslušný výskyt ve větě, a ověřte, zda jde nebo nejde o chybu. Tip: nemusíte neustále umazávat a zase vracet šipky a tabulkové funkce za nimi. Místo tlačítka „Query“ můžete stisknout „w/o Filters“. Potom se dotaz spustí, ale případné šipky a funkce za nimi se budou ignorovat, takže dostanete každopádně obrázky stromů.

Pojmenované entity a regulární výrazy

Pojem pojmenovaná entita (anglicky „named entity“, NE) bývá různými autory definován různě, ale prakticky vždy zahrnuje vlastní jména osob, zeměpisné názvy a názvy organizací. V mnoha jazycích v různé míře platí, že pojmenované entity se píší s velkým písmenem na začátku. Zkusme si taková slova vyhledat v korpusu. Velké písmeno na začátku slovního tvaru nám úplně nepomůže, mohlo by tam být kvůli začátku věty. Velké písmeno na začátku lemmatu bude lepší.

a-node $n := [ m/lemma~'^[A-ZÁČĎÉÍŇÓŘŠŤÚÝŽ]' ]
>> for $n.m/
lemma
give $1, count()
sort $2 desc, $1

Při popisování, jaké lemma hledáme, jsme opět použili tzv. regulární výraz. Regulární výraz popisuje najednou celou skupinu lemmat, která splňují určitá kritéria. Kdybychom použili obyčejné rovnítko, např. m/lemma = 'pes', nebyl by to regulární výraz. Prostě bychom hledali lemma „pes“. Pokud ale místo rovnítka použijeme vlnovku, PML-TQ bude zkoumat, zda lemma odpovídá danému výrazu. Např. m/lemma ~ 'pes' znamená, že lemma musí obsahovat řetězec „pes“. PML-TQ nám tedy může vrátit např. uzly s lemmaty „pes“, „peskovat“, „maxipes“ nebo „kapesník“. Pokud chceme, aby lemma začínalo řetězcem „pes“, použijeme zvláštní znak ^: m/lemma ~ '^pes'. Pokud chceme, aby končilo tímto řetězcem, použijeme zvláštní znak $: m/lemma ~ 'pes$'. Oba znaky můžeme také použít společně. Následuje přehled nejdůležitějších kódů používaných v regulárních výrazech v PML-TQ:

  • ^ na začátku výrazu: posuzovaný řetězec tady musí začínat

  • $ na konci výrazu: řetězec zde musí končit

  • . (tečka): zastupuje jeden libovolný znak

  • ( ) (závorky): ohraničují část výrazu, o které chceme něco říct (viz níže)

  • ? (otazník): předcházející znak nebo uzávorkovaná část výrazu se na tomto místě může, ale nemusí vyskytnout

  • * (hvězdička): předcházející znak nebo uzávorkovaná část výrazu se na tomto místě může opakovat několikrát za sebou, nemusí tu být vůbec. Zvláštní případ: .* (tečka s hvězdičkou) zastupuje libovolný počet libovolných znaků.

  • + (plus): předcházející znak nebo uzávorkovaná část výrazu se na tomto místě musí vyskytnout alespoň jednou, ale může se i libovolněkrát opakovat.

  • [ ] (hranaté závorky): vyjmenovávají množinu znaků, které se na tomto místě mohou vyskytnout. Množina v hranatých závorkách popisuje jen jednu pozici v posuzovaném řetězci, čili předpokládáme, že z vyjmenovaných znaků se tu vyskytne právě jeden! (Samozřejmě to bude jinak, pokud následuje operátor ?, * nebo +.)

    • Spojovník uvnitř hranatých závorek nám umožňuje zadat rozsah znaků, např. [0-9] je výraz, který reprezentuje libovolnou číslici. Rozsah je závislý na interním uspořádání znaků, takže [A-Z] zahrnuje všechna velká písmena anglické abecedy, ale nezahrnuje česká písmena s diakritikou, která se v interním pořadí nacházejí jinde.

    • Stříška („^“) uvnitř hranatých závorek říká, že dále uvedené znaky na daném místě naopak být nesmí. Např. „[^QXW]“ představuje libovolný znak kromě písmen „Q“, „X“ a „W“. Všimněte si, že stříška jako zvláštní znak má v regulárních výrazech dva různé významy podle toho, zda se nachází uvnitř, nebo vně hranatých závorek.

  • \\ (dvě zpětná lomítka): ruší zvláštní význam některých znaků. Např. \\. zastupuje pouze tečku, zatímco . zastupuje libovolný znak včetně tečky. Chceme-li hledat přímo zpětné lomítko, musíme ho dokonce napsat čtyřikrát: \\\\.

Cvičení: Vytvořte statistiku všech příjmení v korpusu.

Vyberte si jedno příjmení z tabulky a nechte si ukázat jeho výskyty ve stromech.

Nyní si konečně začneme všímat i strukturní anotace. Jméno a příjmení je v PDT rozebráno tak, že jméno visí na příjmení jako jeho přívlastek (lze sice argumentovat, že historicky to bylo obráceně, ale dnešní intuici toto zachycení odpovídá zřejmě lépe).

a-node $p := [ m/lemma~'_;S', child a-node $j := [m/lemma~'_;Y'] ]
>> for $j.m/lemma, $p.m/lemma
give $1, $2, count()
sort $3 desc, $2, $1

Zkuste si tlačítko „Visualize“, ukáže vám grafické znázornění vašeho dotazu.

Cvičení: Najděte jména všech prezidentů, o kterých se v korpusu mluví. Tip: Hledejte Václava Havla a inspirujte se u něj.

a-node $p :=
[
m/lemma~'_;S',
child a-node $j := [m/lemma~'_;Y'],

child a-node [m/lemma='prezident']
]
>> for $j.m/lemma, $p.m/lemma
give $1, $2, count()
sort $3 desc, $2, $1

Cvičení: Rozšiřte dotaz tak, abychom v tabulce u každého jména viděli, čeho je to prezident (může to být substantivum, adjektivum nebo třeba zájmeno, to je nám jedno).

a-node $p :=
[
m/lemma~'_;S',
child a-node $j := [m/lemma~'_;Y'],

child a-node
[
m/lemma='prezident'
,
child a-node $z := [afun='Atr']

]
]
>> for $j.m/lemma, $p.m/lemma
, $z.m/lemma
give $1, $2, $3, count()
sort $2, $1

Všimněte si vícenásobných rozvití, jsou započítána jako samostatné výsledky.

PML-TQ rozhraní v Tredu

Díky rozšíření je možné zadávat dotazy přímo v Tredu a nechat si zobrazit výsledné stromy tamtéž. Výhodou je, že si můžete značnou část dotazu naklikat myší z nabídky, a nemusíte tolik přemýšlet nad syntaxí dotazovacího jazyka. Nevýhodou je, že v Tredu je momentálně chyba (ve verzi 2.5049), která ve výsledném stromě špatně obarvuje uzly, pokud je současně spuštěné obarvování hran podle klauzí a pokud má věta více než jednu klauzi. Čili je obtížnější rozpoznat uzly, které ve výsledném stromu odpovídají těm z vašeho dotazu.

Jak na to: Je nutné mít nainstalované rozšíření Tredu PML Tree Query.

Zvolte nabídku Macros / * Start Tree Query. Na rozdíl od webového rozhraní, Tred vám umožní prohledávat nejen treebank uložený na serveru, ale také soubory s anotovanými jazykovými daty uložené na vašem lokálním disku. My budeme testovat prohledávání treebanku na serveru.

Tlačítkem „Add Service“ vybereme na serveru korpus, který chceme prohledávat. Najděte „Prague Dependency Treebank 2.5“, zaškrtněte políčko u něj a stiskněte „OK“.

http://euler.ms.mff.cuni.cz:8126

Vyberte v seznamu nakonfigurovaných spojení tento treebank a stiskněte „Select“.

Poté se vám hlavní část okna Tredu rozdělí na levou a pravou polovinu. Nad nimi se objeví několik řad tlačítek, která pomáhají se zadáváním dotazu. Levá polovina je určena pro vizuální reprezentaci vašeho dotazu, pravá polovina pro stromy, které jsou výsledkem dotazu. Jedna polovina je vždy zobrazena jasně (tato polovina je aktivní) a druhá je pokryta drobnými tečkami (neaktivní). Když chcete zadávat nebo měnit dotaz, klikněte do levé poloviny, aby byla aktivní. Když chcete prohlížet výsledky, aktivujte pravou polovinu.

Pro zadání nového dotazu stiskněte vlevo nahoře tlačítko „New query“. Jak už víme, každý dotaz obsahuje specifikaci alespoň jednoho uzlu, který ve stromech hledáme. Uzel do dotazu přidáme tlačítkem „Add node“, vyberte typ uzlu „a-node“, čili uzel stromu na analytické rovině. Teď by výsledkem dotazu byl libovolný analytický strom, protože v každém je alespoň jeden a-uzel a žádné další podmínky jsme nestanovili. Stiskněte tedy tlačítko „Edit query“ nebo „Edit node“. Objeví se okno, kde můžete zadat další podmínky, které musí hledaný uzel splňovat. Dejme tomu, že chceme najít všechna slovesa, u každého uzlu nás tedy zajímá atribut morfologická značka. Stiskněte tlačítko „Attribute“ a vyberte „m/tag“. V PDT existuje mnoho různých značek, které všechny patří slovesům, potřebujeme proto použít regulární výraz, abychom je popsali všechny najednou. Stiskněte tlačítko „~ (regexp)“ a po něm „'…'“. Teď už musíte použít klávesnici a zadat výraz, který popíše hledanou množinu značek. Všechny slovesné značky začínají písmenem „V“, takže stačí napsat „^V“. Stiskněte „OK“.

Dejme tomu, že chceme dotaz dále omezit na slovesa, pod nimiž ve stromu visí tvar pomocného slovesa. Musíme tedy do dotazu přidat další uzel. Klikněte znova na tlačítko „Add node“. Tentokrát budete dotázáni na vztah nového uzlu k právě vybranému (a dosud jedinému) uzlu v dotazu. Zvolte „child“ a stiskněte „OK“. Poté opět stiskněte tlačítko „Edit node“, abyste mohli zadat podmínky pro nový uzel. To, že sloveso funguje ve větě jako pomocné, se pozná podle afunu „AuxV“. Proto nyní stiskněte „Attribute“, vyberte „afun“ a stiskněte „= (equals)“. U afunů Tred zná seznam povolených hodnot, takže vám je rovnou nabídne na výběr. Vyberte „AuxV“ a stiskněte „OK“, potom opět „OK“.

Dotaz je nachystán, můžeme ho spustit. Stiskněte tlačítko „Query“. Po chvíli se v pravé polovině okna objeví první nalezený strom. Klikněte do pravé poloviny a aktivujte ji. Nebýt chyby v Tredu, viděli byste odpovídající uzly obarvené stejně jako v levé polovině, kde je zobrazen váš dotaz; takhle musíte uzly ve stromu identifikovat sami. Můžete také dotaz okopírovat do webového rozhraní PML-TQ a zobrazit si výsledky tam; tam funguje obarvování správně.

Analytické funkce („afuny“)

U každého a-uzlu najdeme atribut afun, který obsahuje syntaktickou značku, tzv. analytickou funkci. Tato značka většinou říká, jakého druhu je závislost daného uzlu na jeho rodiči. Např. podmět (subject) dostane značku „Sb“, předmět (object) „Obj“, přívlastek (attribute) „Atr“.

Úplný přehled hodnot afunů najdeme v dokumentaci PDT:
http://ufal.mff.cuni.cz/pdt2.0/doc/manuals/cz/a-layer/html/ch03s02.html

Tento odkaz vede na příručku, kterou se řídili anotátoři při tvorbě korpusu. Pokud pak v rohu kliknete na odkaz na další stránku, najdete podrobnější vysvětlivky k tomu, za jakých okolností se používá která analytická funkce a jak vypadá příslušná část stromečku. Pro lepší orientaci se také můžete podívat na obsah celé příručky:
http://ufal.mff.cuni.cz/pdt2.0/doc/manuals/cz/a-layer/html/index.html

Cvičení: V tabulce se mj. nachází afun AuxO, ale jeho vysvětlení nedává jasnou představu, o jaká slova se jedná. Najděte příklady, kde byl v korpusu použit.

Cvičení: Najděte výskyty sloves, na kterých visí doplněk. Všimněte si, že doplněk má dvě různé značky, Atv a AtvV.

Koordinace

Koordinace je konstrukce, ve které dva nebo více větných členů společně plní jednu funkci. Tyto větné členy jsou typicky oddělené čárkami a souřadící spojkou, např. „jablka, hrušky a banány“. Zachytit koordinaci v závislostním stromě je obtížné, protože vztah mezi jednotlivými členy koordinace není závislostní (tyto členy jsou si rovny). V PDT je to řešeno tak, že hlavou (rodičovským uzlem) koordinace je spojka. Na ní visí jednak všechny členy koordinace, jednak případné čárky a další oddělovače, a nakonec také větné členy, které jsou společným rozvitím celé koordinace. Hlava koordinace má afun Coord. Než budeme pokračovat, vyhledejte v korpusu výskyty uzlů s takovým afunem.

a-node $coord := [
afun = 'Coord' ,
child a-node $a := [ is_member = 1 ],
child a-node $b := [ is_member = 1, order-follows $a ],
child a-node $s := [ afun !~ 'Aux[XYG]', is_member != 1 ],
0x child a-node [ afun = 'ExD' ],
!3+x child a-node [ is_member = 1 ]

];

Prohlédněte si příklady koordinací v korpusu. Jak jsou odlišeny jednotlivé druhy uzlů zapojených do koordinace? Oddělovače mají pomocné afuny začínající na Aux: čárky mají AuxX, ostatní interpunkce AuxG, případné další spojky mají AuxY. Pokud odfiltrujeme tyto pomocné uzly, musíme ještě umět odlišit členy koordinace od společných rozvití. V zobrazených stromech uvidíte, že afuny členů koordinace končí kódem „_Co“, tato přípona je však zobrazena světlejším odstínem modré barvy. Ve skutečnosti toto „_Co“ není součástí afunu, takhle se zobrazuje jen kvůli kompaktnosti zobrazení. Ve skutečnosti má uzel další atribut, který se jmenuje is_member a má hodnotu 1, jestliže jde o člen koordinace. Pokud tedy chceme v dotazu zmínit uzel, který je členem koordinace, napíšeme

a-node $a := [ is_member = 1 ]

Všimněte si dále, že skutečné afuny (bez toho „_Co“) členů koordinace popisují funkci, jakou ve větě zastává koordinace jako celek, tedy vztah celé koordinace k jejímu rodiči. Koordinace je jednou z výjimek, kdy tato funkce není popsána v rodiči celé podstruktury, protože tam máme zvláštní afun Coord.

Cvičení: Najděte příklady koordinací, které ve větě mají funkci příslovečného určení.

Cvičení: Najděte příklady koordinací, které mají alespoň čtyři členy a alespoň jedno společné rozvití.

Cvičení: Najděte příklady vnořených koordinací, tedy takových, kde alespoň jeden člen koordinace má afun Coord a řídí svou vlastní koordinaci. Dokážete najít vícenásobně vnořené koordinace?

Cvičení: Najděte příklady koordinací, jejichž členy nemají stejné afuny, přitom však nejde o vnořenou koordinaci.

Vzhledem k tomu, že v koordinacích a kolem nich se objevují hrany, které nepředstavují klasické závislosti, máme ztížené vyhledávání klasických závislostních vztahů. Někdy bychom samozřejmě mohli mávnout rukou a příklady, do kterých je zamíchaná koordinace, prostě oželet. Naštěstí však PML-TQ umožňuje hledat tzv. „efektivního rodiče“ nebo „efektivní dítě“ uzlu. Příklad: máme větu „Jan a Marie letos koupili dům.“ Jan a Marie tvoří koordinaci, která je podmětem slovesa „koupili“. Pokud ale chceme najít všechny věty, ve kterých je Jan podmětem slovesa, ať už samostatně nebo v koordinaci s někým, máme problém. Technicky je totiž rodičem uzlu Jan uzel spojky „a“. Pokud si ale místo vztahu „child“ řekneme o vztah „echild“ (efektivní dítě), PML-TQ bude případnou koordinační spojku ignorovat a podívá se rovnou mezi členy koordinace. Bude to fungovat dokonce i v případě, že rodičovské sloveso je také v koordinaci nebo když jsou koordinace vnořené, např. „Jan a Marie koupili a opravili dům.“

a-node $v := [
m/tag ~ '^V',
is_member = 1,
echild a-node $a := [ is_member = 1, afun = 'Sb' ]
];

Kromě koordinací obsahuje PDT ještě jeden druh parataktických (nezávislostních) struktur, a to apozice. Můžeme si vynutit, aby nalezené příklady obsahovaly pouze koordinace, když přidáme požadavek, aby rodič podmětu (přímý rodič, nikoli ten efektivní) měl afun „Coord“. Následující dotaz to dělá. Zkuste si ho nechat vizualizovat a prostudujte graf, který se vám zobrazí. Tento dotaz už je ale také poměrně složitý a k jeho vyhodnocení nad PDT 2.5 nestačí limit 30 vteřin, který má PML-TQ standardně nastavený. Limit můžeme zvýšit, pokud dotaz pustíme v Tredu. V nástrojové liště hledejte políčko „Timeout“ a zvyšte hodnotu ze 30 na 120. Případně můžete stisknout tlačítko „Configure“, otevře se vám okno a v něm vyplníte hodnotu timeoutu úplně dole.

a-node $v := [
m/tag ~ '^V',
is_member = 1,
echild a-node $a := [
is_member = 1,
afun = 'Sb',
parent a-node [ afun = 'Coord' ]
],
sibling a-node $vs := [ is_member = 1, echild $a ],
parent a-node [ afun = 'Coord' ]
];

Cvičení: Najděte v korpusu všechny uzly, jejichž efektivní rodič není totožný s jejich obyčejným rodičem. Udělejte statistiku afunů, s jakými se vyskytli přímí (neefektivní) rodiče takových uzlů. Vypište v tabulce vždy afun a počet jeho výskytů. Tabulku seřaďte abecedně podle afunů.

a-node $dite := [
parent a-node $prod := [],
eparent a-node $erod := [],
$prod != $erod
]
>> for $prod.afun
give $1, count()
sort by $1

Poddotazy

Umíme toho už hodně, ale na některé typy podmínek nám stávající aparát stále nestačí. Příklad: Umíme hledat slovesa, která mají alespoň jeden předmět (afun „Obj“). Co když ale hledáme nepřechodná slovesa, tedy taková, která nemají žádný předmět? Jak máme do dotazu přimalovat něco, co tam není?

Na to slouží zvláštní operátor „0x“ (čti „nulakrát“). Např. následující dotaz vyhledá uzly, které jsou podle morfologické značky slovesa a mají 0 efektivních dětí takových, jejichž afun by byl „Obj“:

a-node $v := [
m/tag ~ '^V',
0x echild a-node [ afun = 'Obj' ]
]

Cvičení: Výše uvedený dotaz nám ovšem vrátí všechny tvary sloves včetně příčestí trpných. Tam ale nepůjde o nepřechodná slovesa, protože pasivizací se z předmětu stal podmět. Upravte regulární výraz pro m/tag v dotazu tak, aby výsledkem byly všechny slovesné tvary s výjimkou příčestí trpných. Dále vylučte i výskyty pomocného slovesa (afun „AuxV“).

a-node $v := [
m/tag ~ '^V[^s]',
afun != 'AuxV',
0x echild a-node [ afun = 'Obj' ]
]

Podobně se můžeme zeptat třeba na to, zda nějaké sloveso má mezi dětmi právě dva předměty (místo „0x“ napište „2x“), případně dva a více předmětů („2+x“).

Pokud hledáme výsledky v malých stromech, které se nám snadno vejdou do článku či do prezentace, můžeme omezit počet uzlů ve stromu. Uděláme to tak, že budeme klást podmínky na kořen stromu a jednou z podmínek bude, že počet potomků kořene (čili počet všech uzlů ve stromu) nesmí překročit námi zvolenou hodnotu:

a-root $r := [
descendants() 10,
descendant a-node [ m/tag ~ '^Vf' ]
]

Všechny tyto případy, ve kterých potřebujeme znát počet uzlů určitého druhu, PML-TQ zpracovává ve dvou krocích. Nejprve hlavním dotazem najde seznam kandidátů. Potom pro každého kandidáta pustí poddotaz, kterým zjistí počet souvisejících uzlů splňujících doplňkové podmínky. Uzly nalezené poddotazem nejsou ve výsledcích hlavního dotazu zvýrazněné. Nevýhodou dvoufázového zpracování je, že dotazy obsahující poddotazy vyžadují výrazně více času. Snadno se tedy může stát, že server pošle chybové hlášení, že výsledky nejsou k dispozici ve zvoleném časovém limitu, a skončí.

Tektogramatická rovina

Zatím jsme prohledávali pouze stromy na analytické (povrchově syntaktické) rovině PDT. Pojďme se nyní krátce podívat na tektogramatickou (hloubkově syntaktickou) rovinu. Princip tvorby dotazů zůstává stejný, ale tektogramatické stromy vypadají jinak, zachycují jiné jevy a nabízejí jiné atributy, na jejichž hodnoty se můžeme ptát. Místo a-uzlů („a-node“) budeme teď v dotazech pracovat s t-uzly („t-node“).

Afuny, kterými jsou označkované závislosti mezi a-uzly, popisují povrchově-syntaktické vztahy, např. podmět, přísudek, předmět. Na tektogramatické rovině jsou závislosti označkovány tzv. funktory. Ty popisují významovou funkci jednotlivých vztahů, např. konatel děje („actor“, ACT) nebo „trpitel“ dějem zasažený („pacient“, PAT). A kde je tedy rozdíl? Mějme dvě věty: 1. „Prezident jmenoval ministra.“ a 2. „Ministr byl jmenován prezidentem.“ Prezident je v první větě podmět a ve druhé předmět, u ministra je tomu naopak. Na tektogramatické rovině bude ale v obou případech prezident „ACT“ a ministr „PAT“.

Stejně jako na analytické rovině nám pro bližší pochopení poslouží manuál pro anotátory. Najdete ho na adrese
http://ufal.mff.cuni.cz/pdt2.0/doc/manuals/cz/t-layer/html/index.html.

Vlastní popis funktorů pak začíná v kapitole 6 na adrese
http://ufal.mff.cuni.cz/pdt2.0/doc/manuals/cz/t-layer/html/ch06.html.

Příslovečná určení nyní nemají jeden afun „Adv“, ale jsou jemněji rozlišena podle významu, máme např. tři směrové funktory „DIR1“, „DIR2“ a „DIR3“. Pro představu zadejte následující dotaz, který najde uzly, mezi jejichž dětmi se vyskytly všechny tři najednou.

t-node
[
echild t-node [ functor = 'DIR1' ],
echild t-node [ functor = 'DIR2' ],
echild t-node [ functor = 'DIR3' ]
];

V t-stromech některá slova nemají svůj uzel a naopak jsou tam doplněné uzly, pro slova, která byla na povrchu vypuštěna, ale pro rekonstrukci významu jsou důležitá. Uvidíme je prakticky v každém stromě, nejčastěji jde o listy a představují nevyřčené osobní zájmeno. Takto vyhledáme doplněné uzly, které nejsou listy:

t-node
[

is_generated = 1,
1+x child t-node [ ]
];

Dalším významným atributem na tektogramatické rovině jsou tzv. gramatémy. Do značné míry zachycují podobné jevy jako morfologická značka, nyní už však nemají výhled omezen na jediný vstupní token. Takže třeba u sloves se můžeme více dozvědět o jejich čase a způsobu, i když jsou ve větě vyjádřeny složeným tvarem:

t-node $n :=
[
gram/sempos = 'v'
]

>> for $n.gram/tense give $1, count() sort by $1

Z t-uzlů se můžeme odkázat i na jim odpovídající a-uzly na analytické rovině. To je důležité zejména pokud chceme přistupovat k atributům, které přímo v t-uzlech nejsou k dispozici, třeba k morfologické značce. Zkusme zjistit, zda existují t-uzly, které mají sémantický slovní druh „v“, ale podle morfologické značky to nejsou slovesa.

t-node
[
gram/sempos = 'v',
a/lex.rf a-node [ m/tag !~ '^V' ]

]

Na tektogramatické rovině uvidíte různé druhy spojnic mezi uzly, nejen klasické závislosti. Některé vedou napříč stromem. To je případ koreference, tedy vztahu mezi dvěma uzly, kde jeden je typicky zájmeno, čili slovo, které zastupuje, odkazuje na nějakou entitu místo aby ji pojmenovalo, druhý uzel je pak cíl tohoto odkazu. Stejně jako u vztahů rodič-dítě i tady můžeme uvnitř vlastností jednoho uzlu říct, že hledáme vztah k jinému uzlu a v tomto případě má jít o vztah koreferenční:

t-node
[
coref_gram.rf t-node [ ]
]

Většina koreferenčních šipek celkem logicky vede v textu doleva, zpátky. Pokud bychom chtěli vyhledat šipky, které vedou dopředu, potřebujeme přístup k odpovídajícím analytickým uzlům, které si ještě pamatují slovosled:

t-node $pocatek_t :=
[
a/lex.rf $pocatek_a := [ ],
coref_gram.rf t-node $cil_t := [
a/lex.rf $cil_a := [ order-follows $pocatek_a ]
]
]

Vyhledávání v jiných korpusech

PML-TQ umožňuje vyhledávat ve všech korpusech, které byly na serveru k vyhledávání připraveny a ke kterým jste oprávněni přistupovat (přístup k některým korpusům je z licenčních důvodů omezen na určité skupiny přihlášených uživatelů; pokud pracujete anonymně, automaticky jsou pro vás takové korpusy nepřístupné).

Stejně jako u přechodu z analytické roviny PDT na tektogramatickou, i při přechodu na jiný korpus platí, že princip tvorby dotazů je stejný, ale mohou být k dispozici jiné atributy uzlů, jiné hodnoty těchto atributů a jiné vztahy mezi uzly.

Ve webovém rozhraní PML-TQ jste vybírali korpus hned na začátku; v průběhu práce můžete skočit do jiného, když kliknete na nabídku „Select Treebank“. V rozšíření Tredu můžete použít tlačítko „Connect“.

Nyní zkuste otevřít vzorek paralelního česko-anglického korpusu Czeng („CzEng Sample“). Tento korpus je velmi rozsáhlý, proto je v PML-TQ na ukázku k dispozici jen jeho část. Na rozdíl od předcházejících korpusů nebyl Czeng anotován ručně, ale pomocí automatických statistických modelů. Mějte proto na paměti, že anotace budou ve zvýšené míře obsahovat chyby.

Klikněte v Tredu na „Add node“ a všimněte si, kolik různých druhů uzlů je zde k dispozici. Vytvořte minimalistický dotaz, který vám ukáže libovolný a-uzel. Ve výsledku vidíte, že vlastně pro jednu větu dostanete vedle sebe několik jejích stromů: český a-strom, český t-strom, anglický a-strom a anglický t-strom. (Poznámka: seznam druhů uzlů počítal i s uzly typu „p-“ a „n-“, ale ty první se v daném vzorku dat neobjevují vůbec a ty druhé většinou neukazují nic zajímavého.)

Cvičení: V Tredu dvakrát klikněte na nějaký český a-uzel a podívejte se, jak je zachyceno provázání („alignment“) mezi českými slovy a jejich anglickými protějšky. Potom si vyberte nějaké české slovo a vytvořte dotaz, který najde všechny překlady tohoto slova v Czengu a vrátí vám je přehledně v tabulce i s počty výskytů.

a-node $cs :=
[
lemma = 'měnit_:T',
alignment/counterpart.rf a-node $en := [ ]
];
>> for $cs.lemma, $en.lemma
give distinct $1, $2, count()
sort by $3 desc, $2

Cvičení: Vezměte z tabulky, kterou vrátil předcházející dotaz, nejčastější anglické slovo a celý dotaz otočte tak, abyste nyní viděli všechna jemu odpovídající česká slova.

Vallex

Vallex je valenční slovník českých sloves vytvořený ručně na základě mnoha zdrojů (např. Slovník spisovného jazyka českého, Slovesa pro praxi, korpusy jako PDT). Lze ho prohlížet on-line na adrese http://ufal.mff.cuni.cz/vallex/2.6/data/html/generated/alphabet/index.html.

Kromě Vallexu existuje ještě PDT-Vallex, který shromažďuje stejný typ informací, ale je automaticky vytažený z korpusu PDT. Lze ho prohlížet on-line na adrese http://ufal-point.mff.cuni.cz/services/PDT-Vallex/.

Pro angličtinu máme valenční slovník EngVallexu (http://ufal-point.mff.cuni.cz/services/EngVallex/).

Automatická analýza češtiny

Už jsme viděli morfologickou analýzu (bez zjednoznačnění) a syntézu. Teď si ukážeme další nástroje (taggery, parsery), které využívají statistické modely. S jejich pomocí dokážou leckdy rozhodnout mezi různými čteními téže věty, ale nutně dělají také chyby.

Na ÚFALu máme zastřešující prostředí Treex, které zajišťuje, aby spolu jednotlivé nástroje komunikovaly a předávaly si data ve formátu, kterému rozumí. Některé funkce Treexu je nyní možné ovládat i přes web, takže jsou k dispozici pro každého. Webové rozhraní Treexu najdete na následující adrese:

http://ufal-point.mff.cuni.cz/services/treex-web/

Treex potřebuje na vstupu dvě věci:

  • Text, který chceme zpracovat

  • Scénář, který popisuje, co všechno s tímto textem chceme udělat. Scénář se skládá z bloků pro jednotlivé nástroje, které už jsou v Treexu nachystané. Někdy třeba chceme některé bloky vynechat nebo třeba vyměnit Hajičův tagger za Featuramu.

Treex původně vznikl jako prostředí pro překlad z angličtiny do češtiny, takže obsahuje i překladové bloky. Anglický text se analyzuje až na tektogramatickou rovinu, tam se převede na českou tektogramatickou reprezentaci a z ní se vygeneruje český text.

Dnes máme v Treexu některé bloky (zejména tagging a parsing) i pro další jazyky.

POZOR! Některé nástroje v Treexu vyžadují velmi výkonný počítač. My navíc pouštíme několik takových nástrojů za sebou. Můžeme tedy počítat, že výpočet a přenos dat potrvá desítky vteřin nebo i několik minut. Server zatím nebývá přetížen a obvykle máme slušnou šanci, že se trefíme do okamžiku, kdy na něm pracujeme sami. Pokud ale stejný scénář pustí 20 lidí v jedné laboratoři naráz, budou čekat podstatně déle.

Další odkazy