如何在R中使用Hunspell对tribble在管道中做纠错与词干提取后运行unnest_tokens
R中结合Hunspell实现文本纠错、词干提取与词频统计的实现方案
方案1:拆词后逐词处理(推荐,准确率更高)
先拆分单词再做校验纠错,避免整句纠错的上下文歧义问题,符合你只统计有效正确单词的需求。
前置依赖
首先安装加载所需包:
# 未安装的话先执行 install.packages(c("dplyr", "tidytext", "hunspell")) library(dplyr) library(tidytext) library(hunspell)
完整处理流程
df %>% # 拆分单词,注意原数据列名是小写author,原代码的Author大写会报错 unnest_tokens(input = text, output = word) %>% # 新增列:校验单词是否拼写正确 mutate(is_correct = hunspell_check(word)) %>% # 对错误单词提取第一个拼写建议,无建议则返回NA mutate(corrected = ifelse( is_correct, word, sapply(hunspell_suggest(word), function(x) if(length(x)>0) x[1] else NA) )) %>% # 过滤无有效修正结果的无效词(如示例中的zysxzw) filter(!is.na(corrected)) %>% # 对修正后的单词提取词干 mutate(stem = sapply(hunspell_stem(corrected), function(x) if(length(x)>0) x[1] else corrected)) %>% # 按作者和修正后/词干结果统计频次 count(author, stem, sort = TRUE)
输出说明
对示例数据运行后会自动过滤无效词zysxzw,所有错词如aree修正为are、drivng修正为driving,再基于修正后的词干做统计,完全符合需求。
方案2:整句纠错后拆词(适合大数据量,速度更快)
如果数据量很大,逐词处理效率偏低,可以先对整句做批量纠错再拆分统计:
df %>% # 整句拼写纠错 mutate(corrected_text = hunspell_correct(text)) %>% # 拆分单词 unnest_tokens(input = corrected_text, output = word) %>% # 仅保留拼写正确的有效单词 filter(hunspell_check(word)) %>% # 提取词干 mutate(stem = sapply(hunspell_stem(word), function(x) if(length(x)>0) x[1] else word)) %>% # 统计频次 count(author, stem, sort = TRUE)
注意事项
整句纠错的准确率略低于逐词处理,部分生造无建议的词会保留原始值,上述代码中已经增加了拼写校验过滤逻辑,确保仅统计有效单词。
内容的提问来源于stack exchange,提问作者Alex_
相关产品推荐
相关产品推荐

