Úvod

Studie & práce
Software

CZ2CQL – Překladač z češtiny do CQL

Korpus dovoluje vyhledávat i poměrně složité dotazy, to je jedna z jeho hlavních výhod oproti takovému Googlu. K tomu se používá dotazovací jazyk CQL, který má přesně daná pravidla. Tento program se snaží zpřístupnit vyhledávání složitějších dotazů i lidem, pro které je CQL příliš rigorozní, nebo nemají čas se ho učit.

Download: cz2cql (Win 32/64bit) 1 MB (není třeba instalovat, stačí stáhnout a rozbalit).

cz2cql (Linux – testováno na Ubuntu) 1,7 MB (není třeba instalovat, stačí stáhnout, rozbalit a přiřadit práva).

Manuál

Překladač si poradí s lecčím, co mu zadáte, a rozhodně nemusíte být nijak striktní a používat slovní spojení přesně tak jak jsou v následujících ukázkách, nicméně mějte na paměti, že mluvíte s počítačem, který nemá intuici a nic si za vás nedomyslí. Občas si poradí i s pravopisnými chybami, ale nedá se na to spoléhat, je to docela morous a když se spletete, tak schválně dělá, že nerozumí.

Vyhledávání jednotlivých slov

Aby počítač poznal, které slovo má hledat, dejte ho do uvozovek. Pokud tedy například chcete najít všechny výskyty slova "hrad" přesně v tomhle tvaru, přikažte mu:

Najdi slovo "hrad".

Tento příkaz najde slova "Hrad", "HRAD" i "hrad", což je nejspíš nejčastější, co člověk potřebuje. Pokud chcete vyloženě hrad s malými písmeny, musíte počítači říct, že na vám na tom záleží:

Chci slovo "hrad" (malými písmeny).

nebo třeba

Vyhledej "hrad" (záleží na velikosti písmen)!

Pokud chcete najít slovo "hrad" ve všech tvarech (čemuž se v lingvistice říká lemma), tak mu řekněte, že chcete najít lemma, tedy když přikážete:

Najdi lemma "hrad".

tak najde všechny výskyty tvarů "hrad", "hradů", "hradem" atd. Dále můžete určit, že třeba chcete jenom tvary množného čísla, nebo nějaký konkrétní pád, pak zadáte

Najdi všechny tvary množného čísla lemmatu "hrad".
Prosím, vyhledej třetí a pátý pád lemmatu "hrad".

Může se taky stát, že budete chtít přesný tvar nějaké skupiny slov, ale jenom v konkrétním pádě:

Najdi všechny výskyty slov "žízeň", "hlad" nebo "chuť" ve čtvrtém pádě.

Některá slova jsou mnohoznačná. Ani to není problém!

Chci najít lemma "stát" jako podstatné jméno.

Můžete hledat i slova, která na něco začínají nebo končí (například všechna slova s předponou "vy").

slova začínající na "vy"
slovesa, která začínají na "vy" a končí na "í"
slovesa, která začínají na "vy" nebo končí na "í"
lemma, které má v prostředku "vin" ale nekončí na "t"
slovo neobsahující "e", které končí na "t"

Tyto podmínkly můžete bláznivě kombinovat:

najdi všechna substantiva mužského životného rodu v pátém pádě množného čísla, která nezačínají na "p"

Bohužel ale překladač nezvládá složitější logické operace (protože v běžné češtině se používají mnoha různými způsoby, které je obtížné pro počítač pochopit), takže například příkaz

podstatné jméno v prvním pádě nebo přídavné jméno v druhém pádě

se interpretuje chybně jako

podstatné nebo přídavné jméno v prvním nebo druhém pádě

Pokud tedy budete chtít složitější logické posloupnosti, nezbude vám, než se naučit přímo CQL. Pokud se lingvistikou živíte a děláte seriozní vědeckou práci, tak k tomu stejně dřív nebo později dojde. Tento překladač vám ostatně může pomoci se s CQL nenásilně seznámit.

Více slov za sebou

Často se stává, že chcete najít více slov po sobě, například chceme vědět, jestli po slovese "stát" následují různé předložky a která je nejčastější. Tak to prostě do příkazu napíšeme, tak jak to jde za sebou:

