AplikaceAplikace
Nastavení

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verze
Předchozí verze
kurz:regularni_vyrazy [2021/03/09 22:59] – [Další speciální symboly] michalskrabalkurz:regularni_vyrazy [2024/10/07 11:18] (aktuální) – [Kategorie znaků unicodu] michalkren
Řádek 72: Řádek 72:
  
  
-[{{ :kurz:jestli-oral2013.png?nolink&direct&250|Frekvenční distribuce podob //jestli// v mluveném korpusu}}] +Možná si kladete otázku, jestli se regulární výrazy hodí i pro výzkum zásadnějších jevů než citoslovcí. Je dobré zdůraznit, že se bez nich neobejdeme např. při prohledávání [[pojmy:mluveny|mluvených korpusů]], které ne vždy bývají [[pojmy:lemma|lemmatizované]], obrovskou pomocí jsou ale i při vyhledávání v korpusech lemmatizovaných. 
-+
-Možná si kladete otázku, jestli se regulární výrazy hodí i pro výzkum zásadnějších jevů než citoslovcí. Je dobré zdůraznit, že se bez nich neobejdeme např. při prohledávání [[pojmy:mluveny|mluvených korpusů]], které převážně nejsou [[pojmy:lemma|lemmatizované]], obrovskou pomocí jsou ale i při vyhledávání v korpusech lemmatizovaných. +
  
 <WRAP round help 60%> <WRAP round help 60%>
-Zkuste v korpusu [[cnk:oral2013|ORAL2013]] nalézt co nejvíc různých podob výrazu //jestli//+Zkusme si jednom takovém nelematizovaném korpusu -- [[cnk:oral2013|ORAL2013]] -- najít co nejvíc různých podob výrazu //jestli//
-  - Zamyslete se nad tím, která písmena se při hovoru vynechávají, a lexém přesto zůstává srozumitelný.+  - Nejprve se zamyslete nad tím, která písmena se při hovoru vynechávají, a lexém přesto zůstává srozumitelný.
   - Zformulujte dotaz (drobná nápověda: vystačíte si pouze s písmeny a otazníky).   - Zformulujte dotaz (drobná nápověda: vystačíte si pouze s písmeny a otazníky).
   - Zobrazte si frekvenční distribuci.   - Zobrazte si frekvenční distribuci.
 </WRAP> </WRAP>
  
-Stejně jako u většiny úloh s regulárními výrazy i v tomto případě existuje více postupů, jak se dobrat ke stejnému výsledku. V každém případě nám může pomoct [[hledani_v_mluvenych_korpusech#jak_spravne_zadat_hledane_„slovo|vyhledávač variant v korpusech řady ORAL]]. Pro řešení této výzkumné otázky využijeme z regulárních výrazů nejvíc symbol ''?'', který pomůže specifikovat, které segmenty se ve slově nemusejí vždy vyskytovat.+Stejně jako u většiny úloh s regulárními výrazy i v tomto případě existuje více postupů, jak se dobrat ke stejnému výsledku. My jsme si vybrali ten využívající symbol ''?'', který specifikuje, které segmenty se ve slově **nemusejí** vždy vyskytovat. Zápis je takovýto: ''j?est?l?i'' (tzn. předpokládáme, že zredukovat lze hlásky //j//, //t// a //l//) a výsledek tento:
  
 +[{{:kurz:jestli-frekvence.png?direct&300|Frekvenční distribuce podob //jestli// v korpusu ORAL2013}}]
  
-Ve frekvenčním seznamu se ocitly dva překvapivé tvary: //jesti// a //esti//. Pomocí modře označeného **p** ([[manualy:kontext:frekvencni_distribuce#frekvencni_seznam_vypis|pozitivní filtr]]) ve frekvenčním seznamu můžeme hned zkontrolovat, zda jde o námi hledaný význam (v obou případech tomu tak je) a nakolik je použití tohoto konkrétního tvaru regionálně či jinak podmíněné (zdá se to být východomoravské specifikum -- 6 případů ze 7, respektive 8 z 9 spadá do této nářeční oblasti). FIXME+Ve frekvenčním seznamu se ocitly dva překvapivé tvary: //jesti// a //esti//. Pomocí modře označeného **p** ([[manualy:kontext:frekvencni_distribuce#frekvencni_seznam_vypis|pozitivní filtr]]) ve frekvenčním seznamu můžeme hned zkontrolovat, zda jde o námi hledaný význam (v obou případech tomu tak je) a nakolik je použití tohoto konkrétního tvaru regionálně či jinak podmíněné (zdá se to být východomoravské specifikum -- 6 případů ze 7, respektive 8 z 9 spadá do této nářeční oblasti).
  
 Více o specifikách hledání v mluvených korpusech najdete v [[kurz:hledani_v_mluvenych_korpusech|bonusové lekci]]. Více o specifikách hledání v mluvených korpusech najdete v [[kurz:hledani_v_mluvenych_korpusech|bonusové lekci]].
Řádek 111: Řádek 110:
  
 ^ regulární výraz ^ znaky ^ co zastupuje ^ další informace ^ ^ regulární výraz ^ znaky ^ co zastupuje ^ další informace ^
-| **seznam** | ''[ ]'' | alternativa, možnost výběru **jednoho** libovolného znaku ze znaků uvnitř hranatých závorek | v rámci seznamu je možné používat také pomlčku (''-'') jako operátor rozsahu (např. ''[a-z]'', ''[1-9]'') pro alfabetické znaky a číslice |+| **seznam** | ''[ ]'' | alternativa, možnost výběru **jednoho** libovolného znaku ze znaků uvnitř hranatých závorek | v rámci seznamu je možné používat také pomlčku (''-'') jako operátor rozsahu (např. ''[0-9]'') pro číslice |
 | **inverzní seznam** | ''[^ ]'' | výběr **jednoho** libovolného znaku **s výjimkou** znaků uvnitř hranatých závorek | pokud je prvním znakem seznamu stříška (''^''), jde o inverzní seznam: tedy jeden libovolný znak kromě těch uvedených uvnitř hranatých závorek | | **inverzní seznam** | ''[^ ]'' | výběr **jednoho** libovolného znaku **s výjimkou** znaků uvnitř hranatých závorek | pokud je prvním znakem seznamu stříška (''^''), jde o inverzní seznam: tedy jeden libovolný znak kromě těch uvedených uvnitř hranatých závorek |
 | **svislá čára** | ''|'' | alternativa, ovšem ne jenom mezi jednotlivými znaky, ale mezi řetězci tvořícími celek | kombinuje se často s kulatými závorkami, které pomáhají určit prioritu vyhodnocení | | **svislá čára** | ''|'' | alternativa, ovšem ne jenom mezi jednotlivými znaky, ale mezi řetězci tvořícími celek | kombinuje se často s kulatými závorkami, které pomáhají určit prioritu vyhodnocení |
Řádek 122: Řádek 121:
   - v rámci [[pojmy:cql|CQL]] představují samostatnou pozici, [[pokrocile_dotazy#hlavni_rysy_cql|viz příští lekce]].   - v rámci [[pojmy:cql|CQL]] představují samostatnou pozici, [[pokrocile_dotazy#hlavni_rysy_cql|viz příští lekce]].
 </WRAP> </WRAP>
 +
 +A opět pár příkladů s výsledky:
 +
 +^ Dotaz ^ Výsledek ^
 +|''b[iy]l.*''|všechna slova začínající na //bil// nebo //byl//|
 +|''b[^iy]l.*''|všechna slova nezačínající na na //bil// nebo //byl//, teda např. //bílý//, //bolest//, //bát// aj.|
 +|''za(ps|sp)ati?''|infinitivy //zapsat(i)// a //zaspat(i)//|
 +|''\.\!?''|sekvence interpunkčních znamének tečka vykřičník otazník|
 +|''[\.\!?]''|všechny tečky, vykřičníky a otazníky|
 +
 +==== Kategorie znaků unicodu ====
 +
 +Jednotlivé znaky v řetězci je také možné zastoupit pomocí definovaných [[https://en.wikipedia.org/wiki/Unicode_character_property#General_Category|kategorií znaků unicodu]]. Na pozici jednoho znaku se ve výrazu uvede šablona ''\p{  }'', v níž se mezi složené závorky uvede požadovaná kategorie. Pro vyhledávání v korpusu jsou patrně nejužitečnější kategorie velkých (''Lu'') a malých (''Ll'') písmen uvnitř nadřazené kategorie písmen (''L''). Např. zadání ''\p{Lu}'' tak vyhledá libovolné velké písmeno. Je ale také možné vyhledávat znaky všech typů závorek, uvozovek, interpunkci aj. Další kategorie jsou uvedeny např. [[https://www.regular-expressions.info/unicode.html|zde pod nadpisem Unicode Categories]]. 
 +
 +<WRAP round important 50%>
 +Upozornění: ''\p{Lu}'' **//není totéž//** co ''[A-Z]''. Zatímco unicodová kategorie pro velká písmena je obecně platná pro všechny jazyky a abecedy (a zahrnuje tedy např. "Á", "Ü" nebo "Ž"), znakové třídě ''[A-Z]'' odpovídá jen 26 velkých písmen anglické abecedy bez diakritických znamének (a tedy např. "Á", "Ü" nebo "Ž" nezahrnuje)! Důrazně proto doporučujeme vždy, když potřebujete pracovat s rozsahem písmen, používat unicodové kategorie.
 +</WRAP>
 +
 +Kategorie unicodu lze libovolně kombinovat s regulárními výrazy:
 +
 +^ Dotaz ^ Výsledek ^
 +| ''\p{Lu}.*'' | jakékoliv tvary obsahující počáteční velké písmeno |
 +| ''\p{Lu}+'' | tvary složené jen z velkých písmen (např. zkratky) |
 +| ''\p{Lu}\p{Ll}+'' | tvary s počátečním velkým písmenem a ostatními malými (např. propria nebo slova na začátku vět) |
 +| ''[^\p{L}]'' | jakýkoliv jeden nealfabetický znak (tj. nikoliv libovolné písmeno) |
 +| ''\p{L}.*[0-9].*'' | tvary začínající na písmeno a obsahující číslici |
 +
  
 === Příklad dotazu: Konkurence forem === === Příklad dotazu: Konkurence forem ===
Řádek 129: Řádek 155:
 </WRAP> </WRAP>
  
-Použili jsme dotaz ''vy.+(lý|ný)'' s výchozím atributem ''lemma|word'', slovní druh jsme omezili na přídavná jména. Celkem jsme dostali 105 373 případů, mezi nejčastějšími figurují slova //vyspělý// (2220), //vytrvalý// (1127), //vybledlý// (695) z první skupiny, z druhé pak //vybraný// (6390), //vyrovnaný// (3158), //vyrobený// (2760) a další+Použili jsme dotaz ''vy.+(lý|ný)'' s výchozím atributem ''lemma|word''. Celkem jsme dostali 105 373 případů, mezi nejčastějšími figurují slova //vyspělý// (2220), //vytrvalý// (1127), //vybledlý// (695) z první skupiny, z druhé pak //vybraný// (6390), //vyrovnaný// (3158), //vyrobený// (2760) a další.
- +
-S tímto dotazem úzce souvisí nástroj [[manualy:morfio|Morfio]], který slouží pro slovotvornou analýzu.+
  
 ===== Vyzkoušejte si na závěr ===== ===== Vyzkoušejte si na závěr =====
Řádek 137: Řádek 161:
 <WRAP round help 60%> <WRAP round help 60%>
 V korpusu [[cnk:syn2015|SYN2015]] najděte: V korpusu [[cnk:syn2015|SYN2015]] najděte:
-  - pomocí dotazu typu **Lemma** všechna slova, která obsahují sekvenci //kořen//, kterou následuje i předchází alespoň jeden znak (typicky předpona a přípona) +  - pomocí výchozího atributu **lemma** všechna slova, která obsahují sekvenci //kořen//, kterou následuje i předchází alespoň jeden znak (typicky předpona a přípona) 
-  - pomocí dotazu typu **Slovní tvar** všechny prefigované infinitivy odvozené od slovesa //téct/téci// +  - pomocí atributu **word** všechny prefigované infinitivy odvozené od slovesa //téct/téci// 
-  - všechny výskyty tvarů negativního superlativu, tj. tvary začínající na //nejne-// a končící na //-ší// nebo //-čí// (pro jednoduchost odhlédněme od jiných tvarů, než je nominativ singuláru)FIXME+  - všechny výskyty tvarů negativního superlativu, tj. tvary začínající na //nejne-// a končící na //-ší// nebo //-čí// (pro jednoduchost odhlédněme od jiných tvarů, než je nominativ singuláru)