Qu'est-ce que VectorSource et VCorpus dans le package 'tm' (Text Mining) dans R

9

Je ne sais pas exactement ce que VectorSource et VCorpus contiennent dans le paquet «tm».

La documentation n'est pas claire à ce sujet, quelqu'un peut-il me faire comprendre en termes simples?

yo moi
la source

Réponses:

12

"Corpus" est une collection de documents texte.

VCorpus en tm fait référence au corpus "volatil", ce qui signifie que le corpus est stocké en mémoire et serait détruit lorsque l'objet R le contenant est détruit.

Comparez cela avec PCorpus ou Corpus permanent qui sont stockés en dehors de la mémoire, par exemple dans une base de données.

Afin de créer un VCorpus en utilisant tm, nous devons passer un objet "Source" comme paramètre à la méthode VCorpus. Vous pouvez trouver les sources disponibles en utilisant cette méthode -
getSources ()

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

La source résume les emplacements d'entrée, comme un répertoire ou un URI, etc. VectorSource est uniquement destiné aux vecteurs de caractères

Un exemple simple:

Disons que vous avez un vecteur char -

input <- c ('Ceci est la première ligne.', 'Et voici la seconde')

Créer la source - vecSource <- VectorSource (entrée)

Créez ensuite le corpus - VCorpus (vecSource)

J'espère que cela t'aides. Vous pouvez en savoir plus ici - https://cran.r-project.org/web/packages/tm/vignettes/tm.pdf

Indi
la source
5

Concrètement, il y a une grande différence entre Corpuset VCorpus.

Corpusutilise SimpleCorpuspar défaut, ce qui signifie que certaines fonctionnalités de VCorpusne seront pas disponibles. Celui qui est immédiatement évident est qu'il SimpleCorpusne vous permettra pas de garder des tirets, des soulignements ou d'autres signes de ponctuation; SimpleCorpusou Corpusles supprime automatiquement, VCorpusnon. Il y a d'autres limitations Corpusque vous trouverez dans l'aide avec ?SimpleCorpus.

Voici un exemple:

# 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 sortie sera:

<<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 vous inspectez les objets:

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

Vous remarquerez que Corpusdéballe le texte:

<<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

Tout en le VCorpusmaintenant ensemble dans l'objet.

Disons maintenant que vous effectuez la conversion matricielle pour les deux:

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

Enfin, voyons le contenu. Cela vient de Corpus:

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

Et 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."

Jetez un œil aux mots avec ponctuation. C'est une énorme différence. N'est-ce pas?

f0nzie
la source