From 0b087af3ff93639186084528cb0d1dab19452bbb Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 30 Oct 2024 12:05:01 +0000 Subject: [PATCH] - More improvements to the site --- Site/OriginDex.py | 81 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 72 insertions(+), 9 deletions(-) diff --git a/Site/OriginDex.py b/Site/OriginDex.py index dfdb710..7993719 100644 --- a/Site/OriginDex.py +++ b/Site/OriginDex.py @@ -3,6 +3,21 @@ from flask import Flask, render_template, jsonify from collections import defaultdict import os import json +import wordninja + +POKEMON_PROPER_NOUNS = { + "Alola", + "Kanto", + "Johto", + "Hoenn", + "Sinnoh", + "Unova", + "Kalos", + "Galar", + "Hisui", + "Paldea", + # Add any other proper nouns that should be preserved +} app = Flask(__name__) @@ -110,26 +125,68 @@ def load_pokemon_data(): def index(): pokemon_list = load_pokemon_data() - # Load the efficiency plan try: with open('efficiency_plan.json', 'r', encoding='utf-8') as f: efficiency_plan = json.load(f) - # Enhance the plan with evolution methods conn = sqlite3.connect('pokemon_forms.db') cursor = conn.cursor() + def get_evolution_methods(from_pfic, to_pfic): + # Get direct evolution method + cursor.execute(''' + SELECT method, to_pfic + FROM evolution_chains + WHERE from_pfic = ? AND to_pfic = ? + ''', (from_pfic, to_pfic)) + direct = cursor.fetchone() + + if direct: + words = wordninja.split(direct[0]) + cleaned_method = ' '.join(words) + return [cleaned_method] + + # Try to find indirect evolution path + cursor.execute(''' + WITH RECURSIVE evolution_path AS ( + -- Base case: direct evolutions from start + SELECT from_pfic, to_pfic, method, 1 as depth + FROM evolution_chains + WHERE from_pfic = ? + + UNION ALL + + -- Recursive case: follow chain + SELECT e.from_pfic, e.to_pfic, e.method, ep.depth + 1 + FROM evolution_chains e + JOIN evolution_path ep ON e.from_pfic = ep.to_pfic + WHERE ep.depth < 3 -- Prevent infinite loops + ) + SELECT method + FROM evolution_path + WHERE to_pfic = ? + ORDER BY depth; + ''', (from_pfic, to_pfic)) + + methods = cursor.fetchall() + if methods: + # Clean up each method string + cleaned_methods = [] + for method in methods: + # Split and rejoin with spaces + words = wordninja.split(method[0]) + cleaned_method = ' '.join(words) + cleaned_methods.append(cleaned_method) + return cleaned_methods + return ['Evolution'] + + # Enhance the plan with evolution methods for game in efficiency_plan: for pokemon in game['pokemon']: if pokemon.get('evolve_to'): for evolution in pokemon['evolve_to']: - cursor.execute(''' - SELECT method - FROM evolution_chains - WHERE from_pfic = ? AND to_pfic = ? - ''', (pokemon['pfic'], evolution['pfic'])) - result = cursor.fetchone() - evolution['method'] = result[0] if result else 'Evolution' + methods = get_evolution_methods(pokemon['pfic'], evolution['pfic']) + evolution['method'] = ' → '.join(methods) conn.close() @@ -181,6 +238,12 @@ def pokemon_details(pfic): return jsonify(encounters) if __name__ == '__main__': + # Add the custom words to wordninja's word list + #wordninja.DEFAULT_WEIGHT_MULTIPLIER = 2 # Make default words twice as likely + #for word in POKEMON_PROPER_NOUNS: + # wordninja.addWords([word], weight=10) # Higher weight makes these words more likely to be kept together + + extra_files = ['.'] extra_dirs = ['./templates/', './static/'] for extra_dir in extra_dirs: