DocumentCleaner

DocumentCleaner

DocumentCleaner는 문서 리스트를 입력받아 정리된 텍스트가 담긴 문서 리스트를 반환해요. 각 입력 문서에 대해 선택 가능한 정리 단계는 remove_empty_lines, remove_extra_whitespaces, remove_repeated_substrings이며, 이 세 파라미터는 컴포넌트 초기화 시 설정할 수 있는 불리언입니다.

출처: 문서

본문

Overview

  • unicode_normalization — Unicode 문자를 표준 형식으로 정규화해요. NFC, NFKC, NFD, NFKD로 설정할 수 있습니다.
  • ascii_only — 문자에서 악센트를 제거하고 가장 가까운 ASCII 동등 표현으로 교체해요.
  • remove_empty_lines — 문서에서 빈 줄을 제거합니다.
  • remove_extra_whitespaces — 문서에서 여분의 공백을 제거합니다.
  • remove_repeated_substrings — 문서 페이지에서 반복되는 부분 문자열(헤더/푸터)을 제거해요. 텍스트의 페이지는 폼 피드 문자 "\f"로 구분되어야 하며, TextFileToDocument, AzureOCRDocumentConverter, MistralOCRDocumentConverter, PaddleOCRVLDocumentConverter가 이를 지원합니다.
  • min_content_length — 앞뒤 공백을 제거한 후 정리된 내용이 설정한 문자 수보다 짧은 텍스트 문서를 버려요. 기본값은 0으로, 모든 텍스트 문서를 유지합니다.

참고: remove_extra_whitespaces와 remove_empty_lines는 평문(plain-text) 내용에서 가장 잘 작동합니다. AzureDocumentIntelligenceConverter, MarkItDownConverter, MistralOCRDocumentConverter, PaddleOCRVLDocumentConverter처럼 컨버터가 Markdown을 반환한다면, 제목·표·리스트·이미지 태그를 보존하기 위해 이 옵션을 비활성화하세요.

또한 remove_substrings 파라미터로 모든 문서에서 제거할 문자열 리스트를 지정할 수 있고, remove_regex 파라미터로 정규 표현식을 지정해 일치하는 항목을 제거할 수 있어요.

정리 단계는 다음 순서로 실행됩니다:

unicode_normalization
ascii_only
remove_extra_whitespaces
remove_empty_lines
remove_substrings
remove_regex
replace_regexes
remove_repeated_substrings
strip_whitespaces
min_content_length

Usage

On its own

파이프라인 밖에서도 문서를 정리하는 데 사용할 수 있어요:

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 "

In a 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}})

In YAML

components:
  cleaner:
    init_parameters:
      ascii_only: false
      keep_id: false
      remove_empty_lines: true
      remove_extra_whitespaces: true
      remove_regex: null
      remove_repeated_substrings: false
      remove_substrings: null
      min_content_length: 0
      replace_regexes: null
      strip_whitespaces: false
      unicode_normalization: null
    type: haystack.components.preprocessors.document_cleaner.DocumentCleaner
  splitter:
    init_parameters:
      extend_abbreviations: true
      language: en
      respect_sentence_boundary: false
      skip_empty_documents: true
      split_by: sentence
      split_length: 1
      split_overlap: 0
      split_threshold: 0
      use_split_rules: true
    type: haystack.components.preprocessors.document_splitter.DocumentSplitter
  text_file_converter:
    init_parameters:
      encoding: utf-8
      store_full_path: false
    type: haystack.components.converters.txt.TextFileToDocument
  writer:
    init_parameters:
      document_store:
        init_parameters:
          bm25_algorithm: BM25L
          bm25_parameters: {}
          bm25_tokenization_regex: (?u)\b\w+\b
          embedding_similarity_function: dot_product
          index: 64e4f9ab-87fb-47fd-b390-dabcfda61447
          return_embedding: true
        type: haystack.document_stores.in_memory.document_store.InMemoryDocumentStore
      policy: NONE
    type: haystack.components.writers.document_writer.DocumentWriter
connection_type_validation: true
connections:
- receiver: cleaner.documents
  sender: text_file_converter.documents
- receiver: splitter.documents
  sender: cleaner.documents
- receiver: writer.documents
  sender: splitter.documents
max_runs_per_component: 100
metadata: {}

더 알아보기 (Learn more)