LangChain CharacterTextSplitter字符分割异常及Chunk本地存储问题
解决方案:CharacterTextSplitter分割异常与Chunk存储方法
一、解决仅生成1个Chunk的问题
你遇到的核心问题大概率是未设置正确的分隔符,默认的CharacterTextSplitter会按空格分割文本(避免拆分单词),无法实现纯字符级的滑动窗口分割。另外需确保原始文本长度大于设定的chunk_size(30字符),否则自然只会生成1个Chunk。
正确的字符级滑动窗口分割代码
from langchain_text_splitters import CharacterTextSplitter # 替换为你的科幻书籍长文本 long_text = "在遥远的未来,人类已经殖民了整个银河系。各个星球上的文明互相交流,也偶尔爆发冲突。一艘名为“探索者号”的星际飞船正在前往未知的星系,寻找适合人类居住的新星球。船员们面临着各种挑战,包括宇宙射线、未知的外星生物,以及漫长旅程带来的心理压力。" # 初始化分割器:重点设置separator=""实现纯字符拆分 splitter = CharacterTextSplitter( chunk_size=30, chunk_overlap=5, separator="", # 空字符串强制按字符粒度分割 length_function=len, ) # 执行分割 chunks = splitter.split_text(long_text) # 验证分割结果 for i, chunk in enumerate(chunks): print(f"Chunk {i+1}: {chunk} (字符数: {len(chunk)})")
运行后即可得到符合预期的、带5字符重叠的滑动窗口式Chunk。
二、Chunk本地存储方法
无需额外依赖,用基础Python就能实现,以下是几种常用方案:
1. 每个Chunk单独存为纯文本文件
适合需要单独访问单个Chunk的场景:
for idx, chunk in enumerate(chunks): with open(f"scifi_chunk_{idx+1}.txt", "w", encoding="utf-8") as f: f.write(chunk)
2. 所有Chunk存入单个JSON文件
适合批量读取或结构化管理的场景:
import json with open("scifi_chunks.json", "w", encoding="utf-8") as f: json.dump(chunks, f, ensure_ascii=False, indent=2)
3. 存入CSV文件
适合用表格工具查看或分析的场景:
import csv with open("scifi_chunks.csv", "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerow(["chunk_id", "content"]) for idx, chunk in enumerate(chunks): writer.writerow([idx+1, chunk])
内容的提问来源于stack exchange,提问作者R_Student
相关产品推荐
相关产品推荐

