LangChain之文档分割

simon
4
2025-10-16
1. RecursiveCharacterTextSplitter:

功能:递归地根据提供的分隔符列表分割文本,直到每个块的大小不超过指定的chunk_size

from langchain_text_splitters import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(chunk_size=512, separators=["\n", " "])
text = "这里是一段很长的文本..."
chunks = splitter.split_text(text)
2. CharacterTextSplitter:

功能:按照指定的字符数分割文本,简单直接,可能会打断文本的语义完整性。

from langchain_text_splitters import CharacterTextSplitter

splitter = CharacterTextSplitter(chunk_size=512)
text = "这里是一段很长的文本..."
chunks = splitter.split_text(text)
3. SemanticChunker:

功能:基于文本中句子之间的语义相似性将文本分割成块,适用于保持语义完整性的场景。

from langchain_text_splitters import SemanticChunker

chunker = SemanticChunker(chunk_size=512, similarity_threshold=0.9)
text = "这里是一段很长的文本..."
chunks = chunker.split_text(text)
4. SentenceTransformersTokenTextSplitter:

功能:使用 SentenceTransformers 模型的 token 限制来分割文本,适用于需要考虑模型 token 限制的场景。

from langchain_text_splitters import SentenceTransformersTokenTextSplitter

splitter = SentenceTransformersTokenTextSplitter(model_name="all-MiniLM-L6-v2", max_tokens=512)
text = "这里是一段很长的文本..."
chunks = splitter.split_text(text)
5. NLTKTextSplitter:

功能:使用 NLTK 库进行文本分割,适用于自然语言处理任务中的文本分割。

from langchain_text_splitters import NLTKTextSplitter

splitter = NLTKTextSplitter()
text = "这里是一段很长的文本..."
chunks = splitter.split_text(text)
6. KonlpyTextSplitter:

功能:使用 KoNLPy 库进行韩语文本的分割。

from langchain_text_splitters import KonlpyTextSplitter

splitter = KonlpyTextSplitter()
text = "여기에는 긴 텍스트가 있습니다..."
chunks = splitter.split_text(text)
7. HuggingFaceTokenizerTextSplitter:

功能:使用 Hugging Face 的 tokenizer 进行文本分割,可以根据特定的语言模型来分割文本。

from langchain_text_splitters import HuggingFaceTokenizerTextSplitter
from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
splitter = HuggingFaceTokenizerTextSplitter(tokenizer=tokenizer, max_tokens=512)
text = "这里是一段很长的文本..."
chunks = splitter.split_text(text)
8. HTMLHeaderTextSplitSplitter:

功能:根据 HTML 文档中的标题标签来分割文本,适用于处理 HTML 格式的文档。

from langchain_text_splitters import HTMLHeaderTextSplitter

# 初始化分割器,指定在哪些头部标签处分割
splitter = HTMLHeaderTextSplitter(headers_to_split_on=["h1", "h2"])

# 待分割的 HTML 文本
html_text = """
<html>
    <body>
        <h1>标题1</h1>
        <p>段落1</p>
        <h2>标题2</h2>
        <p>段落2</p>
    </body>
</html>
"""

# 分割文本
chunks = splitter.split_text(html_text)

# 打印结果
for chunk in chunks:
    print(chunk)
9. RecursiveJsonSplitter:

功能:递归分割 JSON 数据,将大型 JSON 对象分割成更小的块,以便于处理和操作。

from langchain_text_splitters import RecursiveJsonSplitter

splitter = RecursiveJsonSplitter(chunk_size=512)
json_data = {
    "key1": "value1",
    "key2": "value2",
    # 更多的键值对...
}
chunks = splitter.split_json(json_data)
10. web split
from langchain_community.document_loaders import WebBaseLoader

loader = WebBaseLoader("https://example.com")
docs = loader.load()

文本分割: 使用 RecursiveCharacterTextSplitter 或其他文本分割器将加载的网页内容分割成更小的块,以便于处理和避免超出语言模型的 Token 长度限制。

from langchain.text_splitter import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
splits = splitter.split_documents(docs)

动物装饰