Respuestas:
"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
En términos prácticos, hay una gran diferencia entre Corpus
y VCorpus
.
Corpus
utiliza de SimpleCorpus
forma predeterminada, lo que significa que algunas funciones de VCorpus
no estarán disponibles. Uno que es inmediatamente evidente es que SimpleCorpus
no le permitirá mantener guiones, guiones bajos u otros signos de puntuación; SimpleCorpus
o Corpus
los elimina automáticamente, VCorpus
no lo hace. Existen otras limitaciones Corpus
que 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 Corpus
desempaqueta 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 VCorpus
mantiene 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í?