Funkce \ Porozumění cizímu kódu

NPFL112
2020-02-24

Funkce (v R)

  • built-in functions: instalují se rovnou s R
  • knihovny s funkcemi:
    • jednou nainstalovat
    • při každém sezení připojit
  • vlastní funkce:
    • v kódu jednoho skriptu
    • ve zvláštním souboru, zavolat ze souboru se skriptem
  • repozitář oficiálních knihoven: CRAN https://cran.r-project.org/

Popis funkcí v nápovědě

tolower("ABC")
[1] "abc"
help("tolower")

nebo

?tolower

Nápověda se objeví v listu Help v pravém dolním okně

Nápověda k funkci - Vstupní argumenty

plot of chunk unnamed-chunk-4

v builtin balíčku base, spolu s funkcí chartr - jsou vysvětleny pohromadě

  • Argumenty požadované na vstupu: tolower chce znakový vektor nebo něco, z čeho si znakový vektor umí vytvořit sama.

Nápověda k funkci - Výstup z funkce

plot of chunk unnamed-chunk-5

Nápověda k funkci - Příklady

plot of chunk unnamed-chunk-6

Zrady nápovědy

  • Musíme znát konkrétní název funkce.
  • Nápověda zná vždy jen funkce knihoven, které jsou zrovna připojené.

Knihovny

  • Připojit knihovnu: library(název knihovny v uvozovkách nebo bez nich)
  • Nainstalovat knihovnu, když ji nemáme: install.packages(název)
  • V RStudiu panel Packages
  • Sledovat hlášky v konzoli (něco odsouhlasit)

Ještě k argumentům funkce

sample(x, size, replace=FALSE, prob=NULL)

my_sample <- 1:2
set.seed(885) #aby se nahodny generator cisel choval vzdy stejne 
sample(x = my_sample, size = 2)
[1] 2 1
sample(my_sample, 2)
[1] 1 2
sample(size = 2, x = my_sample) #musime pojmenovat,kdyz prehodime poradi
[1] 1 2
set.seed(8888)
sample(my_sample, 3, replace = TRUE) #bez nahrazeni nejde, vzorek je mensi
[1] 2 1 2
sample(my_sample, 10, replace = TRUE, prob = c(1,0))
 [1] 1 1 1 1 1 1 1 1 1 1
sample(my_sample, 10, replace = TRUE, prob = c(0.7,0.3))
 [1] 2 2 1 1 1 1 2 1 2 1

Jak se píše vlastní funkce

moje_funkce <- function(argumenty na vstupu) {
  tady nejaky kod
}

Funkce vygeneruje hromadnou vstupenku podle počtu lidí. Přednastavené hodnoty argumentů.

vytiskni_vstupenku <- function(pocet_osob = 1, cena = 100, 
                        sleva_proc = 50, 
                        od_kolika_osob = 4) {
  vyse_slevy <- 0
  cena <- cena
  if (pocet_osob >= od_kolika_osob) {
    vyse_slevy <- sleva_proc * 0.01 * cena
    cena <- cena - vyse_slevy
  } 
  cat("Festival KOKOKO", "\n", "Osob: ", pocet_osob, "\n", "Sleva Kč: ", vyse_slevy, "\n", "Cena po slevě Kč: ", cena)
}  
vytiskni_vstupenku() 
Festival KOKOKO 
 Osob:  1 
 Sleva Kč:  0 
 Cena po slevě Kč:  100
vytiskni_vstupenku(10, 1000)
Festival KOKOKO 
 Osob:  10 
 Sleva Kč:  500 
 Cena po slevě Kč:  500

Cizí kód: Zásoba cloze testů

caption

  • Koherentní textové úryvky
  • Co nejvíc výskytů předložek (tokens)
  • Co nejvíc různých předložek (types)
  • Automatické porovnání odpovědí s originálem

Požadovaný výstup

  • Excelová tabulka
  • Každé slovo na jednom řádku
  • Ke každému slovu slovní druh
  • Místo na studentovu odpověď
# A tibble: 212 x 2
   test     answer  
   <chr>    <chr>   
 1 Our      Our     
 2 captive  captive 
 3 sat      sat     
 4 ___      in      
 5 the      the     
 6 cabin    cabin   
 7 opposite opposite
 8 ___      to      
 9 the      the     
