DocumentCleaner
使用DocumentCleaner 用于使文本文档更具可读性。它按以下顺序删除多余的空格、空行、指定的子字符串、正则表达式、页眉和页脚。这对于为 LLM 进行进一步处理准备文档很有用。
| pipeline 中的最常见位置 | 在索引管道中,位于 转换器 之后,DocumentSplitter 之后 |
| 强制运行变量 | "documents": 文档列表 |
| 输出变量 | "documents": 文档列表 |
| API 参考 | PreProcessors (预处理器) |
| GitHub 链接 | https://github.com/deepset-ai/haystack/blob/main/haystack/components/preprocessors/document_cleaner.py |
概述
DocumentCleaner 期望输入为文档列表,并返回文本经过清理的文档列表。每个输入文档的可选清理步骤包括remove_empty_lines, remove_extra_whitespaces 以及remove_repeated_substrings。这三个参数是布尔值,可以在组件初始化时设置。
unicode_normalization将 Unicode 字符标准化为标准形式。该参数可设置为 NFC、NFKC、NFD 或 NFKD。ascii_only删除字符上的重音符号,并用最接近的 ASCII 等效字符替换它们。remove_empty_lines从文档中删除空行。remove_extra_whitespaces从文档中删除多余的空格。remove_repeated_substrings从文档中的页面删除重复的子字符串(页眉/页脚)。文本中的页面需要用换页符 "\f" 分隔,该换页符受TextFileToDocument和AzureOCRDocumentConverter支持。
此外,您还可以指定一个字符串列表,在清理过程中将这些字符串从所有文档中删除,使用参数remove_substring。您还可以使用参数指定一个正则表达式remove_regex,并将删除所有匹配项。
清理步骤按以下顺序执行
- unicode_normalization
- ascii_only
- remove_extra_whitespaces
- remove_empty_lines
- remove_substrings
- remove_regex
- remove_repeated_substrings
用法
单独使用
您可以将其用于管道外部,以清理您的文档
from haystack import Document
from haystack.components.preprocessors import DocumentCleaner
doc = Document(content="This is a document to clean\n\n\nsubstring to remove")
cleaner = DocumentCleaner(remove_substrings = ["substring to remove"])
result = cleaner.run(documents=[doc])
assert result["documents"][0].content == "This is a document to clean "
在 pipeline 中
from haystack import Document
from haystack import Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.converters 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")
p.run({"text_file_converter": {"sources": your_files}})
更新于 6 个月前
