如何用Quanteda识别并剔除含中文内容的数据集行
问题解答
完全可以通过Quanteda实现该需求,25万条观测的量级处理速度足够,以下是可直接复用的实现方案:
核心实现逻辑
利用Unicode字符属性\p{Han}匹配所有中文汉字(含简繁体),匹配准确率远高于手动指定字符区间,不会出现漏判、误判问题。Quanteda默认依赖的stringi包原生支持该类Unicode匹配,无需额外安装依赖。
可运行代码
library(quanteda) # 构造示例数据集(你实际使用时替换为自己的数据集即可) call_id<- c("001","002","003","004","005","012","024") transcript <- c("All the best and happy birthday", "万事如意,生日快乐", "See you tomorrow", "Nice hearing from you", "再相见", "玩", "恭喜你 ") df <- as.data.frame(cbind(call_id, transcript)) # 1. 检测transcript列是否包含中文 has_chinese <- stri_detect_regex(df$transcript, "[\\p{Han}]") # 2. 获取含中文观测的call_id chinese_call_ids <- df$call_id[has_chinese] # 3. 剔除含中文的行,得到仅含英文的数据集 df_filtered <- df[!has_chinese, ]
如果你不需要调用Quanteda的其他功能,也可以用base R的正则实现,逻辑完全一致:
has_chinese <- grepl("[\\p{Han}]", df$transcript, perl = TRUE) df_filtered <- df[!has_chinese, ]
效果验证
用示例数据运行后,输出的df_filtered会保留call_id为001、003、004的3条纯英文观测,其余含中文的条目都会被剔除,完全符合预期。
内容的提问来源于stack exchange,提问作者wiwi123
相关产品推荐
相关产品推荐

