text_spliter = CharacterTextSplitter(
separator=‘,’,
chunk_size=10,
chunk_overlap=2
)
result = text_spliter.split_text(“今天天气好晴朗,处处好风光啊好风光蝴蝶儿忙啊,蜜蜂也忙,小鸟儿忙着,白云也忙”)
print(result)
“”"
运行结果 => [‘今天天气好晴朗’, ‘,处处好风光啊好风光蝴蝶儿忙啊’, ‘,蜜蜂也忙’, ‘,小鸟儿忙着’, ‘,白云也忙’]
当 separator=‘,’ 一旦添加之后 , 逗号之后,chunk_overlap的值好像就失效了,失去作用了,有没有大佬遇到过这个问题
“”"
这里更接近“按分隔符切开的整段,无法组成你预期的重叠”,不一定是 chunk_overlap 没有生效。
CharacterTextSplitter 先按 separator 拆出片段,再合并到目标大小。重叠阶段保留的是这些片段;某一整段已经长于 chunk_overlap=2 时,可能没有可保留的片段。因此它不保证每一对结果都恰好重叠两个字符,单个不可再分的片段也可能超过 chunk_size。
我用你帖中的原始文本,在 Python 3.12、langchain-text-splitters==1.1.2 的隔离环境实际运行:
from langchain_text_splitters import CharacterTextSplitter
text = "今天天气好晴朗,处处好风光啊好风光蝴蝶儿忙啊,蜜蜂也忙,小鸟儿忙着,白云也忙"
chunks = CharacterTextSplitter(
separator=",", chunk_size=10, chunk_overlap=2
).split_text(text)
print(chunks)
print([len(c) for c in chunks])
结果:
['今天天气好晴朗', '处处好风光啊好风光蝴蝶儿忙啊', '蜜蜂也忙,小鸟儿忙着', '白云也忙']
[7, 14, 10, 4]
如果你确实要按当前默认 len 计数,得到逐字符的十字符窗口、两字符重叠,可以把 separator 改为 ""。同一文本的本地结果长度为 [10, 10, 10, 10, 6],并已检查每一相邻结果的末尾/开头两字符相同。
这只是在这个配置与文本下的验证,不表示按字符切分一定更适合你的检索业务,也不是按模型 token 计数。
参考:CharacterTextSplitter、基础参数。
你原帖结果还保留了后段开头的逗号,与我这个版本的默认行为不同;请补充原环境包版本和 keep_separator 设置,才能精确对照,而不能把新版输出当成旧版的复测结果。