1

Frage: Wie kann ich die Häufigkeit der Wörter in jedem Thema berechnen und codieren? Mein Ziel ist es, "Word Cloud" von jedem Thema zu erstellen.Thema Modellierung: LDA, Worthäufigkeit in jedem Thema und Wordcloud

P.S.> Ich habe kein Problem mit Wordcloud.

aus dem Code,

burnin <- 4000 #We do not collect this. 
    iter <- 4000 
    thin <- 500 
    seed <-list(2017,5,63,100001,765) 
    nstart <- 5 
    best <- TRUE 
    #Number of topics: 
    k <- 4 
    LDA_results <-LDA(DTM,k, method="Gibbs", control=list(nstart=nstart, 
          seed = seed, best=best, 
          burnin = burnin, iter = iter, thin=thin)) 

Danke (Ich versuche, die Frage so präzise wie möglich zu machen, so dass, wenn Sie weitere Informationen benötigen, ich mehr hinzufügen.)

Antwort

2

Wenn Sie eine Wordcloud für jedes Thema erstellen möchten, was Sie wollen, sind die Top-Bedingungen für jedes Thema, das heißt, um die wahrscheinlichsten Wörter aus jedem Thema erzeugt werden. Diese Wahrscheinlichkeit wird beta genannt; es ist die pro-Thema-pro-Wort-Wahrscheinlichkeit. Je höher diese Wahrscheinlichkeit Beta ist, desto höher ist die Wahrscheinlichkeit, dass dieses Wort aus diesem Thema generiert wird.

Sie können die beta Wahrscheinlichkeiten in einem ordentlichen Datenrahmen aus Ihrem LDA Topic-Modell mit tidy von Ordytext herausholen. Betrachten wir ein Beispiel-Dataset und passen Sie ein Modell mit nur zwei Themen an.

library(tidyverse) 
library(tidytext) 
library(topicmodels) 

data("AssociatedPress") 
ap_lda <- LDA(AssociatedPress, k = 2, control = list(seed = 1234)) 

Sie haben das Modell jetzt fit! Jetzt können wir die Wahrscheinlichkeiten herausholen.

ap_topics <- tidy(ap_lda, matrix = "beta") 

ap_topics 
#> # A tibble: 20,946 x 3 
#> topic  term   beta 
#> <int>  <chr>  <dbl> 
#> 1  1  aaron 1.686917e-12 
#> 2  2  aaron 3.895941e-05 
#> 3  1 abandon 2.654910e-05 
#> 4  2 abandon 3.990786e-05 
#> 5  1 abandoned 1.390663e-04 
#> 6  2 abandoned 5.876946e-05 
#> 7  1 abandoning 2.454843e-33 
#> 8  2 abandoning 2.337565e-05 
#> 9  1  abbott 2.130484e-06 
#> 10  2  abbott 2.968045e-05 
#> # ... with 20,936 more rows 

Sie sind alle dort vermischt. Lassen Sie uns dplyr verwenden, um die höchstwahrscheinlichen Begriffe für jedes Thema zu erhalten.

ap_top_terms <- ap_topics %>% 
    group_by(topic) %>% 
    top_n(200, beta) %>% 
    ungroup() %>% 
    arrange(topic, -beta) 

Sie können diese jetzt verwenden, um eine Wordcloud zu machen (mit einer gewissen Umbildung). Die beta Wahrscheinlichkeit ist, was Sie entsprechen möchten, wie groß die Wörter sind.

library(wordcloud) 
library(reshape2) 

ap_top_terms %>% 
    mutate(topic = paste("topic", topic)) %>% 
    acast(term ~ topic, value.var = "beta", fill = 0) %>% 
    comparison.cloud(colors = c("#F8766D", "#00BFC4"), 
        max.words = 100) 

+0

Danke Julia! Ich studiere deinen Code und den Code von dem Herrn unten .... danke! –

+0

Könnten Sie mir bitte eine Anleitung geben, wie Sie Wordcloud aus Matrix "Beta" plotten können? Die Dicke ist in meinem Code in Häufigkeit. wordcloud (words = d $ term, freq = d $ freq, min.freq = 1, max.words = 200, random.order = FALSCH, rot.per = 0.35, colors = brewer.pal (8, " Dark2 ")) –

+0

Editierte die Post, um Code für die Wordcloud hinzuzufügen. –

1

eine Teilmenge Nehmen von Ihrem DTM entsprechend den Wörtern jedes Themas (dtm[,topterms]) und nehmen Sie die Spaltensummen (slam::col_sums) der unterteilten Dokumentenbegriffmatrix. Z.B .:

library(topicmodels) 
library(tm) 
library(wordcloud) 
txt <- c(world="Hello hello world world world foo", foo="foo foo bar fizz") 
dtm <- DocumentTermMatrix(VCorpus(VectorSource(txt))) 
lda <- LDA(dtm, control = list(alpha = 0.1), k = 2) 
freqlst <- lapply(
    terms(lda, thres=.2, simplify=F), 
    function(topterms) slam::col_sums(dtm[,topterms]) 
) 
par(mfrow = c(1,2)) 
invisible(lapply(freqlst, function(x) 
    wordcloud(names(x), x, min.freq = 0) 
)) 
+0

Hallo Lukea nur eine schnelle Antwort .... Vielen Dank für die Antwort. Ich werde es versuchen und später zu dir zurückkommen. –

+0

@Schatchawan Keine Sorgen. – lukeA

Verwandte Themen