You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R的Quanteda语料库中统计各文档特定元音频率?

统计Quanteda语料库中文档的高低元音频率解决方案

咱们可以利用Quanteda的token操作结合正则表达式来实现这个需求,刚好能用到你熟悉的token_select()和ntoken()函数,下面是基于你提供的示例代码的完整实现:

首先,先运行你给出的基础代码创建语料库:

require(quanteda)
text1 <- "This is some gibberish for you."
text2 <- "Some more gibberish. Enjoy!"
text3 <- "Gibber, gibber, gibber away."
corp <- rbind(text1, text2, text3) %>% quanteda::corpus()

接下来,咱们一步步处理:

  1. 将文档拆分为单个字符的tokens
    要统计单个元音的频率,首先得把每个文档拆成单个字符的token,用tokens()函数并指定what = "character"就能实现:

    char_tokens <- tokens(corp, what = "character")
    
  2. 筛选出所有元音字符
    用token_select()结合正则表达式[aeiouAEIOU]来筛选出所有元音(包含大小写):

    vowel_tokens <- token_select(char_tokens, pattern = "[aeiouAEIOU]", valuetype = "regex")
    
  3. 分别统计高元音和低元音的数量

    • 高元音是e、i(含大小写),用token_select()筛选后用ntoken()计数:
      high_vowel_counts <- ntoken(token_select(vowel_tokens, pattern = "[eiEI]", valuetype = "regex"))
      
    • 低元音是a、o、u(含大小写),用同样的方式统计:
      low_vowel_counts <- ntoken(token_select(vowel_tokens, pattern = "[aouAOU]", valuetype = "regex"))
      
  4. 整合结果为数据框
    把每个文档的高低元音计数整合到一起,方便查看:

    vowel_stats <- data.frame(
      文档 = names(corp),
      高元音数量 = high_vowel_counts,
      低元音数量 = low_vowel_counts,
      总元音数量 = high_vowel_counts + low_vowel_counts
    )
    print(vowel_stats)
    

运行这段代码后,你会得到每个文档的高低元音统计结果,示例输出大概是这样:

文档 高元音数量 低元音数量 总元音数量
text1 text1          6          4         10
text2 text2          5          4          9
text3 text3          6          3          9

另外,如果你想更高效地用dfm来实现,也可以试试这个方法:

# 创建字符级dfm
char_dfm <- dfm(char_tokens)
# 重编码特征为高低元音并按文档求和
dfm_recode(char_dfm,
           高元音 = c("e", "E", "i", "I"),
           低元音 = c("a", "A", "o", "O", "u", "U")) %>%
  dfm_group(groups = docnames(.)) %>%
  convert(to = "data.frame")

这个方法直接通过dfm的重编码和分组求和,能快速得到统计结果,和上面的方式效果一致。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:48:52