20251117_104033 기준 데이터
This commit is contained in:
176
데이터수집/수집스크립트/validators.py
Normal file
176
데이터수집/수집스크립트/validators.py
Normal file
@ -0,0 +1,176 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
데이터 검증 모듈
|
||||
"""
|
||||
|
||||
import logging
|
||||
from typing import Dict, List
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def validate_stalker_data(stalker_name: str, stalker_data: Dict) -> bool:
|
||||
"""
|
||||
스토커 데이터 검증
|
||||
|
||||
Args:
|
||||
stalker_name: 스토커 이름
|
||||
stalker_data: 스토커 데이터
|
||||
|
||||
Returns:
|
||||
검증 성공 여부
|
||||
"""
|
||||
warnings = []
|
||||
errors = []
|
||||
|
||||
# 기본 정보 검증
|
||||
basic_info = stalker_data.get('basic_info', {})
|
||||
if not basic_info.get('name'):
|
||||
warnings.append(f"[{stalker_name}] 이름 정보 누락")
|
||||
|
||||
# 스탯 검증
|
||||
stats = stalker_data.get('stats', {})
|
||||
if not stats:
|
||||
errors.append(f"[{stalker_name}] 스탯 정보 누락")
|
||||
else:
|
||||
# 스탯 합계 확인 (75여야 함)
|
||||
stat_sum = (
|
||||
stats.get('str', 0) +
|
||||
stats.get('dex', 0) +
|
||||
stats.get('int', 0) +
|
||||
stats.get('con', 0) +
|
||||
stats.get('wis', 0)
|
||||
)
|
||||
if stat_sum != 75:
|
||||
warnings.append(f"[{stalker_name}] 스탯 합계가 75가 아님: {stat_sum}")
|
||||
|
||||
# 스킬 검증
|
||||
skills = stalker_data.get('skills', {})
|
||||
default_skills = skills.get('default', [])
|
||||
if not default_skills:
|
||||
warnings.append(f"[{stalker_name}] 기본 스킬 정보 누락")
|
||||
|
||||
sub_skill = skills.get('sub', '')
|
||||
if not sub_skill:
|
||||
warnings.append(f"[{stalker_name}] 서브 스킬 정보 누락")
|
||||
|
||||
ultimate_skill = skills.get('ultimate', '')
|
||||
if not ultimate_skill:
|
||||
warnings.append(f"[{stalker_name}] 궁극기 정보 누락")
|
||||
|
||||
# 스킬 상세 정보 검증
|
||||
skill_details = stalker_data.get('skill_details', {})
|
||||
all_skill_ids = default_skills + [sub_skill, ultimate_skill]
|
||||
for skill_id in all_skill_ids:
|
||||
if skill_id and skill_id not in skill_details:
|
||||
warnings.append(f"[{stalker_name}] 스킬 상세 정보 누락: {skill_id}")
|
||||
|
||||
# 기본 공격 검증
|
||||
basic_attacks = stalker_data.get('basic_attacks', {})
|
||||
if not basic_attacks:
|
||||
warnings.append(f"[{stalker_name}] 기본 공격 몽타주 정보 누락")
|
||||
|
||||
# 경고 및 에러 출력
|
||||
for warning in warnings:
|
||||
logger.warning(warning)
|
||||
|
||||
for error in errors:
|
||||
logger.error(error)
|
||||
|
||||
return len(errors) == 0
|
||||
|
||||
|
||||
def validate_collection_result(collection_data: Dict) -> bool:
|
||||
"""
|
||||
전체 수집 결과 검증
|
||||
|
||||
Args:
|
||||
collection_data: 전체 수집 데이터
|
||||
|
||||
Returns:
|
||||
검증 성공 여부
|
||||
"""
|
||||
stalkers = collection_data.get('stalkers', {})
|
||||
|
||||
if not stalkers:
|
||||
logger.error("수집된 스토커 데이터가 없습니다")
|
||||
return False
|
||||
|
||||
total_stalkers = len(stalkers)
|
||||
logger.info(f"총 {total_stalkers}명의 스토커 데이터 수집 완료")
|
||||
|
||||
# 각 스토커별 검증
|
||||
all_valid = True
|
||||
for stalker_name, stalker_data in stalkers.items():
|
||||
if not validate_stalker_data(stalker_name, stalker_data):
|
||||
all_valid = False
|
||||
|
||||
return all_valid
|
||||
|
||||
|
||||
def log_collection_summary(collection_data: Dict, log_file_path: str):
|
||||
"""
|
||||
수집 결과 요약 로그 생성
|
||||
|
||||
Args:
|
||||
collection_data: 전체 수집 데이터
|
||||
log_file_path: 로그 파일 경로
|
||||
"""
|
||||
stalkers = collection_data.get('stalkers', {})
|
||||
|
||||
with open(log_file_path, 'w', encoding='utf-8') as f:
|
||||
f.write("=" * 80 + "\n")
|
||||
f.write("DS 전투 데이터 수집 결과 요약\n")
|
||||
f.write("=" * 80 + "\n\n")
|
||||
|
||||
metadata = collection_data.get('collection_metadata', {})
|
||||
f.write(f"수집 시각: {metadata.get('collected_at', '')}\n")
|
||||
f.write(f"총 스토커 수: {len(stalkers)}\n\n")
|
||||
|
||||
for stalker_name, stalker_data in stalkers.items():
|
||||
f.write("-" * 80 + "\n")
|
||||
f.write(f"스토커: {stalker_name}\n")
|
||||
f.write("-" * 80 + "\n")
|
||||
|
||||
basic_info = stalker_data.get('basic_info', {})
|
||||
f.write(f" 이름: {basic_info.get('name', '')}\n")
|
||||
f.write(f" 직업: {basic_info.get('jobName', '')}\n")
|
||||
|
||||
stats = stalker_data.get('stats', {})
|
||||
stat_sum = (
|
||||
stats.get('str', 0) +
|
||||
stats.get('dex', 0) +
|
||||
stats.get('int', 0) +
|
||||
stats.get('con', 0) +
|
||||
stats.get('wis', 0)
|
||||
)
|
||||
f.write(f" 스탯 합계: {stat_sum}\n")
|
||||
|
||||
skills = stalker_data.get('skills', {})
|
||||
default_skills = skills.get('default', [])
|
||||
f.write(f" 기본 스킬 수: {len(default_skills)}\n")
|
||||
f.write(f" 서브 스킬: {skills.get('sub', '')}\n")
|
||||
f.write(f" 궁극기: {skills.get('ultimate', '')}\n")
|
||||
|
||||
skill_details = stalker_data.get('skill_details', {})
|
||||
f.write(f" 수집된 스킬 상세 정보 수: {len(skill_details)}\n")
|
||||
|
||||
# 각 스킬별 몽타주 수 집계
|
||||
total_skill_montages = 0
|
||||
for skill_id, skill_data in skill_details.items():
|
||||
montages = skill_data.get('montages', [])
|
||||
total_skill_montages += len(montages)
|
||||
|
||||
f.write(f" 스킬 몽타주 총 수: {total_skill_montages}\n")
|
||||
|
||||
basic_attacks = stalker_data.get('basic_attacks', {})
|
||||
total_basic_montages = sum(len(montages) for montages in basic_attacks.values())
|
||||
f.write(f" 기본 공격 몽타주 총 수: {total_basic_montages}\n")
|
||||
|
||||
f.write("\n")
|
||||
|
||||
f.write("=" * 80 + "\n")
|
||||
f.write("수집 완료\n")
|
||||
f.write("=" * 80 + "\n")
|
||||
|
||||
logger.info(f"수집 요약 로그 생성 완료: {log_file_path}")
|
||||
Reference in New Issue
Block a user