Obě strany předchozí revizePředchozí verzeNásledující verze | Předchozí verzeNásledující verzeObě strany příští revize |
kurz:pokrocile_dotazy [2017/10/06 10:30] – [Shoda (a neshoda) atributů] tomasjelinek | kurz:pokrocile_dotazy [2021/03/23 10:36] – [Posloupnost pozic] vaclavcvrcek |
---|
====== 5. lekce: Dotazovací jazyk CQL. Pokročilé dotazy. ====== | ====== 5. lekce: Dotazovací jazyk CQL. Pokročilé dotazy. ====== |
| |
V páté lekci se zaměříme na klíčovou dovednost, která teprve umožní plně využívat všechny možnosti nabízené naším [[kontext|rozhraním KonText]]: jde o ovládnutí dotazovacího jazyka [[pojmy:dotazovaci_jazyk|CQL]]. Tento typ dotazu úzce souvisí také se zvládnutím tzv. [[pojmy:regularni_vyrazy|regulárních výrazů]], s nimiž jsme se seznámili v předešlé lekci. | V páté lekci se zaměříme na klíčovou dovednost, která teprve umožní plně využívat všechny možnosti nabízené naším [[kontext|rozhraním KonText]]. Jde o ovládnutí dotazovacího jazyka CQL, který úzce souvisí se zvládnutím tzv. [[pojmy:regularni_vyrazy|regulárních výrazů]], s nimiž jsme se seznámili v předešlé lekci. |
| |
| Korpusový [[pojmy:dotazovaci_jazyk|dotazovací jazyk]] (CQL, Corpus Query Language) je formální jazyk, který slouží k vyhledávání v korpusu. Budete-li chtít formulovat dotaz přímo v CQL, je nutné v KonTextu nad vyhledávacím okénkem aktivovat přepínač **Pokročilý dotaz**. CQL slouží jak k zadávání velmi složitých dotazů (např. vyhledej všechny výskyty adjektiv v superlativu v jiném pádě než nominativ, po nichž v textu nenásleduje substantivum ani interpunkce), tak i k zadávání dotazů jednoduchých (např. najdi výskyty lemmatu //oko//). Právě v možnosti vyhledávat pomocí velmi sofistikovaných kritérií tkví základní kvalitativní rozdíl mezi korpusovým vyhledávačem a běžným fulltextovým hledáním, které využíváme např. při práci s Googlem. |
| |
Korpusový [[pojmy:dotazovaci_jazyk|dotazovací jazyk]] (CQL, Corpus Query Language) je formální jazyk, který slouží k vyhledávání v korpusu. Budete-li chtít formulovat dotaz přímo v CQL, je nutné ho zadat prostřednictvím příslušného [[kurz:prvni_dotaz#typy_dotazu|typu dotazu]] (**CQL**). Všechny ostatní typy dotazů se do dotazovacího jazyka překládají automaticky. CQL slouží jak k zadávání velmi složitých dotazů (např. vyhledej všechny výskyty adjektiv v superlativu v jiném pádě než nominativ, po nichž v textu nenásleduje substantivum ani interpunkce), tak i k zadávání dotazů jednoduchých (např. najdi výskyty lemmatu //oko//). Právě v možnosti vyhledávat pomocí velmi sofistikovaných kritérií lze spatřovat základní kvalitativní rozdíl mezi korpusovým vyhledávačem a běžným fulltextovým hledáním, které využíváme např. při práci s Googlem. | |
===== Základní formát CQL dotazu ===== | ===== Základní formát CQL dotazu ===== |
| |
* Jedné [[pojmy:pozice|pozici]] v korpusu odpovídá jeden výraz ve tvaru ''[atribut=<nowiki>"</nowiki>hodnota<nowiki>"</nowiki>]'' v hranatých závorkách; pokud nechceme specifikovat ani atribut, ani jeho hodnotu, můžeme nechat hranaté závorky prázdné ''[]'' a dotaz bude odpovídat jedné libovolné pozici | * Jedné [[pojmy:pozice|pozici]] v korpusu odpovídá jeden výraz ve tvaru ''[atribut=<nowiki>"</nowiki>hodnota<nowiki>"</nowiki>]'' v hranatých závorkách; pokud nechceme specifikovat ani atribut, ani jeho hodnotu, můžeme nechat hranaté závorky prázdné ''[]'' a dotaz bude odpovídat jedné libovolné pozici |
* Na jedné pozici můžeme za pomoci [[kurz:pokrocile_dotazy#kombinace_podminek_v_ramci_jedne_pozice|logických operátorů]] zkombinovat více atributů: např. ''[word=<nowiki>"</nowiki>kolem<nowiki>"</nowiki> & pos=<nowiki>"</nowiki>N<nowiki>"</nowiki>]'' (vyhledá všechny výskyty tvaru substantiva //kolo//, a nikoli výskyty předložky //kolem//). | * Na jedné pozici můžeme za pomoci [[kurz:pokrocile_dotazy#kombinace_podminek_v_ramci_jedne_pozice|logických operátorů]] zkombinovat více atributů: např. ''[word=<nowiki>"</nowiki>kolem<nowiki>"</nowiki> & pos=<nowiki>"</nowiki>N<nowiki>"</nowiki>]'' (vyhledá všechny výskyty tvaru substantiva //kolo//, a nikoli výskyty předložky //kolem//). |
* Pomocí CQL lze vyhledat i libovolné množství textových pozic následujících za sebou, každá z nich bude mít vlastní výraz v hranatých závorkách, např. ''[lemma=<nowiki>"</nowiki>mít<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>červený<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>tvář<nowiki>"</nowiki>]'' (výsledkem jsou varianty víceslovného výrazu //mít červené tváře//). | * Pomocí CQL lze vyhledat i libovolné množství textových pozic následujících za sebou, každá z nich bude mít vlastní výraz v hranatých závorkách, např. ''[lemma=<nowiki>"</nowiki>mít<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>červený<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>tvář<nowiki>"</nowiki>]'' (výsledkem jsou varianty víceslovného výrazu //měla červené tváře//). |
| |
| |
===== Logické operátory: Kombinace podmínek v rámci jedné pozice ===== | ===== Logické operátory: Kombinace podmínek v rámci jedné pozice ===== |
| |
V rámci jedné pozice lze kombinovat nejrůznější podmínky, lze tedy specifikovat hodnotu dvou i více atributů: Hledáme například předložku //s//, ale požadujeme jen slabičné tvary //se// -- pokud bude CQL dotaz mít formu ''[word=<nowiki>"</nowiki>se<nowiki>"</nowiki>]'', vyhledají se i tvary zájmena //se//. Proto je třeba zadat dotaz např. v podobě: ''%%[lemma="s" & word="se"]%%''. | V rámci jedné pozice lze kombinovat nejrůznější podmínky, je tedy možné specifikovat hodnotu dvou i více atributů: Hledáme například předložku //s//, ale požadujeme jen slabičné tvary //se// -- pokud bude CQL dotaz mít formu ''[word=<nowiki>"</nowiki>se<nowiki>"</nowiki>]'', vyhledají se i tvary zájmena //se//. Proto je třeba zadat dotaz např. v podobě: ''%%[lemma="s" & word="se"]%%''. |
| |
Pokud chceme kombinovat podmínky, musíme se nejprve seznámit s tzv. **logickými operátory**: | Chceme-li kombinovat podmínky, musíme se nejprve seznámit s tzv. **logickými operátory**: |
| |
^ název ^ znak ^ co zastupuje ^ další informace ^ příklad dotazu ^ popis dotazu ^ | ^ název ^ znak ^ co zastupuje ^ další informace ^ příklad dotazu ^ popis dotazu ^ |
| **ampersand** | ''&'' | a zároveň (AND) | platí všechny podmínky zároveň | ''[lemma=<nowiki>"</nowiki>jak<nowiki>"</nowiki> & pos=<nowiki>"</nowiki>N<nowiki>"</nowiki>]'' | vyhledá výskyty substantiva //[[wp>yak|jak]]// (zástupce turů) | | | **ampersand** | ''&'' | a zároveň (AND) | platí všechny podmínky zároveň | ''[lemma=<nowiki>"</nowiki>jak<nowiki>"</nowiki> & pos=<nowiki>"</nowiki>N<nowiki>"</nowiki>]'' | vyhledá výskyty substantiva //[[https://cs.wikipedia.org/wiki/Jak_domác%C3%AD|jak]]// (zástupce turů) | |
| **vykřičník** | ''!'' | negace (NOT) | neguje následující výraz | ''%%[lemma="stát" & pos!="N"]%%'' | vyhledá výskyty **ne**substantivního (tedy slovesného) lemmatu //stát// | | | **vykřičník** | ''!'' | negace (NOT) | neguje následující výraz | ''%%[lemma="stát" & pos!="N"]%%'' | vyhledá výskyty **ne**substantivního (tedy slovesného) lemmatu //stát// | |
| **svislá čára** | ''|'' | nebo (OR) | alespoň jedna možnost platí | ''[lemma=<nowiki>"</nowiki>modrozelený<nowiki>"</nowiki> | lemma=<nowiki>"</nowiki>zelenomodrý<nowiki>"</nowiki>]'' | vyhledá výskyty lemmat //modrozelený// a //zelenomodrý// | | | **svislá čára** | ''|'' | nebo (OR) | alespoň jedna možnost platí | ''[lemma=<nowiki>"</nowiki>modrozelený<nowiki>"</nowiki> | lemma=<nowiki>"</nowiki>zelenomodrý<nowiki>"</nowiki>]'' | vyhledá výskyty lemmat //modrozelený// a //zelenomodrý// | |
| |
===== Posloupnost pozic ===== | ===== Posloupnost pozic ===== |
| |
Jedny hranaté závorky s atributem a jeho hodnotou odpovídají v CQL jedné pozici v textu. Pokud za sebou v CQL zapíšeme dvoje hranaté závorky za sebou, vyhledají se (samozřejmě podle zadaných podmínek) dvě pozice v textu bezprostředně následující za sebou. Můžeme například vyhledat spojení //zelené jablko//, a to prostřednictvím dotazu ''[word=<nowiki>"</nowiki>zelené<nowiki>"</nowiki>][word=<nowiki>"</nowiki>jablko<nowiki>"</nowiki>]''. Podobně můžeme vyhledat i větší množství slov následujících za sebou v textu, např. dotaz ''[lemma=<nowiki>"</nowiki>od<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>ráno<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>do<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>večer<nowiki>"</nowiki>]'' v korpusu [[cnk:syn2015|SYN2015]] vyhledá [[https://kontext.korpus.cz/view?q=~RfkXq3PT&attr_allpos=kw&attrs=word&corpname=syn2015&ctxattrs=word&pagesize=30&refs=%3Ddoc.title&structs=s&viewmode=kwic&|399 výskytů]] fráze //od/Od rána do večera//, dotaz ''[lemma=<nowiki>"</nowiki>rozhodnout<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>se<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>,<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>že<nowiki>"</nowiki>]'' téměř [[https://kontext.korpus.cz/view?q=~EOlDKJmd&attr_allpos=kw&attrs=word&corpname=syn2015&ctxattrs=word&pagesize=30&refs=%3Ddoc.title&structs=s&viewmode=kwic&|tisíc výskytů]] spojení slov //rozhodnout se, že// v různých tvarech. Atributy v jednotlivých pozicích se samozřejmě můžou lišit, např. dotaz ''[pos=<nowiki>"</nowiki>V<nowiki>"</nowiki>][word=<nowiki>"</nowiki>,<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>že<nowiki>"</nowiki>]'' vyhledá slovesa, která předcházejí spojce //že//. | Jedny hranaté závorky s atributem a jeho hodnotou odpovídají v CQL jedné pozici v textu. Pokud za sebou v CQL zapíšeme dvoje hranaté závorky za sebou, vyhledají se (samozřejmě podle zadaných podmínek) dvě pozice v textu bezprostředně následující za sebou. Můžeme například vyhledat spojení //zelené jablko//, a to prostřednictvím dotazu ''[word=<nowiki>"</nowiki>zelené<nowiki>"</nowiki>][word=<nowiki>"</nowiki>jablko<nowiki>"</nowiki>]''. Podobně můžeme vyhledat i větší množství slov následujících za sebou v textu, např. dotaz ''[lemma=<nowiki>"</nowiki>od<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>ráno<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>do<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>večer<nowiki>"</nowiki>]'' v korpusu [[cnk:syn2020|SYN2020]] vyhledá [[https://www.korpus.cz/kontext/view?maincorp=syn2020&viewmode=kwic&pagesize=40&attrs=word%2Clemma%2Ctag%2Cverbtag&attr_vmode=mouseover&base_viewattr=word&structs=s&refs=%3Ddoc.title&q=~00EyK46kk0kc|415 výskytů]] fráze //od/Od rána do večera//, dotaz ''[lemma=<nowiki>"</nowiki>rozhodnout<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>se<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>,<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>že<nowiki>"</nowiki>]'' [[https://www.korpus.cz/kontext/view?maincorp=syn2020&viewmode=kwic&pagesize=40&attrs=word%2Clemma%2Ctag%2Cverbtag&attr_vmode=mouseover&base_viewattr=word&structs=s&refs=%3Ddoc.title&q=~Tq24E8MC8GQW|přes 1100 výskytů]] spojení slov //rozhodnout se, že// v různých tvarech. Atributy v jednotlivých pozicích se samozřejmě můžou lišit, např. dotaz ''[pos=<nowiki>"</nowiki>V<nowiki>"</nowiki>][word=<nowiki>"</nowiki>,<nowiki>"</nowiki>][lemma=<nowiki>"</nowiki>že<nowiki>"</nowiki>]'' vyhledá slovesa, která předcházejí spojce //že//. |
| |
Nyní si ukážeme počítání pozic **včetně interpunkce** (i ta tvoří v korpusech samostatné pozice) ještě na konkrétním dotazu, v němž jde o publicistické užití a aktualizace přísloví //vlk se nažral a koza zůstala celá//: | Nyní si ukážeme počítání pozic **včetně interpunkce** (i ta tvoří v korpusech samostatné pozice) ještě na konkrétním dotazu, v němž jde o publicistické užití a aktualizace přísloví //vlk se nažral a koza zůstala celá//: |
| |
<WRAP round help 50%> | <WRAP round help 50%> |
* Vyberte korpus [[cnk:syn2009pub|SYN2009PUB]], typ dotazu **CQL** | * Vyberte korpus [[cnk:syn2009pub|SYN2009PUB]], přepněte na pokročilý dotaz |
* Zadejte dotaz: ''[lemma=<nowiki>"</nowiki>vlk<nowiki>"</nowiki>][]{1,5}[lemma=<nowiki>"</nowiki>koza<nowiki>"</nowiki>][]{1,3}[lemma=<nowiki>"</nowiki>celý<nowiki>"</nowiki>]''\\ Pro konstrukci dotazu jsme použili jednak CQL dotazy se specifikovanou hodnotou, tak libovolné pozice ''[]'', které se opakují (intervalový zápis pomocí složených závorek ''{1,5}'') | * Zadejte dotaz: ''[lemma=<nowiki>"</nowiki>vlk<nowiki>"</nowiki>][]{1,5}[lemma=<nowiki>"</nowiki>koza<nowiki>"</nowiki>][]{1,3}[lemma=<nowiki>"</nowiki>celý<nowiki>"</nowiki>]''\\ Pro konstrukci dotazu jsme použili jednak CQL dotazy se specifikovanou hodnotou, tak libovolné pozice ''[]'', které se opakují (intervalový zápis pomocí složených závorek ''{1,5}'') |
* Z 287 výsledků vyberte aktualizace daného frazému, např. //Kavčí hory dumají, kterak vlka státotvorné povinnosti nakrmit, aby koza divákova zájmu zůstala celá.// | * Z 287 výsledků vyberte aktualizace daného frazému, např. //Kavčí hory dumají, kterak vlka státotvorné povinnosti nakrmit, aby koza divákova zájmu zůstala celá.// |
</WRAP> | </WRAP> |
| |
Jak může vypadat podrobný rozpis pozic v jedné realizaci dotazu ''<fc #FF00FF>[lemma=<nowiki>"</nowiki>vlk<nowiki>"</nowiki>]</fc>[]{1,5}<fc #008000>[lemma=<nowiki>"</nowiki>koza<nowiki>"</nowiki>]</fc>[]{1,3}<fc #800000>[lemma=<nowiki>"</nowiki>celý<nowiki>"</nowiki>]</fc>'': | Jak může vypadat podrobný rozpis pozic v jedné realizaci dotazu ''<fc #FF00FF>[lemma=<nowiki>"</nowiki>vlk<nowiki>"</nowiki>]</fc>[]{1,5}<fc #008000>[lemma=<nowiki>"</nowiki>koza<nowiki>"</nowiki>]</fc>[]{1,3}<fc #800000>[lemma=<nowiki>"</nowiki>celý<nowiki>"</nowiki>]</fc>''shrnuje následující tabulka. Číselný údaj odkazující k jednotlivým pozicím se může měnit v závislosti na tom, zda pozici nula přiřadíme pravému či levému okraji KWICu. |
| |
^ slovní tvar | kterak | <fc #FF00FF>vlka</fc> | státotvorné | povinnosti | nakrmit | , | aby | <fc #008000>koza</fc> | divákova | zájmu | zůstala | <fc #800000>celá</fc> | . | | ^ slovní tvar | kterak | <fc #FF00FF>vlka</fc> | státotvorné | povinnosti | nakrmit | , | aby | <fc #008000>koza</fc> | divákova | zájmu | zůstala | <fc #800000>celá</fc> | . | |
^ pozice od začátku (levé strany) KWICu | 1L | <fc #FF00FF>0</fc> | 1P | 2P | 3P | 4P | 5P | <fc #008000>6P</fc> | 7P | 8P | 9P | <fc #800000>10P</fc> | 11P | | ^ pozice od začátku (levé strany) KWICu | 1L | <fc #FF00FF>0</fc> | 1P | 2P | 3P | 4P | 5P | <fc #008000>6P</fc> | 7P | 8P | 9P | <fc #800000>10P</fc> | 11P | |
| ^ pozice od začátku (pravé strany) KWICu | 11L | <fc #FF00FF>10L</fc> | 9L | 8L | 7L | 6L | 5L | <fc #008000>4L</fc> | 3L | 2L | 1L | <fc #800000>0</fc> | 1P | |
^ | levý kontext | KWIC ||||||||||| pravý kontext | | ^ | levý kontext | KWIC ||||||||||| pravý kontext | |
| |
<WRAP round important 60%> | <WRAP round important 60%> |
Pozor: KWIC je vše, co je v dotazu specifikováno, tedy od levé strany, kde je lemma //vlk//, až po stranu pravou, kde je lemma //celý//. Také proto se celá struktura zobrazí červeně. | KWIC je vše, co je v dotazu specifikováno, tedy od levé strany, kde je lemma //vlk//, až po stranu pravou, kde je lemma //celý//. Také proto se celá struktura zobrazí červeně. |
</WRAP> | </WRAP> |
| |
Vidíme, že //vlka// a //kozu// dělí přesně 5 pozic (což je maximum umožněné naším dotazem), a stejně tak byl maximální rozptyl uplatněn i mezi lemmaty //koza// a //celý//. | Vidíme, že //vlka// a //kozu// dělí přesně 5 pozic (což je maximum umožněné naším dotazem), a stejně tak byl maximální rozptyl uplatněn i mezi lemmaty //koza// a //celý//. |
| |
A abyste nemohli říkat: "Vlk slibů, že tento kurz bude podrobný, se nažral, a koza zatajování znalostí zůstala celá", zkusíme si společně ještě právě obměnění počtu pozic v dotazu -- otázkou je, jestli už náhodou nedostaneme takové doklady, které nebudou obměněním zkoumaného přísloví: | A abyste nemohli říkat: "Vlk slibů, že tento kurz bude podrobný, se nažral, a koza zatajování znalostí zůstala celá", zkusme si společně ještě rozšířit počet pozic v dotazu -- otázkou je, jestli už náhodou nedostaneme takové doklady, které nebudou obměnou zkoumaného přísloví: |
| |
''<fc #FF00FF>[lemma=<nowiki>"</nowiki>vlk<nowiki>"</nowiki>]</fc>[]{1,7}<fc #008000>[lemma=<nowiki>"</nowiki>koza<nowiki>"</nowiki>]</fc>[]{1,5}<fc #800000>[lemma=<nowiki>"</nowiki>celý<nowiki>"</nowiki>]</fc>'' | ''<fc #FF00FF>[lemma=<nowiki>"</nowiki>vlk<nowiki>"</nowiki>]</fc>[]{1,7}<fc #008000>[lemma=<nowiki>"</nowiki>koza<nowiki>"</nowiki>]</fc>[]{1,5}<fc #800000>[lemma=<nowiki>"</nowiki>celý<nowiki>"</nowiki>]</fc>'' |
Další možností je počet pozic nijak přesně nespecifikovat: ''[lemma=<nowiki>"</nowiki>vlk<nowiki>"</nowiki>][]+[lemma=<nowiki>"</nowiki>koza<nowiki>"</nowiki>][]+[lemma=<nowiki>"</nowiki>celý<nowiki>"</nowiki>]''. Výsledků je 383, některé jsou pro náš výzkum zcela nepodstatné (//<fc #FF00FF>vlky</fc> nechali postřílet //[...]// pastevci se zase strachují o své ovce a <fc #008000>kozy</fc>. "Komplex Červené Karkulky je evidentní – lidé z vlků mají strach. Přitom jsou v <fc #800000>celé</fc>// [...]//"//), jiné se výrazně liší od výchozího výrazu, ale můžeme se rozhodnout je do výzkumu zahrnout. | Další možností je počet pozic nijak přesně nespecifikovat: ''[lemma=<nowiki>"</nowiki>vlk<nowiki>"</nowiki>][]+[lemma=<nowiki>"</nowiki>koza<nowiki>"</nowiki>][]+[lemma=<nowiki>"</nowiki>celý<nowiki>"</nowiki>]''. Výsledků je 383, některé jsou pro náš výzkum zcela nepodstatné (//<fc #FF00FF>vlky</fc> nechali postřílet //[...]// pastevci se zase strachují o své ovce a <fc #008000>kozy</fc>. "Komplex Červené Karkulky je evidentní – lidé z vlků mají strach. Přitom jsou v <fc #800000>celé</fc>// [...]//"//), jiné se výrazně liší od výchozího výrazu, ale můžeme se rozhodnout je do výzkumu zahrnout. |
| |
Na tomto příkladu jsme si ukázali, že na dobře specifikovaných pozicích záleží. Na vás pak je, jaký typ specifikace budete potřebovat. | |
===== Velikost písmen v CQL ===== | ===== Velikost písmen v CQL ===== |
| |
| ''</s>'' | konec věty | Jaké typy vět končí sekvencí tří interpunkčních pozic? | ''%%[pos="Z"]{3}%% </s> '' | Po přihlášení si výsledky [[https://kontext.korpus.cz/view?q=~H1uP3zbS&attr_allpos=kw&attrs=word&corpname=syn2015&ctxattrs=word&pagesize=30&refs=%3Ddoc.title&structs=s&viewmode=kwic&|ověřte sami]] | | | ''</s>'' | konec věty | Jaké typy vět končí sekvencí tří interpunkčních pozic? | ''%%[pos="Z"]{3}%% </s> '' | Po přihlášení si výsledky [[https://kontext.korpus.cz/view?q=~H1uP3zbS&attr_allpos=kw&attrs=word&corpname=syn2015&ctxattrs=word&pagesize=30&refs=%3Ddoc.title&structs=s&viewmode=kwic&|ověřte sami]] | |
| |
A jak hledat v rámci jedné věty? Existují dvě cesty. Buď položíme dotaz pomocí ''[[pojmy:within|within]]'' ("v rámci, uvnitř"), nebo za pomoci výrazu ''[[pojmy:containing|containing]]'' ("obsahuje"). Oba příkazy umožňují využívat informace ze strukturních atributů v rámci CQL dotazu a mají následující obecnou podobu: | Chceme-li hledat v rámci jedné věty, máme dvě možnosti. Buď položíme dotaz pomocí ''[[pojmy:within|within]]'' ("v rámci, uvnitř"), nebo za pomoci výrazu ''[[pojmy:containing|containing]]'' ("obsahuje"). Oba příkazy umožňují využívat informace ze strukturních atributů v rámci CQL dotazu a mají následující obecnou podobu: |
| |
''DOTAZ within STRUKTURA'' | ''DOTAZ within STRUKTURA'' |
| |
<WRAP round important 40%> | <WRAP round important 40%> |
Pozor, konec věty ''</s>'' má velmi podobnou značku jako její obsah ''<s/>''. | Konec věty ''</s>'' má velmi podobnou značku jako její obsah ''<s/>''. |
</WRAP> | </WRAP> |
| |
| |
^ značka ^ význam ^ výzkumná otázka ^ příklad dotazu ^ výsledek pro SYN2015 ^ | ^ příkaz ^ výzkumná otázka ^ příklad dotazu ^ výsledek pro SYN2015 ^ |
| ''within <s/>'' | celá věta | Jaké věty obsahují zároveň citoslovce a slovesa (v libovolném pořadí)? | ''[tag=%%"I.*"][]*[tag="V.*"]|[tag="V.*"][]*[tag="I.*"%%] within <s/>'' | Např.: //Hele, já vím, jaký to je.// nebo //Sakra, někdo tam je!// | | | ''within <s/>'' | Jaké věty obsahují zároveň citoslovce a slovesa (v libovolném pořadí)? | ''[tag=%%"I.*"][]*[tag="V.*"]|[tag="V.*"][]*[tag="I.*"%%] within <s/>'' | Např.: //Hele, já vím, jaký to je.// nebo //Sakra, někdo tam je!// | |
| ''<s/> containing'' | celá věta | Jaké věty obsahují posloupnost čtyř substantiv? | ''<s/> containing %%[tag="N.*"]%%{4}'' | Např.: //Oběžník vyvolá v Oddělení verifikace faktů pobavení.// | | | ''<s/> containing'' | Jaké věty obsahují posloupnost čtyř substantiv? | ''<s/> containing %%[tag="N.*"]%%{4}'' | Např.: //Oběžník vyvolá v Oddělení verifikace faktů pobavení.// | |
| |
Rozdíl mezi příkazy ''within'' a ''containing'' je pouze v podobě [[pojmy:kwic|KWICu]]. Vyhodnocení dotazu s příkazem ''within'' označí za KWIC pouze specifikovanou sekvenci (např. sloveso, citoslovce a vše mezi nimi), kdežto dotaz s příkazem ''containing'' označí za KWIC celou strukturu (v našem případě větu), která odpovídá specifikované podmínce. | Rozdíl mezi příkazy ''within'' a ''containing'' je pouze v podobě [[pojmy:kwic|KWICu]]. Vyhodnocení dotazu s příkazem ''within'' označí za KWIC pouze specifikovanou sekvenci (např. sloveso, citoslovce a vše mezi nimi), kdežto dotaz s příkazem ''containing'' označí za KWIC celou strukturu (v našem případě větu), která odpovídá specifikované podmínce. |
==== Automaticky vložená podmínka within ==== | ==== Automaticky vložená podmínka within ==== |
| |
[[kurz:kontext|Rozhraní KonText]] uživatelům umožňuje vložit do CQL dotazu formulář podmínky pomocí klikatelné nabídky. V rámci jedné věty lze díky tomu vyhledávat i pomocí automaticky vložené podmínky ''within <s id=%%".*"%%/>'' (lze interpretovat takto: hledej v rámci jedné //libovolné// věty). | Rozhraní KonText uživatelům umožňuje vložit do CQL dotazu formulář podmínky pomocí klikatelné nabídky. V rámci jedné věty lze díky tomu vyhledávat i pomocí automaticky vložené podmínky ''within <s id=%%".*"%%/>'' (lze interpretovat takto: hledej v rámci jedné //libovolné// věty). |
| |
[{{:kurz:vetybezsloves.png?400|Within vkládané přímo v rozhraní KonText}}] | [{{:kurz:vetybezsloves.png?direct&500|Within vkládané přímo v rozhraní KonText }}] |
| |
===== Shoda (a neshoda) atributů ===== | ===== Shoda (a neshoda) atributů ===== |
| |
V CQL lze využít také dotaz na shodu či neshodu atributů dvou či více tokenů. Nejprve musíme označit pozice, u kterých chceme shodu testovat, uvedením čísla a dvojtečky v dotazu před hranatou závorku (např. %%1:[pos="N"] [word="a"] 2:[pos="N"]%%). Shodu pak testujeme za znakem **&** uvedením číselné identifikace pozice, tečky a názvu atributu, který se má shodovat, například takto: %%& 1.lemma = 2.lemma%% (lemma tokenu s číslem 1 je stejné jako lemma tokenu označeného číslem 2). Dotaz '' %%1:[pos="N"] [word="a"] 2:[pos="N"] & 1.lemma = 2.lemma%% '' tedy najde dvě substantiva se stejným lemmatem, mezi nimiž stojí slovo //a//. | V CQL lze využít také dotaz na shodu či neshodu atributů dvou nebo více tokenů; jejich hodnoty přitom nemusejí být jinak stanoveny. Je však nejprve potřeba označit pozice, u kterých chceme shodu testovat, a to uvedením čísla a **dvojtečky** v dotazu před hranatou závorku. Například dotazem '' %%1:[pos="N"] [word="a"] 2:[pos="N"]%% '' hledáme sekvenci třÍ tokenů, z nichž první je substantivum označené jako <fc #ff0000>1</fc>, následuje slovní tvar //a// a po něm další substantivum označené jako <fc #ff0000>2</fc>. Shodu pak testujeme jako součást tzv. globální podmínky uvedené za znakem **&**, která je vždy až na konci celého dotazu. Samotný test shody se skládá z číselného odkazu na označenou pozici, **tečky** a názvu atributu, který se má shodovat, např. takto: |
| |
Chceme-li najít po sobě následující adjektivum a substantivum, jež se shodují v pádě, zadáme dotaz:\\ | '' %%1:[pos="N"] [word="a"] 2:[pos="N"] & 1.lemma = 2.lemma%% '' najde sekvenci substantivum, slovní tvar //a// a substantivum, přičemž lemmata obou substantiv jsou shodná. |
'' %%1:[pos="A"] 2:[pos="N"] & 1.case = 2.case%% ''. | |
| |
Neshodu lze testovat stejným způsobem, jen místo rovnítka %%(=)%% použijeme vykřičník a rovnítko %%(!=)%%, například takto:\\ | Chceme-li najít po sobě následující adjektivum a substantivum, které se shodují v pádě, zadáme dotaz:\\ |
'' %%1:[pos="N"] [word="a"] 2:[pos="N"] & 1.case != 2.case%% '' (dotaz najde dvě substantiva oddělená slovem //a//, která se neshodují v pádě). | '' %%1:[pos="A"] 2:[pos="N"] & 1.case = 2.case%% '' |
| |
Podmínky lze i kombinovat, tj. uvést jich více, oddělené znakem **&**, například takto:\\ | Analogicky lze testovat neshodu, jen místo rovnítka %%(=)%% použijeme vykřičník a rovnítko %%(!=)%%, například takto:\\ |
| '' %%1:[pos="N"] [word="a"] 2:[pos="N"] & 1.case != 2.case%% '' (dotaz najde dvě substantiva oddělená slovem //a//, která se **ne**shodují v pádě). |
| |
| Podmínky lze také kombinovat, tj. uvést jich více oddělených znakem &:\\ |
'' %%1:[pos="N"] 2:[pos="A"] 3:[pos="N"] & 1.case = 2.case & 2.case != 3.case%% '' (najde sekvenci substantivum - adjektivum - substantivum, ve které se adjektivum shoduje v pádě s prvním substantivem, ale ne s druhým). | '' %%1:[pos="N"] 2:[pos="A"] 3:[pos="N"] & 1.case = 2.case & 2.case != 3.case%% '' (najde sekvenci substantivum - adjektivum - substantivum, ve které se adjektivum shoduje v pádě s prvním substantivem, ale ne s druhým). |
| |
Podmínky lze aplikovat pouze na celé atributy, ne na jejich části, lze tak ověřovat například shodu forem, lemmat, morfologických tagů, slovního druhu nebo pádu, ne však třeba rodu a čísla (které nemají samostatný atribut). | <WRAP round important 60%> |
| Podmínky lze aplikovat pouze na celé atributy, ne na jejich části. Lze tak ověřovat shodu či neshodu celých slovních tvarů, lemmat nebo morfologických značek, ne však už například shodu v rodě nebo čísle (nemají-li samostatný atribut). |
| |
| </WRAP> |
| |
===== Vyzkoušejte si na závěr ===== | ===== Vyzkoušejte si na závěr ===== |
| |
Byla tato lekce náročná? Doufejme, že platí //těžko na cvičišti kurzu, lehko na bojišti praxe//. Nebo se nic podobného neříká? | Pravda, tato lekce byla poněkud náročná, doufejme však, že platí //těžko na cvičišti kurzu, lehko na bojišti praxe//. Nebo se nic podobného neříká? |
| |
<WRAP round help 60%> | <WRAP round help 60%> |
* Zkuste zformulovat dotaz, jímž ověříte ne/existující aktualizace přísloví //těžko na cvičišti, lehko na bojišti// v korpusech [[cnk:syn2015|SYN2015]] a [[cnk:syn2013pub|SYN2013PUB]]. | * Zkuste zformulovat dotaz, jímž ověříte ne/existující aktualizace přísloví //těžko na cvičišti, lehko na bojišti// v korpusech [[cnk:syn2015|SYN2015]] a [[cnk:syn2013pub|SYN2013PUB]]. |
* A z jiného soudku: zaujaly vás někdy nadávky odvozené od německého //Herr Gott// jako např. //hergot//, //herdek// či //hernajs//? Vyhledejte co nejvíc takovýchto odvozenin v korpusu [[cnk:oral2013|ORAL2013]] a zjistěte, zda se jejich užití liší podle regionů. | * A z jiného soudku: Nadávek odvozených od německého //Herr Gott// je nemálo (např. //hergot//, //herdek//, //hernajs// a jistě vymyslíte další). Vyhledejte co nejvíc takovýchto odvozenin v korpusu [[cnk:oral2013|ORAL2013]] a zjistěte, zda se jejich užití liší podle regionů. |
| |
Řešení naleznete opět na [[reseni_ukolu#lekce_5|zvláštní stránce]]. | Řešení naleznete opět na [[reseni_ukolu#lekce_5|zvláštní stránce]]. |