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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:42:35