Files
test-mcp/log_scorer.py

64 lines
2.7 KiB
Python

import re
class LogScorer:
"""로그 텍스트의 시맨틱 가치를 판별하여 점수화하는 모듈 (SWVW)"""
# 업무 가치 범주별 가중치 정의
# 1.0: 핵심 의사결정/계약, 0.7: 지능형/권한관리, 0.4: 일반관리, 0.1: 단순활동
WEIGHT_MAP = {
"CORE": 1.0, # 설계변경, 실정보고, 계약, 정산 등 (추후 확장 대비)
"INTELLIGENT": 0.7, # AI요약, PDF변환, 분석 등
"AUTH": 0.6, # 권한 추가, 보안 설정 등
"MGMT": 0.4, # 업로드, 수정, 이름 변경 등
"SIMPLE": 0.2, # 다운로드, 삭제, 생성 등
"AUTO": 0.0 # 자동 삭제, 시스템 로그 등
}
# 범주별 키워드 정의 (실무 문맥 반영)
KEYWORDS = {
"CORE": ["보고", "계약", "정산", "설계", "검토", "승인", "공문", "통보"],
"INTELLIGENT": ["AI", "요약", "변환", "PDF"],
"AUTH": ["권한", "참여자", "관리자", "보안"],
"MGMT": ["업로드", "수정", "변경", "첨부", "추가"],
"SIMPLE": ["다운로드", "생성", "이동", "삭제"],
"AUTO": ["자동", "시스템"]
}
@classmethod
def get_score(cls, log_text):
"""로그 텍스트를 분석하여 0.0 ~ 1.0 사이의 가치 점수를 반환"""
if not log_text or log_text == "데이터 없음":
return 0.0
# 날짜 부분 제거 (예: "2024.03.01, " 제거)
clean_log = re.sub(r'^\d{2,4}\.\d{2}\.\d{2},\s*', '', log_text)
# 1. 특정 키워드 매칭을 통한 기본 범주 판별
for category, keywords in cls.KEYWORDS.items():
if any(k in clean_log for k in keywords):
# '자동 삭제'는 별도 처리
if category == "SIMPLE" and "자동" in clean_log:
return cls.WEIGHT_MAP["AUTO"]
return cls.WEIGHT_MAP[category]
return 0.3 # 기본값 (분류되지 않은 활동)
@classmethod
def calculate_work_density(cls, logs):
"""로그 목록을 받아 평균 업무 밀도 산출"""
if not logs: return 0.0
scores = [cls.get_score(log) for log in logs]
return sum(scores) / len(scores)
# 테스트 코드
if __name__ == "__main__":
test_logs = [
"2026.03.30, 하도급 계약 통보서 검토",
"2026.03.25, AI요약 완료",
"2026.03.20, 부관리자 권한 추가",
"2026.03.15, 파일 업로드",
"2026.03.10, 폴더 자동 삭제"
]
for log in test_logs:
print(f"Log: {log} => Score: {LogScorer.get_score(log)}")