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: 语言的名称或类型,如 pythonjavascriptmarkdown 等。

示例

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_sizechunk_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_languageget_separators_for_language:为特定语言提供语言特定的分隔符。

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

相关推荐
数据知道2 小时前
claw-code 源码分析:大型移植的测试哲学——如何用 unittest 门禁守住「诚实未完成」的口碑?
开发语言·python·ai·claude code·claw code
炸炸鱼.2 小时前
Python 网络编程入门(简易版)
网络·python
技术小黑2 小时前
TensorFlow学习系列10 | 数据增强
python·深度学习·tensorflow2
万粉变现经纪人2 小时前
如何解决 import aiohttp ModuleNotFoundError: No module named ‘aiohttp’
python·scrapy·beautifulsoup·aigc·pillow·pip·httpx
AC赳赳老秦2 小时前
OpenClaw image-processing技能实操:批量抠图、图片尺寸调整,适配办公需求
开发语言·前端·人工智能·python·深度学习·机器学习·openclaw
diving deep2 小时前
从零构建大模型--实操--搭建python环境
开发语言·python
qq_白羊座3 小时前
Langchain、Cursor、python的关系
开发语言·python·langchain
小陈的进阶之路3 小时前
接口Mock测试
python·mock
kiku18183 小时前
Python网络编程
开发语言·网络·python