文本分块-Python分行分段的正则表达式

root
abc abc
  • 17 May

同时,根据用户提供的引用[^1],里面提到使用LangChain的文档拆分方法,可能包括RecursiveCharacterTextSplitter,它默认使用[\n\n, \n, " ", ""]作为分隔符。这可能是一个参考点,用户可能需要类似的正则表达式。

总结,可能的正则表达式模式包括:

分割段落:r'\n{2,}'
分割句子:r'(?<!\b\w.\w.)(?<![A-Z][a-z].)(?<=[.!?])\s+' (处理常见句子结束)
合并被换行的段落:先替换\n为空格,然后按双换行符分割
需要解释每个正则表达式的作用,并提醒用户根据具体文档结构调整,可能需要测试和调整。在RAG系统中处理PDF文档分块时,正则表达式常用于识别文本中的自然分隔符(如段落、标题或句子)。以下是几种适用的正则表达式模式及其应用场景:

  1. 段落分块
    PDF转换后的文本常因格式问题出现多余换行符,可通过以下正则表达式合并段落:

合并被换行打断的段落(替换单个换行符为空格)

text = re.sub(r'(?<!\n)\n(?!\n)', ' ', text)

按双换行符分割段落

chunks = re.split(r'\n{2,}', text)
正则表达式:$r'\n{2,}'$
作用:将两个及以上连续换行符作为段落分隔符。

  1. 句子分块
    按句子分割时需排除缩写干扰(如“U.S.A.”):

分割句子(支持中英文标点)

sentence_pattern = r'(?<!\b\w.\w.)(?<![A-Z][a-z].)(?<=[.!?。?!])\s+'
chunks = re.split(sentence_pattern, text)
正则表达式:$r'(?<!\b\w.\w.)(?<![A-Z][a-z].)(?<=[.!?。?!])\s+'$
作用:识别句末标点后的空格作为句子分隔符。

  1. 标题分块
    若PDF包含结构化标题(如“## Section 1”),可通过模式匹配标题:

匹配Markdown风格标题(如## 标题)

heading_pattern = r'\n#{2,}\s.\n'
chunks = re.split(heading_pattern, text)
复制代码
正则表达式:$r'\n#{2,}\s.
\n'$
作用:以多级标题为分块边界。

  1. LangChain默认分块策略
    LangChain的RecursiveCharacterTextSplitter默认使用优先级分隔符:

separators = ["\n\n", "\n", " ", ""] # 按段落 > 换行 > 空格逐级拆分
正则表达式逻辑:隐式使用$r'\n\n'$、$r'\n'$和$r' '$。
注意事项
动态调整:需根据PDF实际内容测试正则表达式效果。
重叠分块:建议添加滑动窗口(如保留相邻块的部分重叠文本)以提升检索连贯性。