10 iron     iron    
# … with 202 more rows

Jak zjistíme ty slovní druhy? Natural Language Processing

  • určování hranic slov (tokenization)
  • morfologické značkování (morphological tagging)
  • určování slovníkových tvarů slov (lemmatisation)
  • syntaktické značkování (syntactic parsing)

Mnohojazyčný nástroj UDPipe

https://lindat.mff.cuni.cz/services/udpipe/

Input text

Phileas Fogg was a member of the Reform, and that was all. The way in which he got admission to this exclusive club was simple enough. He was recommended by the Barings, with whom he had an open credit. His cheques were regularly paid at sight from his account current, which was always flush. Was Phileas Fogg rich?

Universal Dependencies

https://universaldependencies.org

https://universaldependencies.org/guidelines.html

https://universaldependencies.org/u/pos/all.html

plot of chunk unnamed-chunk-13 Formát se nazývá conll-u. Je to plaintextová tabulka se zakomentovanými řádky.

Vizualizace závislostního stromu v grafickém rozhraní

Jak posoudím bohatství předložek v textech?

plot of chunk unnamed-chunk-14

plot of chunk unnamed-chunk-15

plot of chunk unnamed-chunk-16

  • masírování dat (wrangling)

    • výběr řádků/sloupců
    • agregace dat (souhrnné výpočty v nové tabulce)
    • přidávání řádků/sloupců
    • filtrování podle hodnot ve sloupcích
    • třídění řádků podle hodnot ve sloupcích
    • sdružování/rozdělování sloupců
    • kombinování různých tabulek podle společných sloupců (SQL-join)
  • vizualizace dat v diagramech (plotting)

    • estetické škály pro veličiny: osy XY, barva, tvar bodu/čáry, velikost
    • šablony obvyklých diagramů (bodový, krabicový, heatmap…)
    • vizuální gramatika pro kreativní tvorbu diagramů

Učitelův oblíbený korpus textů

Text v TEI

<celý_text><kapitola kolikátá="1"><nadpis>Jak to začalo</nadpis>

<odstavec>Byla jednou jedna babička. Ta měla vnučku.Další věta. Další věta. ...</odstavec> <odstavec>Říkalo se jí Červená Karkulka, podle červené čepičky. Další věta. Další věta. …</odstavec>

<kapitola kolikátá="2"> <nadpis>Jak to pokračovalo</nadpis>

<odstavec>Na Karkulku v lese číhal vlk. Další věta. Další věta. …</odstavec>

<odstavec> </odstavec> </kapitola> <kapitola kolikátá="3"> <nadpis>Jak to skončilo</nadpis> <odstavec>Myslivec vlkovi rozpáral břicho. Další věta. Další věta. …</odstavec>

<odstavec>A to je, milé děti, pohádky konec.</odstavec> </kapitola>

</celý_text>

Učitelův výběr pasáže

  • Co nejmíň elips a anafor: první odstavec v kapitole
  • V TEI vypreparujeme snadno pomocí dotazovacího jazyka pro XML

  • XPATH https://www.w3schools.com/xml/xpath_intro.asp

  • ptáme se na elementy, které jsou v daném vztahu k předchozímu elementu v dotazu

    • // - kdekoli pod vrcholem (na začátku dotazu)
    • / - jako potomek předchozího elementu
  • za určením polohy následuje název elementu (např. odstavec)

  • můžeme se klást podmínky, např. na hodnoty atributů elementu, když je element má: kapitola[@kolikátá=3] - chci element kapitola, který má v atributu kolikátá trojku.

  • XPATH má ještě mnoho dalších funkcí…

Dolování textu - není specifické pro R!

  • rozmyslet si, kde vezme texty
  • najít si vhodný korpus
    • bezplatný
    • strukturovaný
  • TEI
  • XPATH
  • otaggovat texty (UDPipe)
  • identifikovat užitečné tagy (UD - Universal Dependencies)

Specifické nástroje R

  • tidyverse (dplyr,tidyr, ggplot2, …)
  • XML
  • udpipe