DocumentSplitter
DocumentSplitter 将文本文档列表分割成更短的文本文档列表。这对于长文本很有用,否则这些长文本将无法满足语言模型的最大文本长度要求,并且还可以加快问答速度。
| pipeline 中的最常见位置 | 在索引管道中,位于 Converters 和 DocumentCleaner 之后,位于 Classifiers 之前。 |
| 强制运行变量 | "documents": 文档列表 |
| 输出变量 | "documents": 文档列表 |
| API 参考 | PreProcessors (预处理器) |
| GitHub 链接 | https://github.com/deepset-ai/haystack/blob/main/haystack/components/preprocessors/document_splitter.py |
概述
DocumentSplitter 期望输入为文档列表,并返回文本已分割的文档列表。它会根据split_by 在split_length 个单位后进行分割,重叠部分为split_overlap 个单位。这些附加参数可以在组件初始化时设置。
split_by可以是"word","sentence","passage"(段落),"page","line"或"function".split_length是一个整数,表示块的大小,即单词、句子或段落的数量。split_overlap是一个整数,表示块之间重叠的单词、句子或段落的数量。split_threshold是一个整数,表示文档片段应具有的最小单词、句子或段落数量。如果片段低于阈值,它将被附加到前一个片段。
一个字段"source_id" 会被添加到每个文档的meta 数据中,以跟踪原始文档。另一个元字段"page_number" 会被添加到每个文档中,以跟踪它在原始文档中的页码。其他元数据会从原始文档中复制。
DocumentSplitter 与以下 DocumentStores 兼容:
- AstraDocumentStore
- ChromaDocumentStore – 支持有限,不存储重叠信息。
- ElasticsearchDocumentStore
- OpenSearchDocumentStore
- PgvectorDocumentStore
- PineconeDocumentStore – 支持有限,不存储重叠信息。
- QdrantDocumentStore
- WeaviateDocumentStore
- MilvusDocumentStore
- Neo4jDocumentStore
用法
单独使用
您可以在管道外部使用此组件来缩短您的文档,如下所示:
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}})
更新于 6 个月前
