LangChain递归文本分割器生成单字符块问题及修复咨询
修复LangChain文本分割生成单字符块的问题
核心问题
text_splitter.create_documents()方法需要传入字符串列表(每个元素是一段待分割的文本),但你直接传了单个长字符串。Python会自动将字符串拆解为单个字符的迭代对象,导致每个字符被当作独立文本分割,最终生成单字符块。
另外,你设置的分隔符["%"]如果在PDF文本中不存在,分割器会退回到按字符强制分割,这也会加剧问题。
修复步骤
- 将合并后的长字符串放入列表中传给
create_documents() - 建议保留默认分隔符(适配自然文本的段落、换行、标点),除非有特殊业务需求
修正后的完整代码
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
相关产品推荐
相关产品推荐