Najdi lemma slovesa "stát" následované předložkou.

Takto jednoduché to je. Jenom je potřeba pamatovat na to, že posloupnost příkazu musí být skutečně taková, jakou ve skutečnosti chceme, tedy předložka následuje po slovese nám kýžený výsledek nepřinese. ZároveŇ je potřeba nějak naznačit, že jde o posloupnot, například nějak jako pak, následuje, potom neboza ním. Mezi slovesem a předložkou může být určitě nějaké příslovce, třeba "spadl přímo na hlavu". Zkusme najít takovou posloupnost:

lemma "spadnout" v minulém čase, pak příslovce, potom předložka

teď zkusíme najít co nejvíc takových příslovcí, které jsou mezi slovesem a předložkou. Dejme tomu všechny věty, kdy mezi slovesem a předložkou jsou nejmíň 4 taková příslovce

sloveso, pak nejmíň 4 příslovce, pak předložka

Taky můžeme chtít nejvíce 4 příslovce nebo dvě až čtyři příslovce:

sloveso, pak maximálně 4 příslovce, pak předložka
sloveso, pak 2 až 4 příslovce, pak minimálně dvě předložky

Může se stát, že je nám úplně jedno, co mezi slovesem a předložkou je, proto slovo mezi nimi vůbec nijak nespecifikujeme:

Sloveso, po něm může být až dvakrát libovolné slovo, pak předložka.

Nebo něco složitějšího:

lemma "vlk", pak až 10 libovolných slov, pak lemma "koza", pak až 10 libovolných slov, pak lemma "celý"

V tomhle případě, když dovolujeme spoustu libovolnáých slov mezi vyhledávanými slovy, se může stát, že překročíme hranici věty a "koza" s "vlkem" už nebudou souviset. Proto můžeme upřesnit, že to jcceme v rámci jedné věty, například

V rámci jedné věty mi najdi lemma "vlk", pak libovolný počet libovolných slov, pak lemma "koza", pak libovolný počet libovolných slov, pak lemma "celý"
"slovo", pak libovolné množství čehokoliv, pak lemma "bůh" v jedné větě

Taky je možné chtít pouze slova, která jsou na začátku nebo na konci věty, například

slovo "proto" na začátku věty, pak předložka.
Slovo "proto" na konci věty.

Syntax

Chcete vyhledat sloveso, které není přísudek? žádný problém, korpusy jsou označkovány i syntakticky:

sloveso, co není přísudek

Protože syntax je založená na vztazích, existuje i způsob se dozvědět, co na čem závisí.

najdi předložky, které závisí na lemmatu "mít"
najdi podstatná jména visící na podmětu
najdi přívlastky závislé na lemmatu "víno"

Bohužel v CQL není možné vyjádřit slovní tvar, na kterém slovo visí, pouze lemma, takže místo předložka visící na slovu "koních" je třeba zadat

předložka visící na slovu "kůň" v sedmém pádě plurálu

Je nutná, aby všechno, co zazní po klíčovém slovu visí nebo závisí se skutečně týkalo toho členu, na kterém to závisí a ničeho jiného, například tedy:

podstatné jméno na konci věty v prvním pádě závislé na nedokonavém slovese ve třetí osobě

Bohužel náš jazyk nám nedovoluje vztahy dále řetězit, takže není možné chtít například předložku, která závisí na podstatném jméně, které závisí na slovese, tohle prostě nebude fungovat. Nástroje, které tohle umí, mají na ÚFALu na Matfyzu. Syntaktická anotace ČNK není dokonalá, zkuste si například najít dotaz, který by neměl mít příliš mnoho výsledků:

předmět v nominativu

Další příklady

Vyzkoušejte si...

