""" 이메일 분류 모듈 """ import re class EmailClassifier: """이메일 자동 분류 클래스""" def __init__(self, config): """ 초기화 Args: config: 분류 규칙이 포함된 설정 """ self.rules = config.get('classification_rules', []) def classify(self, email_data): """ 이메일 분류 Args: email_data: 이메일 정보 (subject, sender, body) Returns: 분류 카테고리 정보 또는 None """ subject = email_data.get('subject', '').lower() sender = email_data.get('sender', '').lower() body = email_data.get('body', '').lower() snippet = email_data.get('snippet', '').lower() # 전체 텍스트 full_text = f"{subject} {body} {snippet}" for rule in self.rules: # 키워드 검사 keywords = rule.get('keywords', []) if keywords: if any(keyword.lower() in full_text for keyword in keywords): return rule # 발신자 도메인 검사 from_domains = rule.get('from_domains', []) if from_domains: sender_domain = self.extract_domain(sender) if sender_domain in from_domains: return rule # 정규식 패턴 검사 patterns = rule.get('patterns', []) if patterns: for pattern in patterns: if re.search(pattern, full_text): return rule return None def extract_domain(self, email_address): """이메일 주소에서 도메인 추출""" match = re.search(r'@([\w\.-]+)', email_address) if match: return match.group(1).lower() return '' def get_priority(self, email_data): """이메일 우선순위 판단""" category = self.classify(email_data) if category: priority = category.get('priority', 'normal') return priority return 'normal' if __name__ == "__main__": # 테스트 config = { "classification_rules": [ { "name": "업무", "keywords": ["회의", "프로젝트"], "label": "업무/중요", "priority": "high" } ] } classifier = EmailClassifier(config) test_email = { 'subject': '프로젝트 회의 일정', 'sender': 'test@company.com', 'body': '내일 오전 10시 회의', 'snippet': '' } result = classifier.classify(test_email) print(f"분류 결과: {result}")