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

LangChain递归文本分割器生成单字符块问题及修复咨询

修复LangChain文本分割生成单字符块的问题

核心问题

text_splitter.create_documents()方法需要传入字符串列表(每个元素是一段待分割的文本),但你直接传了单个长字符串。Python会自动将字符串拆解为单个字符的迭代对象,导致每个字符被当作独立文本分割,最终生成单字符块。

另外,你设置的分隔符["%"]如果在PDF文本中不存在,分割器会退回到按字符强制分割,这也会加剧问题。

修复步骤

  1. 将合并后的长字符串放入列表中传给create_documents()
  2. 建议保留默认分隔符(适配自然文本的段落、换行、标点),除非有特殊业务需求

修正后的完整代码

from PyPDF2 import PdfReader  # 注意:导入正确的PDF读取类
from langchain.text_splitter import RecursiveCharacterTextSplitter

# 提取PDF文本并合并为长字符串
reader = PdfReader('/content/Colorado_property_law_first50pages.pdf')
colorado_raw = ''
for page in reader.pages:
    colorado_raw += page.extract_text()

# 初始化文本分割器(使用默认分隔符适配自然文本)
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=3000,
    chunk_overlap=50,
    length_function=len,
    add_start_index=True,
)

# 关键修改:将长字符串放入列表中传入
chunks = text_splitter.create_documents([colorado_raw])

额外优化方案

其实不需要手动合并PDF文本,直接用LangChain的PyPDFLoader加载PDF,分割器会自动处理页面内容,代码更简洁:

from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

# 直接加载PDF文件
loader = PyPDFLoader('/content/Colorado_property_law_first50pages.pdf')
documents = loader.load()

# 分割文本
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=3000,
    chunk_overlap=50,
    add_start_index=True,
)
chunks = text_splitter.split_documents(documents)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:32:55