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

大型数据库中预定义搜索字符串,统计每行字符串及变体频率

大型数据库字符串变体频率统计解决方案

我需要针对大型数据库实现一个统计方案:预先定义待搜索的字符串,生成统计表格,计算每行中这些字符串及其变体的出现频率。

示例数据

strings <- c("dog", "cat", "mouse")

var1 <- c("black dog", "white dog", "angry dog", "dogs and cats are nice", "dog")
var2 <- c("white cat", "black cat", "tiny cat", NA, "cow")
var3 <- c("little mouse", "big mouse", NA, NA, "mouse")
data <- data.frame(var1, var2, var3)

预期输出

当搜索dog、cat和mouse时,预期输出如下:

dog&cat 4
mouse 3

解决方案

实现思路

  • 覆盖字符串变体:用正则匹配目标字符串及常见变体(如复数形式),确保匹配完整单词,避免误判。
  • 逐行匹配统计:对每行数据忽略空值后,检查是否存在目标组合,最终汇总每行匹配的次数。
  • 适配大型数据:使用向量化操作替代循环,提升处理效率。

代码实现

library(stringr)
library(dplyr)

# 定义搜索组合及其变体匹配正则
search_groups <- list(
  "dog&cat" = regex("\\b(dog|dogs|cat|cats)\\b", ignore_case = TRUE),
  "mouse" = regex("\\b(mouse|mice)\\b", ignore_case = TRUE)
)

# 检查单行是否匹配目标组合
check_row_matches <- function(row_data) {
  cleaned_row <- na.omit(row_data)
  sapply(search_groups, function(pattern) any(str_detect(cleaned_row, pattern)))
}

# 统计每行匹配情况并汇总
total_counts <- data %>%
  rowwise() %>%
  do(data.frame(t(check_row_matches(c(.$var1, .$var2, .$var3))))) %>%
  colSums()

# 输出结果
for (i in seq_along(total_counts)) {
  cat(names(total_counts)[i], total_counts[i], "\n")
}

代码说明

  • search_groups:为每个统计组合定义正则,\\b确保匹配独立单词,避免部分匹配(如dog不会匹配doggy),同时包含复数等变体。
  • check_row_matches:清理单行的空值后,判断该行是否存在对应组合的匹配项。
  • 通过rowwise()逐行处理数据,colSums()汇总所有行的匹配次数,最终输出预期格式的结果。

内容的提问来源于stack exchange,提问作者onlyjust17

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:31:18