이 코드는 langchain.schema에서 제공하는 BaseOutputParser를 상속하여 문자열을 콤마(,) 기준으로 분리하는 CommaOutputParser 클래스를 정의합니다.
from langchain.schema import BaseOutputParser
class CommaOutputParser(BaseOutputParser):
"""BaseOutputParser를 상속하여 문자열을 ',' 기준으로 파싱하는 클래스"""
def parse(self, text: str) -> list[str]:
"""문자열을 ',' 기준으로 분리하고 각 요소의 공백을 제거"""
items = text.strip().split(",") # ',' 기준으로 분리
return list(map(str.strip, items)) # 각 요소의 공백 제거
# 객체 생성
parser = CommaOutputParser()
# 테스트 실행
result = parser.parse("Hello,how,are,you,doing")
# 출력 결과 확인
print(result)
📌 list(map(str.strip, items)) 의 동작 원리
이 부분은 문자열 리스트(items)의 각 요소에서 공백을 제거하는 역할을 합니다.
🔍 1️⃣ map(str.strip, items) 동작
map() 함수는 리스트의 각 요소에 str.strip() 함수를 적용합니다.
✅ str.strip() 이란?
• 문자열의 양쪽 공백을 제거하는 내장 함수.
• " hello ".strip() → "hello" (앞뒤 공백 제거)
✅ map(str.strip, items) 실행 과정
items = ["Hello ", " how", " are ", " you", "doing "]
processed_items = map(str.strip, items)
이제 map()은 리스트 items의 각 요소에 str.strip()을 적용:
"Hello " → "Hello"
" how" → "how"
" are " → "are"
" you" → "you"
"doing " → "doing"
📌 map()은 결과를 이터레이터(iterator) 로 반환.
🔍 2️⃣ list()로 변환
return list(map(str.strip, items))
• map()의 결과는 이터레이터이므로, list()를 사용하여 리스트로 변환.
• 최종적으로 모든 요소에서 공백이 제거된 리스트를 반환.
✅ 최종 코드 실행 예제
items = ["Hello ", " how", " are ", " you", "doing "]
# map() 적용 후 리스트로 변환
clean_items = list(map(str.strip, items))
print(clean_items) # ['Hello', 'how', 'are', 'you', 'doing']
📌 결과: ['Hello', 'how', 'are', 'you', 'doing']
🚀 모든 문자열의 앞뒤 공백이 제거됨.
🎯 결론
return list(map(str.strip, items))
이 한 줄은 다음과 같은 역할을 합니다:
각 요소의 앞뒤 공백을 제거 (str.strip())
map()을 사용하여 리스트의 모든 요소에 적용
list()로 변환하여 최종 리스트 반환
✅ 출력 결과
['Hello', 'how', 'are', 'you', 'doing']
📌 str.strip()을 적용했기 때문에 각 요소의 앞뒤 공백이 자동으로 제거됨. 🚀