基于关键词列表自动分类EV充电政策文本的R代码需求
解决EV充电政策文本的关键词匹配与类型填充问题
修正后的完整实现代码
先定义示例数据(可替换为你的实际数据集)和分类词表,再通过自定义函数完成匹配填充:
# 示例政策数据框(替换为你的实际数据) policy_df <- structure(list( policy_desc = c( "支持私人(private)充电桩安装补贴", "公共(public)停车场充电设施建设", "商业(commercial)楼宇配套充电网络,同时覆盖私人用户", "无相关充电类型描述的政策" ), charging_type = character(4) # 待填充的目标列 ), class = "data.frame", row.names = c(NA, -4L)) # 分类词表:子列表名称对应匹配关键词(可按需扩展) keyword_list <- list( private = c("private", "私人"), public = c("public", "公共"), commercial = c("commercial", "商业") ) # 自定义匹配函数:检测文本所属充电类型 match_charging_type <- function(text, keyword_list) { # 遍历所有子列表,筛选出文本包含对应关键词的类型名称 matched_types <- names(keyword_list)[sapply(keyword_list, function(kw_group) { any(grepl(paste0("\\b", kw_group, "\\b"), text, ignore.case = TRUE)) })] # 格式化结果:多类型用逗号分隔,无匹配则留空 if (length(matched_types) > 0) { paste(matched_types, collapse = ", ") } else { "" } } # 应用函数填充charging_type列 policy_df$charging_type <- sapply(policy_df$policy_desc, match_charging_type, keyword_list = keyword_list) # 查看最终结果 print(policy_df)
核心逻辑说明
- 精准匹配:用
\\b(单词边界)配合grepl避免部分误匹配(比如不会把"private"识别到含"privates"的文本里),同时开启ignore.case = TRUE兼容大小写差异 - 多类型处理:通过
sapply遍历所有关键词子列表,一次性筛选出所有匹配的类型名称,再用paste(collapse = ", ")合并为字符串 - 空值处理:无匹配时返回空字符串,完全符合需求中的留空要求
常见问题修正点
如果你的尝试代码有以下问题,上述代码已针对性解决:
- 仅匹配单个关键词/单个子列表,未遍历所有分类
- 未处理多类型匹配的合并逻辑
- 未使用单词边界导致误匹配
- 无匹配时未正确留空
内容的提问来源于stack exchange,提问作者rösti23
相关产品推荐
相关产品推荐

