Függelék Labádi Gergely "Géppel mért irodalom: a mikszáthi élőbeszédszerűség" című tanulmányához, mely megjelent a Digitális Bölcsészet folyóirat (2) 2019 számában. DOI: https://doi.org/10.31400/dh-hun.2019.2.390 A függelékben a tanulmányban használt R-scripteket adom meg, hogy bárki újrafuttathassa és elemezhesse az eredményeket, vagy saját céljaira használhassa. Én az RStudio nevű programot használtam. A scriptek előtt álló számok nem a kód részei, hanem a könnyebb követhetőséget szolgálják. Fájlok behívása Értelemszerűen a Jókai- és Mikszáth-novellákat külön dolgoztam fel, de a képletek ugyanazok, ezért a nevezéktanban nem teszek különbséget. 1. filenames <- list.files(path="~eleresiut", pattern="*.txt") 2. filelist <- lapply(filenames, function(x){read.csv2(x, header = FALSE, sep = "\t", stringsAsFactors = FALSE)}) Mondatszám Mivel a depparse-szal végzett elemzés esetében minden mondat minden elemet (szavak, írásjelek) megszámoz, ezért egész egyszerűen össze kell számolni az 1-eseket. 3. mondatszam.i <- sapply(filelist, function(df){dim(subset(df, V1==1))[1]}) Egyedi lemmák száma Depparse esetén a harmadik oszlop a lemmaoszlop. Írásjeltelenítjük, listátlanítjuk. Kivesszük a "c"-t, ami a listaformátum miatt kerül bele mindenhová az első helyre. Kiszámoltatjuk, mennyi lemma van az egyes szövegekben. Az integeres verzióval egyszerűbb számolni. 4. lemmak <- lapply(filelist, function(df){df["V3"]}) 5. csaklemmak <- lapply(lemmak, function(x){strsplit(as.character(x), "(\\W+)")}) 6. csaklemmak <- lapply(csaklemmak, function(x){unlist(x)}) 7. csaklemmak <- lapply(1:length(csaklemmak), function(x) csaklemmak[[x][csaklemmak[[x]] !="c"]) 8a. egyedi.szoszam <- sapply(1:length(csaklemmak), function(x) unique(unlist(csaklemmak[[x]]))) 8b. egyedi.szoszam.i <- sapply(1:length(egyedi.szoszam), function(x) length(egyedi.szoszam[[x]])) Betűszám Ezt értelemszerűen a tényleges szavakból, szóalakokból kell számolni. 9. szavak = lapply(filelist, function(df){df["V2"]}) 10. szoalakok <- lapply(szavak, function(x){strsplit(as.character(x), "(\\W+)")}) 11. szoalakok <- lapply(szoalakok, function(x){unlist(x)}) 12. szoalakok <- lapply(1:length(szoalakok), function(x) szoalakok[[x]][szoalakok[[x]] != "c"]) 13. szoalakok.i <- sapply(1:length(szoalakok), function(x) length(szoalakok[[x]])) 14. betuszam.i <- sapply(1:length(szoalakok), function(x) nchar(szoalakok[[x]])) Átlagos szóhossz Hány betűből áll egy szó átlagban. 15. szohossz <- sapply(1:length(csakszavak), function(x) mean(nchar(szoalakok[[x]]))) Átlagos mondathossz Hány szóból áll, hány betűből áll egy mondat. 16. mondathossz <- egyedi.szoszam.i/mondatszam.i 17. mondathossz2 <- mondathossz*szohossz Igék száma 18. igeszam.i <- sapply(filelist, function(df){dim(subset(df, V4=="VERB"))[1]}) Főnevek száma A tulajdonneveket is ideszámoltam. 19. fonevszam.i <- sapply(filelist, function(df){dim(subset(df, V4=="NOUN"))[1]}) 20. propnszam.i <- sapply(filelist, function(df){dim(subset(df, V4=="PROPN"))[1]}) 21. fonevszam.i <- fonevszam.i + propnszam.i Melléknevek száma 22. melleknevszam.i <- sapply(filelist, function(df){dim(subset(df, V4=="ADJ"))[1]}) Kötőszószám 23. kotoszoszam1.i <- sapply(filelist, function(df){dim(subset(df, V4=="CONJ"))[1]}) 24. kotoszoszam2.i <- sapply(filelist, function(df){dim(subset(df, V4=="SCONJ"))[1]}) 25. kotoszoszam.i <- kotoszoszam1.i + kotoszoszam2.i Névmások 26. nevmasszam.i <- sapply(filelist, function(df){dim(subset(df, V4=="PRON"))[1]}) Névelők 27. neveloszam.i <- sapply(filelist, function(df){dim(subset(df, V4=="DET"))[1]}) Határozószók 28. hatarozoszam.i <- sapply(filelist, function(df){dim(subset(df, V4=="ADV"))[1]}) Számnév 29. szamnevszam.i <- sapply(filelist, function(df){dim(subset(df, V4=="NUM"))[1]}) Névutók 30. nevutoszam <- sapply(filelist, function(df){dim(subset(df, V4=="ADP"))[1]}) Szervetlen közbevetések 31. szervetlenszavak <- sapply(filelist, function(df){dim(subset(df, V4=="INTJ"))[1]}) Igekötők 32. igekotok <- sapply(filelist, function(df){dim(subset(df, V4=="PART"))[1]}) Szófajok Egy közös táblázatban összegezzük az eddigi eredményeket. Amint a tanulmányban jeleztem, a szófajok esetében tízes nagyságrendben nem tud megbirkózni a Magyarlanc egyes szóalakkal, ami a 100000 fölötti szóalakszámot tekintve elhanyagolható különbség. 33. szofajok <- data.frame(igeszam.i, fonevszam.i, melleknevszam.i, kotoszoszam.i, nevmasszam.i, neveloszam.i, hatarozoszam.i, szamnevszam.i,nevutoszam,szervetlenszavak,igekotok) Szófaji arányok 34. igearany <- (igeszam.i * 100)/szoalakok.i 35. fonevarany <- (fonevszam.i * 100)/szoalakok.i 36. melleknevarany <- (melleknevszam.i * 100)/szoalakok.i 37. nevmasarany <- (nevmasszam.i * 100)/szoalakok.i 38. neveloarany <- (neveloszam.i * 100)/szoalakok.i 39. hatarozoarany <- (hatarozoszam.i * 100)/szoalakok.i 40. szamnevarany <- (szamnevszam.i * 100)/szoalakok.i 41. nevutoarany <- (nevutoszam * 100)/szoalakok.i 42. szervetlenarany <- (szervetlenszavak * 100)/szoalakok.i 43. igekotoarany <- (igekotok * 100)/szoalakok.i 44. szofajarany <- data.frame(igearany,fonevarany,melleknevarany, kotoszoarany, nevmasarany, neveloarany, hatarozoarany, szamnevarany, nevutoarany, szervetlenarany, igekotoarany) Választékosság Két képletet használ a dolgozat. Hány egyedi lemma és hány szóalak alkotja a novellákat. 45. ttr <- egyedi.szoszam.i/sqrt(szoalakok.i) 46. ttr2 <- log(egyedi.szoszam.i)/log(szoalakok.i) Szófaji arányok átlaga, szélsőértéke A szófaji arányokat már kiszámoltuk és egy táblázatban elmentettük (szofajaranyok). Ha az egyes novellák értékeire kíváncsiak vagyunk, akkor úgy kell lekérdezni. Mivel az oszlopok az egyes szófajokat tartalmazzák, a sorok pedig az egyes novellák, csak tudni kell, melyik kötetben hány novella van. Jókainál 8, 15, 5, Mikszáthnál 8, 4, 15, 15. A szögletes zárójelben először a sorokat adjuk meg, aztán az oszlopot. Átírva értelemszerűen folyamatosan megy a sorok számozása. Tehát a 47. kód Jókai 1856-ös kötetének novelláira, azok igearányára kérdez rá. Először az átlagra, aztán a szélsőértékekre. Ezek olvashatók a dolgozatban. A 49–50. az 1860-as kötet főnévarányaira kérdez, az 51–52. pedig az 1894-es kötet mellékneveire. A Mikszáth-kötetek esetében hasonló logika alapján kell a sorokat „kiosztani”. 47. mean(szofajarany[1:8,1]) 48. range(szofajarany[1:8,1]) 49. mean(szofajarany[9:23,2]) 50. range(szofajarany[9:23,2]) 51. mean(szofajarany[24:28,3]) 52. range(szofajarany[24:28,3])