O que é o VectorSource e o VCorpus no pacote 'tm' (Text Mining) no R

9

Não tenho muita certeza do que exatamente VectorSource e VCorpus estão no pacote 'tm'.

A documentação não é clara sobre isso, alguém pode me fazer entender em termos simples?

yome
fonte

Respostas:

12

"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

Indi
fonte
5

Em termos práticos, há uma grande diferença entre Corpuse VCorpus.

Corpususa SimpleCorpuscomo padrão, o que significa que alguns recursos do VCorpusnão estarão disponíveis. Um que é imediatamente evidente é que SimpleCorpusnão permitirá que você mantenha traços, sublinhados ou outros sinais de pontuação; SimpleCorpusou os Corpusremove automaticamente, VCorpusnão. Existem outras limitações Corpusque 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 Corpusdescompacta 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 VCorpusmanté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 é?

f0nzie
fonte