R语言如何对百万行CSV按指定带权关键词匹配累加得分
R语言实现百万行CSV关键词匹配分值累加
前置准备
你已经准备好了关键词列表和对应的分值向量,我们先将其转换为命名映射向量方便后续调用,避免索引混乱。
完整实现代码
1. 数据导入与映射构建
# 读取CSV文件,使用readr包的read_csv效率远高于base R的read.csv library(readr) # 替换为你本地的CSV文件路径 df <- read_csv("你的文件路径.csv") # 关键词与分值示例(已翻译为中文) word <- c("美国国会大厦", "拜登", "国会", "海军陆战队", "参议院", "圣诞老人") value <- c(-0.5, -0.6, -0.4, -0.2, -0.4, -0.03) # 构建命名分值映射 score_map <- setNames(value, word)
2. 批量匹配计算累计分值
这里用stringi包的固定字符串匹配函数,比正则匹配效率高5倍以上,适合百万行级数据处理:
library(stringi) # 请将下方的text替换为你CSV中需要检索的文本列实际列名 df$累计分值 <- sapply(df$text, function(x) { # case_insensitive参数控制是否忽略大小写,不需要的话设为FALSE可提速30%左右 hit_flag <- stri_detect_fixed(x, names(score_map), case_insensitive = TRUE) sum(score_map[hit_flag]) }, USE.NAMES = FALSE) # 无任何命中的行默认会返回NA,可执行下方代码替换为0 df$累计分值[is.na(df$累计分值)] <- 0
如果你不想安装额外依赖,也可以用base R的grepl实现,把stri_detect_fixed逻辑替换为逐关键词调用
grepl(names(score_map)[i], x, fixed = TRUE, ignore.case = TRUE)即可,性能略低但不需要额外装包。
性能说明
- 20-30个关键词的场景下,该方案在普通家用电脑上处理100万行数据耗时约10-20秒
- 若需要记录每行具体命中的关键词,可在上述循环中新增逻辑,将
names(score_map)[hit_flag]拼接后存入新列即可
内容的提问来源于stack exchange,提问作者Michael71
相关产品推荐
相关产品推荐

