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

基于关键词列表自动分类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)

核心逻辑说明

  1. 精准匹配:用\\b(单词边界)配合grepl避免部分误匹配(比如不会把"private"识别到含"privates"的文本里),同时开启ignore.case = TRUE兼容大小写差异
  2. 多类型处理:通过sapply遍历所有关键词子列表,一次性筛选出所有匹配的类型名称,再用paste(collapse = ", ")合并为字符串
  3. 空值处理:无匹配时返回空字符串,完全符合需求中的留空要求

常见问题修正点

如果你的尝试代码有以下问题,上述代码已针对性解决:

  • 仅匹配单个关键词/单个子列表,未遍历所有分类
  • 未处理多类型匹配的合并逻辑
  • 未使用单词边界导致误匹配
  • 无匹配时未正确留空

内容的提问来源于stack exchange,提问作者rösti23

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:47:31