解决-需要帮助绘制每个文档一个单词的频率

时间:2019-06-09 11:14:22

标签: r sorting ggplot2 nlp frequency

我想绘制每个电视节目中提到的单个单词的频率,作为我正在做的作业的一部分。我设法创建一个数据框,该数据框显示每个节目的频率(单词“ falsch”,德语错误)。

我想画出最常使用“ falsch”一词的节目,例如前十名的节目。

正如我之前提到的,我已经清理了数据集并隔离了单词,并且可以显示该单词在一个数据帧中每个节目说了多少次。

这是我要制作的这个特殊情节的代码:

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

我想对“ falsch”的数量进行排序,然后绘制10个图​​,以显示该词最常用的位置。

如何轻松删除其他节目(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")

0 个答案:

没有答案