微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在R中查找和绘制n-gram的频率?

如何解决如何在R中查找和绘制n-gram的频率?

我想要做的是找到多个单词/短语的频率,并按年份将它们绘制在图表中。

我已经能够做到这一点,比如“美国”这样的一个词,但在表达多个词时遇到了麻烦,比如“美国”。

我的 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))

当我尝试使用像“美国”这样的二元语法时,什么也没有显示。据我了解,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))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。