Respostas:
"Corpus" é uma coleção de documentos de texto.
VCorpus in tm refere-se ao corpus "Volátil", o que significa que o corpus é armazenado na memória e seria destruído quando o objeto R que o continha fosse destruído.
Compare isso com PCorpus ou Permanent Corpus, que são armazenados fora da memória, digamos em um db.
Para criar um VCorpus usando tm, precisamos passar um objeto "Source" como parâmetro para o método VCorpus. Você pode encontrar as fontes disponíveis usando este método -
getSources ()
[1] "DataframeSource" "DirSource" "URISource" "VectorSource"
[5] "XMLSource" "ZipSource"
A fonte abstrai os locais de entrada, como um diretório ou um URI etc. O VectorSource é apenas para vetores de caracteres
Um exemplo simples:
Digamos que você tenha um vetor de caracteres -
input <- c ('Esta é a linha um.', 'E esta é a segunda')
Crie a fonte - vecSource <- VectorSource (entrada)
Em seguida, crie o corpus - VCorpus (vecSource)
Espero que isto ajude. Você pode ler mais aqui - https://cran.r-project.org/web/packages/tm/vignettes/tm.pdf
Em termos práticos, há uma grande diferença entre Corpus
e VCorpus
.
Corpus
usa SimpleCorpus
como padrão, o que significa que alguns recursos do VCorpus
não estarão disponíveis. Um que é imediatamente evidente é que SimpleCorpus
não permitirá que você mantenha traços, sublinhados ou outros sinais de pontuação; SimpleCorpus
ou os Corpus
remove automaticamente, VCorpus
não. Existem outras limitações Corpus
que você encontrará na ajuda ?SimpleCorpus
.
Aqui está um exemplo:
# 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
A saída 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
Se você fizer uma inspeção dos objetos:
# inspect the content of the document
inspect(C.mlk[1:2])
inspect(V.mlk[1:2])
Você notará que Corpus
descompacta o 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
Enquanto VCorpus
mantém juntos dentro do objeto.
Digamos que agora você faça a conversão da 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, vamos ver o conteúdo. Isto é de Corpus
:
grep("[[:punct:]]", dtm.C.mlk$dimnames$Terms, value = TRUE)
# character(0)
E 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."
Dê uma olhada nas palavras com pontuação. Essa é uma enorme diferença. Não é?