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

如何识别两篇文本间的重叠单词序列(R语言场景)

识别文本重叠单词序列的R实现方案

核心思路

先统一文本格式(消除大小写、空格差异),再通过动态定位最长公共连续单词序列,最后还原成符合阅读习惯的文本。

实现步骤与代码

1. 文本预处理函数

标准化文本格式,消除大小写、空格、标点的格式差异,将文本分割为单词/标点单元:

preprocess_text <- function(text) {
  # 统一转为小写,消除大小写差异
  text <- tolower(text)
  # 标点前后添加空格,便于分割为独立单元
  text <- gsub("([[:punct:]])", " \\1 ", text)
  # 合并连续空格,消除多余空格差异
  text <- gsub("\\s+", " ", text)
  # 去除文本首尾空格
  text <- trimws(text)
  # 分割为单词/标点的向量
  strsplit(text, " ")[[1]]
}

2. 最长公共连续序列识别函数

用动态匹配的方式定位最长重叠序列,并还原为正常文本格式:

find_longest_common_sequence <- function(text1, text2) {
  # 预处理得到标准化的单词向量
  words1 <- preprocess_text(text1)
  words2 <- preprocess_text(text2)
  
  n <- length(words1)
  m <- length(words2)
  
  # 初始化匹配记录矩阵,记录当前位置的最长连续匹配长度
  dp <- matrix(0, nrow = n + 1, ncol = m + 1)
  max_len <- 0
  end_pos <- 0
  
  # 遍历寻找最长连续匹配
  for (i in 1:n) {
    for (j in 1:m) {
      if (words1[i] == words2[j]) {
        dp[i+1, j+1] <- dp[i, j] + 1
        if (dp[i+1, j+1] > max_len) {
          max_len <- dp[i+1, j+1]
          end_pos <- i
        }
      }
    }
  }
  
  # 提取并还原重叠序列
  if (max_len == 0) {
    return("无重叠单词序列")
  } else {
    start_pos <- end_pos - max_len + 1
    common_units <- words1[start_pos:end_pos]
    # 拼接时处理空格与标点的格式,避免标点前出现空格
    result <- ""
    for (unit in common_units) {
      if (grepl("^[[:punct:]]$", unit)) {
        result <- paste0(result, unit)
      } else {
        if (nchar(result) > 0 && !grepl("[[:punct:]]$", substr(result, nchar(result), nchar(result)))) {
          result <- paste0(result, " ")
        }
        result <- paste0(result, unit)
      }
    }
    return(result)
  }
}

3. 测试示例

用题目中的文本测试功能:

text_1 <- "She grew up in the United States. Her father was..."
text_2 <- "I learned that she grew up in the united states.Her father was ..."

# 调用函数获取重叠序列
find_longest_common_sequence(text_1, text_2)

执行后输出:
she grew up in the united states. her father was ...

扩展说明

  • 若需要识别所有重叠序列而非仅最长的,可修改代码记录所有匹配的起始/结束位置,再逐一提取。
  • 处理大规模文本(如9000份作业)时,可优化匹配逻辑的空间复杂度,或采用滑动窗口法提升运行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:57:43