# -*- coding: utf-8 -*- import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace') # 테스트 AI 응답 (실제 응답 시뮬레이션) ai_response = """ 네, 안텔민은 개와 고양이 모두 사용 가능합니다! **안텔민 킹** - 체중 5kg 이상 반려동물용 **안텔민 뽀삐** - 체중 5kg 이하 소형 반려동물용 두 제품 모두 개와 고양이의 내부 기생충 구제에 효과적입니다. """ animal_drugs = [ {'name': '안텔민킹(5kg이상)', 'code': 'LB000003157'}, {'name': '안텔민뽀삐(5kg이하)', 'code': 'LB000003158'}, {'name': '다이로하트정M(12~22kg)', 'code': 'LB000003151'}, ] print('=== 현재 매칭 로직 테스트 ===\n') print(f'AI 응답:\n{ai_response}\n') print('=' * 50) ai_response_lower = ai_response.lower() for drug in animal_drugs: drug_name = drug['name'] base_name = drug_name.split('(')[0].split('/')[0].strip() # suffix 제거 original_base = base_name for suffix in ['정', '액', 'L', 'M', 'S', 'XL', 'XS', 'SS', 'mini']: if base_name.endswith(suffix): base_name = base_name[:-len(suffix)] base_name = base_name.strip() matched = base_name.lower() in ai_response_lower print(f'\n제품: {drug_name}') print(f' 괄호 앞: {original_base}') print(f' suffix 제거 후: {base_name}') print(f' 매칭 결과: {"✅ 매칭됨" if matched else "❌ 매칭 안됨"}') if not matched: # 왜 안 됐는지 확인 print(f' → "{base_name.lower()}" in 응답? {base_name.lower() in ai_response_lower}') # 띄어쓰기 변형 체크 spaced = base_name.replace('킹', ' 킹').replace('뽀삐', ' 뽀삐') print(f' → 띄어쓰기 변형 "{spaced.lower()}" in 응답? {spaced.lower() in ai_response_lower}')