Решено - Нужна помощь в составлении частоты одного слова в документе - PullRequest
0 голосов
/ 09 июня 2019

Я хотел бы изобразить частоту одного слова, которое упоминается в телешоу как часть задания, которое я выполняю. Мне удается создать фрейм данных, который показывает частоту слова (слово «falsch», что по-немецки означает «неправильно») за шоу

Я хотел бы подготовить шоу, где слово «фальш» используется чаще всего, например, 10 лучших шоу.

Как я упоминал ранее, я уже очистил набор данных, выделил слово и могу показать, сколько раз слово было сказано за шоу в кадре данных.

Вот мой код для этого конкретного сюжета, который я хочу сделать:

arena <- readtext("02-SRF-Arena_iso.csv", encoding = "ISO-8859-1")

corpus <- Corpus(DataframeSource(arena))
corpus <- tm_map(corpus, content_transformer(tolower))
corpus <- tm_map(corpus, removeWords, stopwords("de"))
corpus <- tm_map(corpus, removePunctuation, preserve_intra_word_dashes = TRUE)
corpus <- tm_map(corpus, removeNumbers)
corpus <- tm_map(corpus, stripWhitespace)

DTM <- DocumentTermMatrix(corpus)
terms_to_observe <- c("falsch")
DTM_reduced <- as.matrix(DTM[, terms_to_observe])
DTM_new <- aggregate(DTM_reduced, by = list(titel = arena$sendungstitel), sum)
df <- as.data.frame(DTM_new)
df

Это то, что находится в моем фрейме данных (отрывок, не все)

titel                                                                  falsch
1«Arena»: Rente - jung gegen alt?                                       2
2«Inländervorrang light» - ist das der Volkswille?                      1
3«Präsidialarena» mit Alain Berset                                      7
4«Zukunfts-Arena»                                                       1
592 Prozent Nein - Super-GAU für die Energiewende?                      1
6Abgestraft und blamiert - wacht die Wirtschaft jetzt endlich auf?      0
7Abstimmungs-Arena «Einbürgerung dritte Generation»                     13

Я хочу отсортировать число «фальш», а затем построить график, показывающий, где слово используется чаще всего.

Как мне легко удалить другие шоу (340 других шоу) и нанести на график частоту слов? Должен ли я создать новую переменную?

Буду признателен за любую помощь.

Спасибо за вашу помощь.

Это самый простой ответ (спасибо, Джон!):


library(tidyverse); df %>% top_n(10, falsch) %>% ggplot(aes(titel %>% fct_reorder(falsch), falsch)) + geom_col() + coord_flip()

Мне удалось найти решение самостоятельно, но оно немного сложнее.

DTM <- DocumentTermMatrix(corpus)
terms_to_observe <- c("falsch")
DTM_reduced <- as.matrix(DTM[, terms_to_observe])
DTM_new <- aggregate(DTM_reduced, by = list(titel = arena$sendungstitel), sum)
df <- as.data.frame(DTM_new)
df_order <- df[order(df$falsch, df$titel),]
df_last <- tail(df_order, n=10)


df_last$titel <- factor(df_last$titel, levels = df_last$titel)


df_last$falsch <- as.factor(df_last$falsch)

ggplot(df_last, aes(x = titel, y = falsch, fill =  falsch)) +
  geom_col(width = 0.3, position = "dodge") +
  theme(legend.position = "none", axis.text.x = element_text(angle = 25, hjust = 1), axis.title.x=element_blank()) +
  ylab("Anzahl") +
  scale_fill_brewer(palette="Dark2")

...