# väga aeglane kood! library(reticulate) library(tidyverse) library(xml2) # setwd(choose.dir()) # suuline_keel_arvudes/muutuv_keel/teke source_python("silbita.py") # setwd(choose.dir()) # failid failid <- list.files(pattern = ".*eaf") koond <- readxl::read_excel("~/TeKE/uued_koondandmed.xlsx", sheet = 1) df <- data.frame(fail = character(), faili_kogukestus_ms = numeric(), koneleja = character(), vanus = numeric(), vanus_kysimustik = numeric(), sugu = character(), vooru_id = character(), sõnade_arv = numeric(), eng_sõnade_arv = numeric(), silpide_arv = numeric(), algus = numeric(), lõpp = numeric(), kestus_ms = numeric(), pauside_arv = numeric(), poolikute_arv = numeric(), venituste_arv = numeric(), korduste_arv = numeric()) for(f in failid){ cat(f, "\n") fail <- read_xml(f) fail %>% xml_find_all(., "TIME_ORDER") %>% xml_children() -> timeslots # faili kestus xml_attr(timeslots, "TIME_VALUE") %>% as.numeric() -> times max(times)-min(times) -> kogukestus_ms fail %>% xml_find_all(., "//TIER") %>% .[grepl("ref", xml_attr(., "TIER_ID"))] -> refid fail %>% xml_find_all(., "//TIER") %>% .[grepl("orto", xml_attr(., "TIER_ID"))] -> voorud xml_attr(voorud, "TIER_ID") %>% gsub("orto@(.*)$", "\\1", .) -> ids for(id in ids){ cat(id, "\n") #id <- ids[1] if(!grepl("muu", id)){ koond[koond$fail == gsub("^(.*?)\\.eaf$", "\\1", f) & koond$osaleja_kood == as.numeric(id),]$osaleja_sugu -> sugu koond[koond$fail == gsub("^(.*?)\\.eaf$", "\\1", f) & koond$osaleja_kood == as.numeric(id),]$osaleja_vanus_alg -> vanus koond[koond$fail == gsub("^(.*?)\\.eaf$", "\\1", f) & koond$osaleja_kood == as.numeric(id),]$osaleja_vanus_kysimustik -> vanus_kysimustik }else{ sugu <- NA vanus <- NA vanus_kysimustik <- NA } voorud %>% .[grepl(id, xml_attr(., "TIER_ID"))] %>% xml_find_all(., ".//REF_ANNOTATION") -> tmpvoorud for(v in tmpvoorud){ v %>% xml_attr(., "ANNOTATION_ID") -> tmpannid v %>% xml_attr(., "ANNOTATION_REF") -> tmprefid refid %>% xml_find_all(., ".//ALIGNABLE_ANNOTATION") %>% .[xml_attr(., "ANNOTATION_ID") == tmprefid] -> tmpref tmpref %>% xml_attr(., "TIME_SLOT_REF1") -> time1id tmpref %>% xml_attr(., "TIME_SLOT_REF2") -> time2id timeslots %>% .[xml_attr(., "TIME_SLOT_ID") == time1id] %>% xml_attr(., "TIME_VALUE") %>% as.numeric() -> begintime timeslots %>% .[xml_attr(., "TIME_SLOT_ID") == time2id] %>% xml_attr(., "TIME_VALUE") %>% as.numeric() -> endtime duration <- endtime-begintime v %>% xml_text() %>% strsplit(., " ") %>% unlist() -> sonad_raw # pausid sonad_raw %>% .[. %in% c("(.)", "(...)")] %>% length() -> pauside_arv # võõrkeelsed sonad_raw %>% grep("\\[_", ., value = T) %>% gsub("^.*?\\[_(.*)_\\].*$", "\\1", .) %>% strsplit(., "_") %>% unlist() %>% length() -> eng_sonade_arv sonad_raw %>% .[!. %in% c("(.)", "(...)", "(-)", "(---)")] %>% # jäta välja pausid ja arusaamatu tekst grep("^%.*%$", ., value = T, invert = T) %>% # jäta välja naer ja imiteerimised gsub("[()]", "", .) %>% # kustuta sulud gsub("@", "", .) %>% # kustuta naerumärgid gsub("^(.*?)\\[.*$", "\\1", .) %>% # jäta alles ainult häälduspärased vormid strsplit(., "_") %>% # lõika fraasid eraldi sõnadeks unlist() %>% grep("^$", ., value = T, invert = T) -> sonad_raw2 # poolikud sonad_raw2 %>% grep("^.*-$", ., value = T) %>% length() -> lopupoolik sonad_raw2 %>% grep("^-.*[^-]$", ., value = T) %>% length() -> alguspoolik lopupoolik + alguspoolik -> poolikute_arv # venitused sonad_raw2 %>% strsplit(., "") %>% unlist() %>% grep(":", ., value = T) %>% length() -> venituste_arv # kustuta venitused sonad_raw2 %>% gsub(":", "", .) -> vec # kordused kordused <- vector() if(length(vec) > 1){ for(p in 1:(length(vec)-1)){if(vec[p] == vec[p+1]){kordused <- append(kordused, TRUE)}} } length(kordused) -> korduste_arv # sõnad vec %>% length() -> sonade_arv # silbid if(sonade_arv > 0){ silbita(vec) -> silbitus if(sonade_arv > 1){ lapply(silbitus, function(x) lapply(x, function(y) y[[1]])) %>% unlist() -> silbid }else{ lapply(silbitus, function(x) x$syllable) %>% unlist() -> silbid } silbid %>% .[. != "-"] %>% length() -> silpide_arv }else{ silpide_arv <- 0 } df <- rbind(df, data.frame(fail = f, faili_kogukestus_ms = kogukestus_ms, koneleja = id, vanus = vanus, vanus_kysimustik = vanus_kysimustik, sugu = sugu, vooru_id = tmpannid, sõnade_arv = sonade_arv, eng_sõnade_arv = eng_sonade_arv, silpide_arv = silpide_arv, algus = begintime, lõpp = endtime, kestus_ms = duration, pauside_arv = pauside_arv, poolikute_arv = poolikute_arv, venituste_arv = venituste_arv, korduste_arv = korduste_arv)) } } } setwd("..") # sea õige töökataloog write.table(df, "teke_voorud.csv", sep = "\t", quote = F, row.names = F, fileEncoding = "UTF-8")