在 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:为特定语言提供语言特定的分隔符。
通过这些方法,用户可以轻松定制自己的文本切割逻辑,满足不同文本处理需求。