24 votes

Recherche de phrases de 2 et 3 mots à l'aide du logiciel R TM

J'essaie de trouver un code qui fonctionne réellement pour trouver les phrases de deux et trois mots les plus fréquemment utilisées dans le package de text mining R (il y a peut-être un autre package pour cela que je ne connais pas). J'ai essayé d'utiliser le tokenizer, mais je n'ai pas eu de chance.

Si vous avez travaillé sur une situation similaire dans le passé, pourriez-vous poster un code qui a été testé et qui fonctionne réellement ? Je vous remercie de tout cœur !

1voto

Monika Singh Points 11

Essayez le paquet tidytext

library(dplyr)
library(tidytext)
library(janeaustenr)
library(tidyr

)

Supposons que j'ai un dataframe CommentData qui contient la colonne commentaire et que je veuille trouver l'occurrence de deux mots ensemble. J'essaie alors

bigram_filtered <- CommentData %>%
  unnest_tokens(bigram, Comment, token= "ngrams", n=2) %>%
  separate(bigram, c("word1","word2"), sep=" ") %>%
  filter(!word1 %in% stop_words$word,
         !word2 %in% stop_words$word) %>%
  count(word1, word2, sort=TRUE)

Le code ci-dessus crée des tokens, puis supprime les mots vides qui ne contribuent pas à l'analyse (par exemple, the, an, to, etc.) et compte ensuite les occurrences de ces mots. Vous utiliserez ensuite la fonction unite pour combiner les mots individuels et enregistrer leur occurrence.

bigrams_united <- bigram_filtered %>%
  unite(bigram, word1, word2, sep=" ")
bigrams_united

0voto

Renato Lyke Points 43

Essayez ce code.

library(tm)
library(SnowballC)
library(class)
library(wordcloud)

keywords <- read.csv(file.choose(), header = TRUE, na.strings=c("NA","-","?"))
keywords_doc <- Corpus(VectorSource(keywords$"use your column that you need"))
keywords_doc <- tm_map(keywords_doc, removeNumbers)
keywords_doc <- tm_map(keywords_doc, tolower)
keywords_doc <- tm_map(keywords_doc, stripWhitespace)
keywords_doc <- tm_map(keywords_doc, removePunctuation)
keywords_doc <- tm_map(keywords_doc, PlainTextDocument)
keywords_doc <- tm_map(keywords_doc, stemDocument)

Voici la section des bigrammes ou des trigrammes que vous pouvez utiliser

BigramTokenizer <-  function(x)
unlist(lapply(ngrams(words(x), 2), paste, collapse = " "), use.names = FALSE)
# creating of document matrix
keywords_matrix <- TermDocumentMatrix(keywords_doc, control = list(tokenize = BigramTokenizer))

# remove sparse terms 
keywords_naremoval <- removeSparseTerms(keywords_matrix, 0.95)

# Frequency of the words appearing
keyword.freq <- rowSums(as.matrix(keywords_naremoval))
subsetkeyword.freq <-subset(keyword.freq, keyword.freq >=20)
frequentKeywordSubsetDF <- data.frame(term = names(subsetkeyword.freq), freq = subsetkeyword.freq) 

# Sorting of the words
frequentKeywordDF <- data.frame(term = names(keyword.freq), freq = keyword.freq)
frequentKeywordSubsetDF <- frequentKeywordSubsetDF[with(frequentKeywordSubsetDF, order(-frequentKeywordSubsetDF$freq)), ]
frequentKeywordDF <- frequentKeywordDF[with(frequentKeywordDF, order(-frequentKeywordDF$freq)), ]

# Printing of the words
wordcloud(frequentKeywordDF$term, freq=frequentKeywordDF$freq, random.order = FALSE, rot.per=0.35, scale=c(5,0.5), min.freq = 30, colors = brewer.pal(8,"Dark2"))

J'espère que cela vous aidera. Voici un code complet que vous pouvez utiliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X