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)
- DocumentCleaner — Haystack 공식 문서