Najdi přídavná nebo podstatná jména, končící na "í"
najdi lemmata končící na "istý","ečný", "ičelý" nebo "ičitý"
lemma "těžko", pak "na" potom 1 pozice volná potom lemma "lehko", potom zase "na"
Najdi mi prosím slovo, které začíná na "vod", které je podstatné jméno, po kterém následuje lemma "říci" nebo "říct", které je ve 3. osobě a není nedokonavé, pak je 0 až 3 krát libovolné slovo a pak je podstatné jméno ve 3. pádě, to všechno v rámci jedné věty.
Začátek věty, pak slovo začínající na "[AEIOUÁÉÍÓÚ]" (záleží na velikosti písmen), které není "a" ani "i" ani "o".
přídavná jména ve druhém nebo třetím pádě končící na "ýho" nebo "ýmu"
Vyhledej všechna přídavná jména ve druhém pádě mužského rodu začínající na "a".
2 slovesa v první nebo druhé osobě jednotného čísla následované předložkou, následované podstatným jménem
chci 3 až 6 sloves v minulém čase po sobě v jedné větě.
tag ".i" nebo třetí osoba
přechodník, po něm předložka
přechodník minulý, po něm archaické slovo
poctatný méno v hovorovym tvaru
zkratka na konci věty
sloveso, které není infinitiv a končí na "t"

Seznam podporovaných kategorií

TODO

Poznámka pro pokročilé

Program nepracuje tak, že by skutečně parsoval přirozený jazyk, využívá toho, že filtruje relevantní informace od těch nerelevantních a ty pak skládá nezávisle na jejich syntaktickém postavení ve větě. Takže skládáním klíčových slov za sebe dosáhnete stejného účinku jako rozvitou větou, například místo:

Najdi mi prosím všechny výskyty lemmatu "stát" (jako sloveso) následovaného předložkou "za", následovaného třemi až pěti přídavnými jmény v rámci jedné věty.

je možné napsat prostě:

sloveso lemma "stát" pak předložka "za" pak adjektivum 3-5 jedna věta

Tento způsob zápisu je sice úsporný, ale pro člověka poměrně nepřehledný, proto, pokud se budete chtít k dotazům vracet, není od věci psát je celou větou, která vlastně zrovna popisuje, co dotaz dělá.

Slovo slovo je chápáno jako atribut lc (tedy smaže se rozdíl mezi velkými a malými písmeny – z anglického lower case) a teprve pokud hledané slovo obsahuje velké písmeno, nebo pokud to uživatel nějak specifikuje ("na velikosti písmen záleží"), tak je zadáváno jako atribut word. Takto se překladač chová i když nijak nespecifikujete. Pokud si chcete být jistí, jak bude slovo zadáno, použijte klíčových slov lemma (pro vyhledávání slova ve všech tvarech), lc (pro vyhledávání přesného tvaru slova nezávisle na velikosti písmen) nebo word (pro vyhledávání úplně přesného tvaru slova, včetně velikosti písmen). Také je možné přímo zadat tag a afun (tedy syntaktickou funkci). Toto rozlišení je konsistentní s názvoslovím ČNK a pokud si na něj zvyknete, tak vám to usnadní přechod na CQL.

tag "V" lemma "stát" negace pak předložka lc "za" pak word "nic"

Respektive stejný dotaz poněkud srozumitelněji:

Najdi lemma "stát" v negaci s tagem "V", následované předložkou lc "za", potom by mělo být slovo (tedy word) "nic"

Tento překladač může pomoci i pokročilejším uživatelům, kteří CQL ovládají: napřed hrubý nárys dotazu vytvoří pomocí tohoto nástroje a následně přeložené CQL ručně vypilují podle potřeby.

Detailní určení slovního druhu až na výjimky není implementováno, takže pokud chcete mít jistotu, tak ho vyjádřete jako tag. tedy například pokud chcete slovesné tvary minulého aktivního příčestí (včetně přidaného „-s“) , ať už to znamená cokoli, tak prostě napište:

Najdi tag ".p"

Z Detailního určení slovního druhu prosím nepoužívejte znaky, které nejsou písmena nebo číslice, protože překladač na to není připravený. Místo hvězdičky (manuál charakterizuje jako slovo „krát“ (slovní druh: spojka))

prostě napište
"krát" jako spojka

nebo to klidně napište úplně stejně, jak je to v tom manuálu:

slovo „krát“ (slovní druh: spojka)