如何在 R 中查找和绘制 n-gram 的频率?
How to find and plot frequency of n-grams in R?
我想要做的是找到多个 words/phrases 的频率并按年份将它们绘制在图表中。
我已经能够做到这一点,比如“美国”,但我无法表达多个词,比如“美国”。
我的 df 有一个用于实际文本的列,然后是用于元数据的附加列,例如作者、年份和组织。
这是我用来处理像“美国”这样的单词的代码:
a_corpus <- corpus(df, text = "text")
freq_grouped_year <- textstat_frequency(dfm(tokens(a_corpus)),
groups = a_corpus$Year)
# COLLECTION NAME - Filter the term "american", use lower case words
freq_word_year <- subset(freq_grouped_year, freq_grouped_year$feature
%in% "american")
ggplot(freq_word_year, aes(x = group, y = frequency)) +
geom_point() +
scale_y_continuous(limits = c(0, 300), breaks = c(seq(0, 300,
30))) +
xlab(NULL) +
ylab("Frequency") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
当我尝试使用像“united states”这样的二元字母时,没有任何显示。据我了解,dfm 创建了一个单独的单词列表,因此它们无论如何都不会排序,因此寻找双字母组或更多字母组是行不通的。
有没有办法找到双字母组、三字母组或更多字母组的频率?
谢谢!
要识别复合标记,或者在 quanteda 术语中,短语,您需要使用固定化合物列表来复合标记。 (还有其他方法,比如用textstat_collocations()
加过滤,但是既然你这里有一个固定的列表供选择,这个是最简单的。)
library("quanteda")
## Package version: 3.0
## Unicode version: 10.0
## ICU version: 61.1
## Parallel computing: 12 of 12 threads used.
## See https://quanteda.io for tutorials and examples.
library("quanteda.textstats")
a_corpus <- head(data_corpus_inaugural)
toks <- tokens(a_corpus)
toks <- tokens_compound(toks, phrase("United States"), concatenator = " ")
freq_grouped_year <- textstat_frequency(dfm(toks, tolower = FALSE), groups = Year)
freq_word_year <- subset(freq_grouped_year, freq_grouped_year$feature %in% "United States")
library("ggplot2")
ggplot(freq_word_year, aes(x = group, y = frequency)) +
geom_point() +
# scale_y_continuous(limits = c(0, 300), breaks = c(seq(0, 300, 30))) +
xlab(NULL) +
ylab("Frequency") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
我想要做的是找到多个 words/phrases 的频率并按年份将它们绘制在图表中。
我已经能够做到这一点,比如“美国”,但我无法表达多个词,比如“美国”。
我的 df 有一个用于实际文本的列,然后是用于元数据的附加列,例如作者、年份和组织。
这是我用来处理像“美国”这样的单词的代码:
a_corpus <- corpus(df, text = "text")
freq_grouped_year <- textstat_frequency(dfm(tokens(a_corpus)),
groups = a_corpus$Year)
# COLLECTION NAME - Filter the term "american", use lower case words
freq_word_year <- subset(freq_grouped_year, freq_grouped_year$feature
%in% "american")
ggplot(freq_word_year, aes(x = group, y = frequency)) +
geom_point() +
scale_y_continuous(limits = c(0, 300), breaks = c(seq(0, 300,
30))) +
xlab(NULL) +
ylab("Frequency") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
当我尝试使用像“united states”这样的二元字母时,没有任何显示。据我了解,dfm 创建了一个单独的单词列表,因此它们无论如何都不会排序,因此寻找双字母组或更多字母组是行不通的。
有没有办法找到双字母组、三字母组或更多字母组的频率?
谢谢!
要识别复合标记,或者在 quanteda 术语中,短语,您需要使用固定化合物列表来复合标记。 (还有其他方法,比如用textstat_collocations()
加过滤,但是既然你这里有一个固定的列表供选择,这个是最简单的。)
library("quanteda")
## Package version: 3.0
## Unicode version: 10.0
## ICU version: 61.1
## Parallel computing: 12 of 12 threads used.
## See https://quanteda.io for tutorials and examples.
library("quanteda.textstats")
a_corpus <- head(data_corpus_inaugural)
toks <- tokens(a_corpus)
toks <- tokens_compound(toks, phrase("United States"), concatenator = " ")
freq_grouped_year <- textstat_frequency(dfm(toks, tolower = FALSE), groups = Year)
freq_word_year <- subset(freq_grouped_year, freq_grouped_year$feature %in% "United States")
library("ggplot2")
ggplot(freq_word_year, aes(x = group, y = frequency)) +
geom_point() +
# scale_y_continuous(limits = c(0, 300), breaks = c(seq(0, 300, 30))) +
xlab(NULL) +
ylab("Frequency") +
theme(axis.text.x = element_text(angle = 90, hjust = 1))