Az R-ről

Az R indítása

library(tm)
library(SnowballC)
?mean

Adatok beolvasása

source <- DirSource("../../data/rejto_konyvek")
rejtoKonyvek <- VCorpus(x = source,
        readerControl =
                list(reader = readPDF(),
                language = "hun"))

Adatok megtekintése

str(rejtoKonyvek) # nagyon nagy kimenet is lehet
str(rejtoKonyvek[[1]][["content"]])
str(rejtoKonyvek[[1]]$content)
rejtoKonyvek
length(rejtoKonyvek)
class(rejtoKonyvek)
typeof(rejtoKonyvek)

Adatok transzformációja

rejtoKonyvek <- tm_map(rejtoKonyvek, stripWhitespace)
rejtoKonyvek <- tm_map(rejtoKonyvek,
                       content_transformer(tolower))

Metaadatok I.

  1. Dokumentumokhoz tartozó metadatok: minden dok-hoz külön-külön. A metaadatok halmaza is különbözhet. Pl.: egyik dok-haz van osztályzat, másikhoz nincs.
  2. Corpus-hoz tartozó metaadatok
    • Metaadatok, amelyek minden dok esetén más-más értéket vehetnek fel.
    • Egy metaadat az egész corpusra: név-érték párok

Metaadatok II.

meta(rejtoKonyvek[[2]], "megjegyzes") <-
        "Ujra kene olvasni"
meta(rejtoKonyvek[[2]])
##   author       : Rejtő Jenő
##   datetimestamp: 2003-08-09 18:41:53
##   description  : character(0)
##   heading      : A szőke ciklon
##   id           : Rejto_Jeno_A_szoke_ciklon.pdf
##   language     : hun
##   origin       : character(0)
##   megjegyzes   : Ujra kene olvasni

Dokumentum-kifejezés mátrix I. - Mx előállítása

dokKifMx <- DocumentTermMatrix(rejtoKonyvek)
inspect(dokKifMx[,1000:1001])
## <<DocumentTermMatrix (documents: 5, terms: 2)>>
## Non-/sparse entries: 2/8
## Sparsity           : 80%
## Maximal term length: 18
## Weighting          : term frequency (tf)
## 
##                                          Terms
## Docs                                      <c3><a1>lmackenzie
##   Rejto_Jeno_A_nema_revolverek_varosa.pdf                  0
##   Rejto_Jeno_A_szoke_ciklon.pdf                            0
##   Rejto_Jeno_Az_eloretolt_helyorseg.pdf                    0
##   Rejto_Jeno_Menni_vagy_meghalni.pdf                       2
##   Rejto_Jeno_Piszkos_Fred_a_kapitany.pdf                   0
##                                          Terms
## Docs                                      <c3><a1>lmatagon
##   Rejto_Jeno_A_nema_revolverek_varosa.pdf                0
##   Rejto_Jeno_A_szoke_ciklon.pdf                          0
##   Rejto_Jeno_Az_eloretolt_helyorseg.pdf                  1
##   Rejto_Jeno_Menni_vagy_meghalni.pdf                     0
##   Rejto_Jeno_Piszkos_Fred_a_kapitany.pdf                 0

Dokumentum-kifejezés mátrix II. - Műveletek

findFreqTerms(dokKifMx, 50)
findAssocs(dokKifMx, "légió", 0.95)
dokKifMxReduced <- removeSparseTerms(dokKifMx, 0.4)

Szótárak

szotar <- c("igen", "nem")
dokKifMxSzotarral <- DocumentTermMatrix(rejtoKonyvek,
                        list(dictionary = szotar))
as.matrix(dokKifMxSzotarral)
##                                          Terms
## Docs                                      igen nem
##   Rejto_Jeno_A_nema_revolverek_varosa.pdf    8 668
##   Rejto_Jeno_A_szoke_ciklon.pdf             23 534
##   Rejto_Jeno_Az_eloretolt_helyorseg.pdf     13 630
##   Rejto_Jeno_Menni_vagy_meghalni.pdf        10 466
##   Rejto_Jeno_Piszkos_Fred_a_kapitany.pdf    51 669

Konvertálás data frame-mé

dokKifDf <- as.data.frame(as.matrix(dokKifMxReduced))
ncol(dokKifDf)  # oszlopok száma
nrow(dokKifDf)  # sorok száma
names(dokKifDf) # oszlopok nevei
head(dokKifDf)  # oszlopok nevei és az első sorok

Egyszerű műveletek data frame-mel I.

# melyik sor tartozik ehhez a könyvhöz?
rownames(dokKifDf)
## [1] "Rejto_Jeno_A_nema_revolverek_varosa.pdf"
## [2] "Rejto_Jeno_A_szoke_ciklon.pdf"          
## [3] "Rejto_Jeno_Az_eloretolt_helyorseg.pdf"  
## [4] "Rejto_Jeno_Menni_vagy_meghalni.pdf"     
## [5] "Rejto_Jeno_Piszkos_Fred_a_kapitany.pdf"

Egyszerű műveletek data frame-mel II.

# kiválasztjuk az 5. sort, és számmá konvertáljuk 
tmp <- as.numeric(dokKifDf[5, ])
plot(density(tmp), xlab="Elofordulasok szama")

Egyszerű műveletek data frame-mel III.

barplot(dokKifDf[,"piszkos"], col=rainbow(5))
legend("topright", rownames(dokKifDf), fill=rainbow(5))

Önálló munka

Célszerű a végleges kódokat kigyűjteni egy szöveges fájlba.

Egy szöveges fájlban található utasításokat végrehajthatunk a source() függvénnyel. Pl.:

source("file_path/to_source_file/megoldasok.r")