Spaces:
Sleeping
Sleeping
| import pandas as pd | |
| import re | |
| import logging | |
| logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') | |
| logger = logging.getLogger(__name__) | |
| eco_data = None | |
| def load_eco_data(): | |
| global eco_data | |
| try: | |
| eco_data = pd.read_csv('data/Chess Opening Reference - Sheet1.csv') | |
| logger.info(f"Loaded {len(eco_data)} ECO codes") | |
| return True | |
| except Exception as e: | |
| logger.error(f"Error loading ECO data: {str(e)}") | |
| return False | |
| def extract_eco_from_pgn(pgn): | |
| eco_match = re.search(r'\[ECO "([A-E][0-9]{2})"\]', pgn) | |
| return eco_match.group(1) if eco_match else None | |
| def get_opening_name(eco_code): | |
| if eco_data is not None and eco_code: | |
| match = eco_data[eco_data['ECO Code'] == eco_code] | |
| if not match.empty: | |
| return match.iloc[0]['Name'] | |
| return "Unknown Opening" | |
| def analyze_opponent_openings(pgn_list, target_username): | |
| target_username = target_username.lower() | |
| opponent_openings = [] | |
| for pgn in pgn_list: | |
| white_match = re.search(r'\[White "([^"]+)"\]', pgn) | |
| black_match = re.search(r'\[Black "([^"]+)"\]', pgn) | |
| if not white_match or not black_match: | |
| continue | |
| white_player = white_match.group(1).lower() | |
| black_player = black_match.group(1).lower() | |
| is_white = target_username in white_player | |
| is_black = target_username in black_player | |
| if not is_white and not is_black: | |
| continue | |
| eco_code = extract_eco_from_pgn(pgn) | |
| if eco_code: | |
| opening_name = get_opening_name(eco_code) | |
| if is_white: | |
| opponent_color = "qora" | |
| else: | |
| opponent_color = "oq" | |
| opponent_openings.append({ | |
| 'eco': eco_code, | |
| 'name': opening_name, | |
| 'opponent_color': opponent_color, | |
| 'user_color': 'oq' if is_white else 'qora' | |
| }) | |
| return opponent_openings | |