文档API 参考📓 教程🧑‍🍳 食谱🤝 集成💜 Discord🎨 Studio
文档

DocumentSplitter

DocumentSplitter 将文本文档列表分割成更短的文本文档列表。这对于长文本很有用,否则这些长文本将无法满足语言模型的最大文本长度要求,并且还可以加快问答速度。

pipeline 中的最常见位置在索引管道中,位于 ConvertersDocumentCleaner 之后,位于 Classifiers 之前。
强制运行变量"documents": 文档列表
输出变量"documents": 文档列表
API 参考PreProcessors (预处理器)
GitHub 链接https://github.com/deepset-ai/haystack/blob/main/haystack/components/preprocessors/document_splitter.py

概述

DocumentSplitter 期望输入为文档列表,并返回文本已分割的文档列表。它会根据split_bysplit_length 个单位后进行分割,重叠部分为split_overlap 个单位。这些附加参数可以在组件初始化时设置。

  • split_by 可以是"word", "sentence", "passage" (段落),"page", "line""function".
  • split_length 是一个整数,表示块的大小,即单词、句子或段落的数量。
  • split_overlap 是一个整数,表示块之间重叠的单词、句子或段落的数量。
  • split_threshold 是一个整数,表示文档片段应具有的最小单词、句子或段落数量。如果片段低于阈值,它将被附加到前一个片段。

一个字段"source_id" 会被添加到每个文档的meta 数据中,以跟踪原始文档。另一个元字段"page_number" 会被添加到每个文档中,以跟踪它在原始文档中的页码。其他元数据会从原始文档中复制。

DocumentSplitter 与以下 DocumentStores 兼容:

用法

单独使用

您可以在管道外部使用此组件来缩短您的文档,如下所示:

from haystack import Document
from haystack.components.preprocessors import DocumentSplitter

doc = Document(content="Moonlight shimmered softly, wolves howled nearby, night enveloped everything.")

splitter = DocumentSplitter(split_by="word", split_length=3, split_overlap=0)
result = splitter.run(documents=[doc])

在 pipeline 中

以下是如何使用DocumentSplitter 在索引管道中

from pathlib import Path

from haystack import Document
from haystack import Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.converters.txt import TextFileToDocument
from haystack.components.preprocessors import DocumentCleaner
from haystack.components.preprocessors import DocumentSplitter
from haystack.components.writers import DocumentWriter

document_store = InMemoryDocumentStore()
p = Pipeline()
p.add_component(instance=TextFileToDocument(), name="text_file_converter")
p.add_component(instance=DocumentCleaner(), name="cleaner")
p.add_component(instance=DocumentSplitter(split_by="sentence", split_length=1), name="splitter")
p.add_component(instance=DocumentWriter(document_store=document_store), name="writer")
p.connect("text_file_converter.documents", "cleaner.documents")
p.connect("cleaner.documents", "splitter.documents")
p.connect("splitter.documents", "writer.documents")

path = "path/to/your/files"
files = list(Path(path).glob("*.md"))
p.run({"text_file_converter": {"sources": files}})

相关链接

在我们的 API 参考中查看参数详情