¿Qué es VectorSource y VCorpus en el paquete 'tm' (Text Mining) en R?

9

No estoy muy seguro de qué son exactamente VectorSource y VCorpus en el paquete 'tm'.

La documentación no está clara sobre estos, ¿alguien puede hacerme entender en términos simples?

yo me
fuente

Respuestas:

12

"Corpus" es una colección de documentos de texto.

VCorpus en tm se refiere al corpus "volátil", lo que significa que el corpus se almacena en la memoria y se destruiría cuando se destruye el objeto R que lo contiene.

Contraste esto con PCorpus o corpus permanente que se almacenan fuera de la memoria, digamos en un db.

Para crear un VCorpus usando tm, necesitamos pasar un objeto "Fuente" como parámetro al método VCorpus. Puede encontrar las fuentes disponibles con este método:
getSources ()

[1] "DataframeSource" "DirSource" "URISource" "VectorSource"
[5] "XMLSource" "ZipSource"

Source extrae ubicaciones de entrada, como un directorio o un URI, etc. VectorSource es solo para vectores de caracteres

Un simple ejemplo:

Digamos que tienes un vector char

input <- c ('Esta es la línea uno', 'Y esta es la segunda')

Crear la fuente - vecSource <- VectorSource (input)

Luego crea el corpus - VCorpus (vecSource)

Espero que esto ayude. Puede leer más aquí: https://cran.r-project.org/web/packages/tm/vignettes/tm.pdf

Indi
fuente
5

En términos prácticos, hay una gran diferencia entre Corpusy VCorpus.

Corpusutiliza de SimpleCorpusforma predeterminada, lo que significa que algunas funciones de VCorpusno estarán disponibles. Uno que es inmediatamente evidente es que SimpleCorpusno le permitirá mantener guiones, guiones bajos u otros signos de puntuación; SimpleCorpuso Corpuslos elimina automáticamente, VCorpusno lo hace. Existen otras limitaciones Corpusque encontrará en la ayuda ?SimpleCorpus.

Aquí hay un ejemplo:

# Read a text file from internet
filePath <- "http://www.sthda.com/sthda/RDoc/example-files/martin-luther-king-i-have-a-dream-speech.txt"
text <- readLines(filePath)

# load the data as a corpus
C.mlk <- Corpus(VectorSource(text))
C.mlk
V.mlk <- VCorpus(VectorSource(text))
V.mlk

La salida será:

<<SimpleCorpus>>
Metadata:  corpus specific: 1, document level (indexed): 0
Content:  documents: 46
<<VCorpus>>
Metadata:  corpus specific: 0, document level (indexed): 0
Content:  documents: 46

Si haces una inspección de los objetos:

# inspect the content of the document
inspect(C.mlk[1:2])
inspect(V.mlk[1:2])

Notarás que Corpusdesempaqueta el texto:

<<SimpleCorpus>>
Metadata:  corpus specific: 1, document level (indexed): 0
Content:  documents: 2
[1]                                                                                                                                            
[2] And so even though we face the difficulties of today and tomorrow, I still have a dream. It is a dream deeply rooted in the American dream.


<<VCorpus>>
Metadata:  corpus specific: 0, document level (indexed): 0
Content:  documents: 2
[[1]]
<<PlainTextDocument>>
Metadata:  7
Content:  chars: 0
[[2]]
<<PlainTextDocument>>
Metadata:  7
Content:  chars: 139

Mientras lo VCorpusmantiene unido dentro del objeto.

Digamos que ahora haces la conversión de matriz para ambos:

dtm.C.mlk <- DocumentTermMatrix(C.mlk)
length(dtm.C.mlk$dimnames$Terms)
# 168

dtm.V.mlk <- DocumentTermMatrix(V.mlk)
length(dtm.V.mlk$dimnames$Terms)
# 187

Finalmente, veamos el contenido. Esto es de Corpus:

grep("[[:punct:]]", dtm.C.mlk$dimnames$Terms, value = TRUE)
# character(0)

Y de VCorpus:

grep("[[:punct:]]", dtm.V.mlk$dimnames$Terms, value = TRUE)

[1] "alabama,"       "almighty,"      "brotherhood."   "brothers."     
 [5] "california."    "catholics,"     "character."     "children,"     
 [9] "city,"          "colorado."      "creed:"         "day,"          
[13] "day."           "died,"          "dream."         "equal."        
[17] "exalted,"       "faith,"         "gentiles,"      "georgia,"      
[21] "georgia."       "hamlet,"        "hampshire."     "happens,"      
[25] "hope,"          "hope."          "injustice,"     "justice."      
[29] "last!"          "liberty,"       "low,"           "meaning:"      
[33] "men,"           "mississippi,"   "mississippi."   "mountainside," 
[37] "nation,"        "nullification," "oppression,"    "pennsylvania." 
[41] "plain,"         "pride,"         "racists,"       "ring!"         
[45] "ring,"          "ring."          "self-evident,"  "sing."         
[49] "snow-capped"    "spiritual:"     "straight;"      "tennessee."    
[53] "thee,"          "today!"         "together,"      "together."     
[57] "tomorrow,"      "true."          "york."

Echa un vistazo a las palabras con puntuación. Es una diferencia enorme. ¿No es así?

f0nzie
fuente