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)
- Generator — 텍스트를 생성하는 컴포넌트
- Evaluator — 텍스트 품질을 평가하는 컴포넌트
- PreProcessors API 참조
- GitHub 소스