text_splitter常见方法

在 LangChain 中,text_splitter 是一个用于将长文本切割成较小文本块的工具,它通常用于处理需要嵌入(embedding)或向量化的长文本数据。text_splitter 类及其派生类(如 RecursiveCharacterTextSplitter)提供了一些常见方法来帮助用户处理文本的切割。以下是一些常见的 text_splitter 方法及其使用方式,基于官方文档:

1. split_text(text: str) -> list[str]

描述:该方法是最基本的文本切割方法,接收一个长文本,将其根据设定的分隔符切割为若干小块。返回的结果是一个包含多个字符串的列表。

常见参数:

  • text: 输入的长文本字符串。

示例:

python 复制代码
from langchain.text_splitters import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=200,
    chunk_overlap=50
)
text = "This is a long text. It will be split into smaller chunks based on the parameters."
chunks = text_splitter.split_text(text)
print(chunks)

返回:一个包含切割后小块的列表。

2. create_documents(texts: list[str], metadatas: list[dict] | None = None) -> list[Document]

描述 :将一组文本切割后,转换为 Document 对象。这个方法通常用于后续处理,比如将文档进行嵌入(embedding)或存储。

常见参数:

  • texts: 文本列表,每个元素是需要被切割的文本。
  • metadatas: 一个与文本对应的元数据列表,通常用于存储关于文档的附加信息(例如,来源、作者等)。默认情况下是 None。

示例:

python 复制代码
from langchain.text_splitters import RecursiveCharacterTextSplitter

texts = ["This is the first document.", "This is the second document."]
metadatas = [{"source": "doc1"}, {"source": "doc2"}]

text_splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=20)
documents = text_splitter.create_documents(texts, metadatas=metadatas)

for doc in documents:
    print(doc.page_content)
    print(doc.metadata)

返回:每个文档对象包含了切割后的内容以及相应的元数据。

3. split_documents(documents: list[Document]) -> list[Document]

描述 :此方法与 split_text 类似,但作用对象是 Document 类型的数据,而不仅仅是原始文本。用于批量处理 Document 对象。

常见参数:

  • documents: 一个包含多个 Document 对象的列表,每个 Document 包含了要切割的文本内容。

示例:

python 复制代码
from langchain.text_splitters import RecursiveCharacterTextSplitter
from langchain.schema import Document

documents = [Document(page_content="This is the first long document..."),
             Document(page_content="This is another long document...")]

text_splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=20)
split_documents = text_splitter.split_documents(documents)

for doc in split_documents:
    print(doc.page_content)

返回 :返回切割后的 Document 对象列表。

4. get_separators_for_language(language: str) -> list[str]

描述:此静态方法返回给定语言的常见文本分隔符。适用于代码或结构化文档,能够根据语言的特点选择合适的分隔符。

常见参数:

  • language: 语言的名称或类型,如 python、javascript、markdown 等。

示例:

python 复制代码
from langchain.text_splitters import RecursiveCharacterTextSplitter, Language

# 获取适用于 Python 代码的分隔符
separators = RecursiveCharacterTextSplitter.get_separators_for_language(Language.PYTHON)
print(separators)

返回:返回该语言相关的分隔符列表。

5. from_language(language: str, **kwargs) -> RecursiveCharacterTextSplitter

描述 :此方法是一个工厂方法,根据指定语言自动配置 RecursiveCharacterTextSplitter,并初始化语言特定的分隔符。

常见参数:

  • language: 需要分隔文本的语言(如 Python、Markdown、HTML 等)。
  • *kwargs: 其他关键字参数,用于进一步定制切割器的行为,如 chunk_size、chunk_overlap 等。

示例:

python 复制代码
from langchain.text_splitters import RecursiveCharacterTextSplitter, Language

text_splitter = RecursiveCharacterTextSplitter.from_language(Language.PYTHON, chunk_size=200, chunk_overlap=50)

返回 :返回一个配置好语言特定分隔符的 RecursiveCharacterTextSplitter 实例。

6. from_tiktoken_encoder(encoder) -> RecursiveCharacterTextSplitter

描述 :此工厂方法将给定的编码器(如 TikToken 编码器)与 RecursiveCharacterTextSplitter 结合,帮助用户在使用 token 序列进行切割时更精确地控制文本的拆分。

常见参数:

  • encoder: 用于编码的 TikToken 编码器实例。

示例:

python 复制代码
from langchain.text_splitters import RecursiveCharacterTextSplitter
from tiktoken import Tokenizer

tokenizer = Tokenizer.from_pretrained("tiktoken")
text_splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(tokenizer)

返回 :返回一个结合了编码器的 RecursiveCharacterTextSplitter 实例。

小结

text_splitter 提供了多个功能强大的方法,能够帮助开发者灵活处理文本切割任务,特别是在处理大文本和文档时。最常用的方法包括:

  • split_text:直接将文本切割成较小的块。
  • create_documents:将切割后的文本转换为 Document 对象,适用于文档存储和后续处理。
  • split_documents:批量切割 Document 对象。
  • from_language 和 get_separators_for_language:为特定语言提供语言特定的分隔符。

通过这些方法,用户可以轻松定制自己的文本切割逻辑,满足不同文本处理需求。

相关推荐
happylifetree11 小时前
Python70:核心语法-函数进阶-案例2
python
王中阳Go11 小时前
两个入口答案不一致先别调模型:6 行入口口径对账表(附脚本)
人工智能·后端·python·大语言模型·1024程序员节
BK贝壳12 小时前
bool-hybrid-array 落盘我只认 .bha:用 Create_BHA / Ask_BHA 做布尔数组序列化
数据结构·python·numpy·1024程序员节
Sakura_j_h_12 小时前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务
supabc12313 小时前
欧盟电子发票(XRechnung/Peppol/ZUGFeRD)踩坑记:用 Python 不装 Java 跑官方校验规则
xml·python·开源·电子发票·1024程序员节
ZhengEnCi14 小时前
AI Agent工具调用防护层怎么写-一份能直接跑的Python四层拦截实现
python·llm·agent
ZhengEnCi14 小时前
AI Agent工具误调用怎么解决-从参数校验到高危二次确认的四层工程防线
python·llm·agent
镜子AI15 小时前
镜子AI工程教程:用Python实现关键词布局检查器与语义改写查重(附完整代码)
人工智能·python·microsoft
小oo呆16 小时前
【学习心得】Python协程
python
信誓旦旦的程序猿17 小时前
【Python量化实战宝典 #22】涨跌停、连板情绪手册:情绪指标构建(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口