Erste af alle, hier ist die Beispieldaten, das Problem zu reproduzieren, die ich habe, und ich werde mich zu erklären versuchen: https://drive.google.com/file/d/0B4RCdYlVF8otUll6V2x0cDJORGc/view?usp=sharingGleicher Wert, aber anderes Ergebnis? Über removeSparseTerms (R)
Die Sache ist, dass ich unterschiedliche Ergebnisse von removeSparseTerms trotz der Einführung erhalten es ist der gleiche Wert. Es scheint der menschlichen Logik zu trotzen, oder zumindest der meiner. Ich habe diese Funktion:
generateTDM <- function (Room_name, dest.train, RST){
s.dir <- sprintf("%s/%s", dest.train, Room_name)
s.cor <- Corpus(DirSource(directory = s.dir, pattern = "txt", encoding = "UTF-8")) #Crea unos corpora de los archivos txt ya limpios.
s.tdm <- TermDocumentMatrix(s.cor, control = list(bounds = list(local = c(2, Inf)), tokenize = TrigramTokenizer)) #Crea una matriz de terminos a partir de los corpora teniendo en cuenta unigramas, bigramas y trigramas.
s.tdm <- removeSparseTerms(s.tdm, RST) #Mantiene aquellos términos que aparezcan en el (1-RST)% de los archivos, el resto los elimina.
}
Nun, als ich diese Funktion auf diese Weise aufzurufen:
tdm.train <- lapply(Room_name, generateTDM, dest.train, RST[p])
I erhalten verschiedene Ausgänge in Abhängigkeit davon, wo die Variable RST in einem Vektor befindet, abhängig von den anderen Elementen . Das heißt, obwohl ich den gleichen Wert habe, bekomme ich deutliche Ergebnisse.
Zum Beispiel:
Fall 1:
RST <-seq (0.45, 0.6, 0.05)
p<-4
werde ich RST = (0,45, 0,5, 0,55, 0,6), dann RST [p] 0,6 ist.
Das Ergebnis in diesem Fall:
> tdm.train
[[1]]
<<TermDocumentMatrix (terms: 84, documents: 51)>>
Non-/sparse entries: 2451/1833
Sparsity : 43%
Maximal term length: 10
Weighting : term frequency (tf)
[[2]]
<<TermDocumentMatrix (terms: 82, documents: 52)>>
Non-/sparse entries: 2409/1855
Sparsity : 44%
Maximal term length: 11
Weighting : term frequency (tf)
[[3]]
<<TermDocumentMatrix (terms: 68, documents: 51)>>
Non-/sparse entries: 1926/1542
Sparsity : 44%
Maximal term length: 13
Weighting : term frequency (tf)
[[4]]
<<TermDocumentMatrix (terms: 36, documents: 48)>>
Non-/sparse entries: 985/743
Sparsity : 43%
Maximal term length: 10
Weighting : term frequency (tf)
[[5]]
<<TermDocumentMatrix (terms: 48, documents: 50)>>
Non-/sparse entries: 1295/1105
Sparsity : 46%
Maximal term length: 10
Weighting : term frequency (tf)
[[6]]
<<TermDocumentMatrix (terms: 27, documents: 50)>>
Non-/sparse entries: 756/594
Sparsity : 44%
Maximal term length: 8
Weighting : term frequency (tf)
Fall 2:
RST <-seq (0.45, 0.8, 0.05)
p<-4
Ich habe nun, dass RST = (0,45, 0,5, 0,55, 0,6, 0,65, 0,7, 0,75 , 0.8), ergo RST [p] ist diesmal gleich (0.6).
Warum habe ich dann ein anderes Ergebnis? Ich kann es nicht verstehen.
> tdm.train
[[1]]
<<TermDocumentMatrix (terms: 84, documents: 51)>>
Non-/sparse entries: 2451/1833
Sparsity : 43%
Maximal term length: 10
Weighting : term frequency (tf)
[[2]]
<<TermDocumentMatrix (terms: 82, documents: 52)>>
Non-/sparse entries: 2409/1855
Sparsity : 44%
Maximal term length: 11
Weighting : term frequency (tf)
[[3]]
<<TermDocumentMatrix (terms: 68, documents: 51)>>
Non-/sparse entries: 1926/1542
Sparsity : 44%
Maximal term length: 13
Weighting : term frequency (tf)
[[4]]
<<TermDocumentMatrix (terms: 36, documents: 48)>>
Non-/sparse entries: 985/743
Sparsity : 43%
Maximal term length: 10
Weighting : term frequency (tf)
[[5]]
<<TermDocumentMatrix (terms: 57, documents: 50)>>
Non-/sparse entries: 1475/1375
Sparsity : 48%
Maximal term length: 10
Weighting : term frequency (tf)
[[6]]
<<TermDocumentMatrix (terms: 34, documents: 50)>>
Non-/sparse entries: 896/804
Sparsity : 47%
Maximal term length: 8
Weighting : term frequency (tf)
Ich weiß nicht ... es ist sehr seltsam, oder ?. Wenn der Wert von RST derselbe ist, unterscheidet sich das Ergebnis von removeSparseTerms in den letzten zwei dirs jeweils. Bitte, hilf mir, ich weiß nicht, warum mich der Grund umbringt.
Vielen Dank und einen schönen Tag.
Reproduzierbare Beispiel auf der Grundlage der Aktualisierung des OP:
library(tm)
library(RWeka)
download.file("https://docs.google.com/uc?authuser=0&id=0B4RCdYlVF8otUll6V2x0cDJORGc&export=download", tf <- tempfile(fileext = ".zip"), mode = "wb")
unzip(tf, exdir = tempdir())
TrigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 1, max = 3))
generateTDM <- function (Room_name, dest.train, rst){
s.dir <- sprintf("%s/%s", dest.train, Room_name)
s.cor <- Corpus(DirSource(directory = s.dir, pattern = "txt", encoding = "UTF-8")) #Crea unos corpora de los archivos txt ya limpios.
s.tdm <- TermDocumentMatrix(s.cor, control = list(bounds = list(local = c(2, Inf)), tokenize = TrigramTokenizer)) #Crea una matriz de terminos a partir de los corpora teniendo en cuenta unigramas, bigramas y trigramas.
t <- table(s.tdm$i) > (s.tdm$ncol * (1 - rst)) # from tm::removeSparseTerms()
termIndex <- as.numeric(names(t[t]))
return(s.tdm[termIndex, ])
}
dest.train <- file.path(tempdir(), "stackoverflow", "TrainDocs")
Room_name <- "Venus"
p <- 4
RST1 <- seq(0.45, 0.6, 0.05)
RST2 <- seq(0.45, 0.8, 0.05)
RST2[p]
# [1] 0.6
RST1[p]
# [1] 0.6
identical(RST2[p], RST1[p])
# [1] FALSE # ?!?
lapply(Room_name, generateTDM, dest.train, RST1[p])
# <<TermDocumentMatrix (terms: 48, documents: 50)>>
lapply(Room_name, generateTDM, dest.train, RST2[p])
# <<TermDocumentMatrix (terms: 57, documents: 50)>> # ?!?
Imho wäre es besser gewesen, die Unterschiede hervorzuheben und Beispieldaten für die Reproduktion bereitzustellen, anstatt "Ich weiß nicht ... ich kann es nicht verstehen" mehrmals zu betonen. :-) – lukeA
Ja, stimmt. Ich werde einen Zip mit den wichtigen Dokumenten und Teilen des Skripts vorbereiten, um sie hier so schnell wie möglich anzuhängen. Das tut mir leid. –
Fertig. Beispieldaten angehängt und Stress in den Sätzen verringert ... ein bisschen. :) –