Távoli olvasó ír–olvas
2016-12-27 • R, distant reading, tutorialCsoportos fájlfeldolgozás
A két eddigi poszt alapján sokmindent meg lehet csinálni egy-egy fájllal/változóval. De mi van sok szöveget akarunk (pontosítok: nem akarunk) elolvasni (mechanikusabb kifejezéssel, és pontosabban: feldolgozni)? Az R-ben erre is van(nak) megoldás(ok). Persze ezek azok, amelyeket én ki tudtam guglizni, helpdeszkázni magamnak. És ez még mindig a microanalysis. Ha Isten úgy akarja, lesz több poszt a többi témából is (mezo- és macroanalysis).
1. Csoportos beolvasás
- Jókai Mórnak a MEK-en található Árnyképek című novelláskötetét olvassuk be novellánként. Először sajnos el kell mentegetnünk külön
.txt
fájlként mind a nyolcat. Mivel nincsenek olyan elemek, amelyeket könnyen megtalálhatnánk, ezért automatikusan megkerestetni a novellahatárokat nem lehet. Miután ezt megcsináltuk, utána olvassuk be őket az RStudio-ba (az#
továbbra is az én kommentárom, nem kell beírni, a>
pedig a promptjel, nem kell beírni – a botrányos tördelés pedig a keretrendszer bágja vagy fícsöre – kinek hogy [nem] tetszik).
# 1. lépés: először elmentettük a `.txt`-s fájlneveket a `filenames` változóba abból a könyvtárból, ahol a fájlok vannak
> filenames <- list.files(path="~/Documents/distantreading/R_gyakorlatok/rutmutato/arnykepek", pattern="*.txt")
# 2. lépés: beolvassuk magukat a fájlokat a `filelist` nevű listába. A listának nyolc eleme van, mindegyik egy-egy fájlt tartalmaz bekezdésenként beolvasva, minden elemnek a saját fájlneve a jelölője
> filelist <- lapply(filenames, readLines)
# 3. lépés: az egyes elemeket mentsük külön karaktervektorba, az eredmény 8 darab változó lesz: arnykepek1, arnykepek2 stb.
> list2env(setNames(filelist,paste0("arnykepek",seq_along(filelist))), envir = parent.frame())
2. Csoportos feldolgozás
- Az eddigi lépések végére érve van nyolc változónk, amelyek bekezdésenként tartalmazzák a nyolc novellát. Ebből még nem sok elemzés jön ki, de ha az egyes szövegek érdekelnek bennünket, akkor az előző posztok alapján (egyik, másik) lehet dolgozni velük.
- Ellenben tovább is dolgozhatunk a nyolc novellával együtt: ejtsük ki az írásjeleket és kisbetűsítsük. (1)
- Keressük meg mind a nyolc novellában az “árny” karaktersort! (mivel egy nem feldolgozott fájl az alap, ezért a “szárnyak” is találat lesz – anagrammatikus olvasat) (2)
- Hozzunk létre egy
arnyido
nevű változót, amely olyan hosszú, mint az egyes novellák (a szavainak egymásutánját értve a novellaidő alatt) (3), majd jelöljük, hol fordul elő az “árny” karaktersor! (4) - Ábrázoljuk mind a nyolc novellában az “árny” előfordulását a történet előrehaladtával! (5)
- Keressük meg a nyolc novella közös szóalakjait és mentsük el az
l
változóba (majd nézzük meg)! (6)
# De még ezek előtt hívjuk be (még előtte: töltsük le) a `gsubfn` csomagot – értelemszerűen, ha utána ki akarjuk menteni az egyes fájlokat, akkor az előző pont 3. lépését kell alkalmazni, de a `filelist` helyeire az `n` listaváltozót kell írni (már ha az én példámat követi valaki).
# (1)
n <- strapply(filelist, "(\\w+)")
n <- sapply(n, tolower)
#(2)
arny <- lapply(n,function(x) grep("árny",x))
# (3)
arnyido <- lapply(n, function(x) rep(NA, length(n[x])))
# (4)
for(i in seq_along(arnyido)){arnyido[[i]][arny[[i]]] = 1}
# (5) Sajnos nem sikerült megoldanom, hogy mindegyik fölé a saját címét/számát írja ki. Minden segítséget köszönök.
for(i in seq_along(kkk)){plot(kkk[[i]], main="Az 'árny' karaktersor eloszlása Az árnyképek novelláiban",xlab="Novellaidő", ylab="árny", type="h", ylim=c(0,1), yaxt='n')}
# (6)
l <- Reduce(intersect,n)
l # Ez hát egy "tipikus" Árnyképek-novella... :)
- És így fognak kinézni:
3. Csoportos kiírás
- Miután elemeztünk, amit szerettünk volna, a nyolc fájl anyagát egyetlen paranccsal ki is írathatjuk nyolc különböző
.txt
-fájlba. Most azn
változó anyagát fogom kiíratni: kisbetűs, szavakra bontott, jelen állapotában. Nyilván máskor, más állapotokra is jó. A fájlnév az eredeti fájlnév lesz. (Jelen állapotban kissé furcsán fog kinézni, mert kétszer lesz benne a.txt
. Ha zavar, akkor az alábbi kódban a".txt"
helyére ezt kell írni:""
.)
for (i in 1:length(n)){
outname <- paste("", filenames[i], ".txt", sep= "")
write.table(n[[i]], outname, col.names= F, row.names= F, quote= F)
}