LangChain中RegexTextSplitter无法导入,寻求正则分割文档的替代方案
LangChain中RegexTextSplitter无法导入,寻求正则分割文档的替代方案
我太懂你这种郁闷了——想导入RegexTextSplitter做正则文本分割,不管是从langchain.text_splitter还是新拆分出来的langchain_text_splitters里导都报错,看当前环境的分割器列表里也确实找不到它,甚至连官方文档还挂着旧的导入示例,这确实挺坑的。
其实这是LangChain版本迭代导致的:RegexTextSplitter在新版本里已经被移除或者重构了,部分旧文档没及时更新,才出现了文档和实际代码不匹配的情况。
不过不用慌,我们有两种靠谱的替代方案:
方案一:用RecursiveCharacterTextSplitter自定义正则分隔符
RecursiveCharacterTextSplitter本身就支持通过separators参数传入正则表达式列表,完全能实现正则分割的需求,而且它还自带递归分割、chunk大小控制这些实用功能。举个例子:
from langchain.text_splitter import RecursiveCharacterTextSplitter # 这里可以替换成你需要的正则规则,比如按段落、特定符号分割 splitter = RecursiveCharacterTextSplitter( separators=[r"\n\n", r"\s{2,}", r"\."], # 示例:按空行、两个以上空格、句号分割 chunk_size=1000, # 按需调整chunk大小 chunk_overlap=150, # 重叠部分避免上下文丢失 length_function=len ) # 分割你的文档 target_text = "这里是你需要分割的长文档内容..." split_chunks = splitter.split_text(target_text)
方案二:基于TextSplitter实现自定义正则分割器
如果需要更定制化的正则分割逻辑,可以直接继承基础的TextSplitter类,自己实现一个专属的正则分割器,灵活性拉满:
from langchain.text_splitter import TextSplitter import re class CustomRegexSplitter(TextSplitter): def __init__(self, regex_pattern: str, **kwargs): super().__init__(**kwargs) self.regex_pattern = regex_pattern def split_text(self, text: str) -> list[str]: # 用正则分割文本 raw_chunks = re.split(self.regex_pattern, text) # 过滤空字符串并清理多余空格 return [chunk.strip() for chunk in raw_chunks if chunk.strip()] # 使用示例:按三个以上的感叹号分割 splitter = CustomRegexSplitter(regex_pattern=r"!!!+") split_chunks = splitter.split_text("第一段内容!!!第二段内容!!!!第三段内容")
这两种方案都能完美替代原来RegexTextSplitter的功能,其中方案一最省事,推荐优先尝试。
备注:内容来源于stack exchange,提问作者Dev_A
相关产品推荐
相关产品推荐

