TextCleaner

TextCleaner

TextCleaner 는 텍스트 데이터를 더 읽기 좋게 정리하는 컴포넌트예요. 정규식(패턴) 매칭, 구두점, 숫자를 제거하고 텍스트를 소문자로 변환해요. 특히 평가(evaluation) 전에 텍스트 데이터를 정리할 때 유용해요.

출처: 문서

본문

개요 (Overview)

TextCleaner 는 문자열 목록을 입력으로 받아 정리된 텍스트 목록을 반환해요. 선택 가능한 정리 단계는 convert_to_lowercase, remove_punctuation, remove_numbers 예요. 이 세 파라미터는 컴포넌트를 초기화할 때 설정해야 하는 불리언이에요.

  • convert_to_lowercase — 텍스트의 모든 문자를 소문자로 변환해요.
  • remove_punctuation — 텍스트에서 모든 구두점을 제거해요.
  • remove_numbers — 텍스트에서 모든 숫자 자릿수를 제거해요.

추가로 remove_regexps 파라미터로 정규식을 지정할 수 있고, 일치하는 모든 부분이 제거돼요.

사용법 (Usage)

단독으로 쓰기

파이프라인 밖에서도 텍스트를 정리하는 데 쓸 수 있어요:

from haystack.components.preprocessors import TextCleaner

text_to_clean = (
    "1Moonlight shimmered softly, 300 Wolves howled nearby, Night enveloped everything."
)
cleaner = TextCleaner(
    convert_to_lowercase=True,
    remove_punctuation=False,
    remove_numbers=True,
)
result = cleaner.run(texts=[text_to_clean])

파이프라인에서 쓰기

이 예시에서는 TransformersExtractiveReader 와 OutputAdapter 뒤에 TextCleaner 를 써서 텍스트에서 구두점을 제거해요. 그런 다음 직접 만든 ExactMatchEvaluator 컴포넌트가 검색된 답변을 정답(ground truth)과 비교해요.

이 페이지의 예시는 transformers-haystack 패키지의 Transformers 컴포넌트를 사용해요. 예시를 실행하려면 설치하세요:

pip install transformers-haystack
from typing import List
from haystack import component, Document, Pipeline
from haystack.components.converters import OutputAdapter
from haystack.components.preprocessors import TextCleaner
from haystack_integrations.components.readers.transformers import (
    TransformersExtractiveReader,
)
from haystack.components.retrievers.in_memory import InMemoryBM25Retriever
from haystack.document_stores.in_memory import InMemoryDocumentStore

document_store = InMemoryDocumentStore()
documents = [
    Document(content="There are over 7,000 languages spoken around the world today."),
    Document(
        content="Elephants have been observed to behave in a way that indicates a high level of self-awareness, such as recognizing themselves in mirrors.",
    ),
    Document(
        content="In certain parts of the world, like the Maldives, Puerto Rico, and San Diego, you can witness the phenomenon of bioluminescent waves.",
    ),
]
document_store.write_documents(documents=documents)

@component
class ExactMatchEvaluator:
    @component.output_types(score=int)
    def run(self, expected: str, provided: List[str]):
        return {"score": int(expected in provided)}

adapter = OutputAdapter(
    template="{{answers | extract_data}}",
    output_type=List[str],
    custom_filters={
        "extract_data": lambda data: [answer.data for answer in data if answer.data],
    },
)

p = Pipeline()
p.add_component("retriever", InMemoryBM25Retriever(document_store=document_store))
p.add_component("reader", TransformersExtractiveReader())
p.add_component("adapter", adapter)
p.add_component("cleaner", TextCleaner(remove_punctuation=True))
p.add_component("evaluator", ExactMatchEvaluator())
p.connect("retriever", "reader")
p.connect("reader", "adapter")
p.connect("adapter", "cleaner.texts")
p.connect("cleaner", "evaluator.provided")

question = "What behavior indicates a high level of self-awareness of elephants?"
ground_truth_answer = "recognizing themselves in mirrors"
result = p.run(
    {
        "retriever": {"query": question},
        "reader": {"query": question},
        "evaluator": {"expected": ground_truth_answer},
    },
)
print(result)

더 알아보기 (Learn more)