Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"cells": [
{
Expand Down Expand Up @@ -35,6 +35,7 @@
"cell_type": "code",
"execution_count": 1,
"id": "7021532a",
"metadata": {},
"outputs": [
{
"name": "stdout",
Expand Down Expand Up @@ -77,12 +78,12 @@
"from dotenv import load_dotenv, find_dotenv\n",
"\n",
"print(\"Imports pour UI_Configuration chargés (incluant crypto KDF et base64).\")"
],
"metadata": {}
]
},
{
"cell_type": "markdown",
"id": "mw5sea5615",
"metadata": {},
"source": [
"### Interprétation des bibliothèques chargées\n",
"\n",
Expand All @@ -97,8 +98,7 @@
"| **Utilitaires** | `hashlib`, `base64`, `random`, `time`, `traceback` | Hachage pour cache, encodage, sélection aléatoire, temporisation et débogage |\n",
"\n",
"> **Note technique** : L'utilisation de `PBKDF2HMAC` avec 480 000 itérations garantit une dérivation de clé robuste face aux attaques par force brute, conforme aux recommandations NIST 2024."
],
"metadata": {}
]
},
{
"cell_type": "markdown",
Expand All @@ -114,6 +114,7 @@
"cell_type": "code",
"execution_count": 2,
"id": "5e08535d",
"metadata": {},
"outputs": [
{
"name": "stdout",
Expand Down Expand Up @@ -233,12 +234,12 @@
"current_extract_definitions = []\n",
"\n",
"print(f\"Configuration UI chargée. {len(EXTRACT_SOURCES)} sources initiales définies.\")"
],
"metadata": {}
]
},
{
"cell_type": "markdown",
"id": "p0gm92tr7jp",
"metadata": {},
"source": [
"### Analyse des résultats de configuration\n",
"\n",
Expand All @@ -262,8 +263,7 @@
"- Une meilleure traçabilité dans les logs (sans exposer les URLs complètes)\n",
"- Une gestion flexible des changements de domaine\n",
"- Un fallback plus robuste en cas d'indisponibilité d'une source"
],
"metadata": {}
]
},
{
"cell_type": "markdown",
Expand All @@ -287,6 +287,7 @@
"cell_type": "code",
"execution_count": 3,
"id": "ex-aa5-url-code",
"metadata": {},
"outputs": [
{
"name": "stdout",
Expand All @@ -311,8 +312,7 @@
"url = my_reconstruct_url(\"https\", \"example.com\", \"/api/text\")\n",
"print(f\"URL reconstituee: {url}\")\n",
"print(\"Exercice a completer\")\n"
],
"metadata": {}
]
},
{
"cell_type": "markdown",
Expand All @@ -334,6 +334,7 @@
"cell_type": "code",
"execution_count": 4,
"id": "ff6ba3ac",
"metadata": {},
"outputs": [
{
"name": "stdout",
Expand All @@ -352,13 +353,8 @@
" path = path if path.startswith('/') or not path else '/' + path\n",
" return f\"{schema}//{host}{path}\"\n",
"\n",
"# --- Définitions des autres fonctions utilitaires ---\n",
"# (get_cache_filepath, load_from_cache, save_to_cache, encrypt_data, decrypt_data,\n",
"# load_extract_definitions (modifiée pour utiliser la nouvelle structure interne),\n",
"# save_extract_definitions, fetch_with_jina, fetch_with_tika)\n",
"# ... (Copiez ici le code complet de ces fonctions depuis la CELLULE 3 / Bloc Python 3 de ma réponse précédente) ...\n",
"# ... Assurez-vous que load_extract_definitions utilise la nouvelle structure\n",
"# et que fetch_with_jina/tika appellent la nouvelle reconstruct_url si nécessaire ...\n",
"# --- Autres fonctions utilitaires (definitions ci-dessous) ---\n",
"\n",
"\n",
"# Exemple de load_extract_definitions (ajusté légèrement pour fallback)\n",
"def load_extract_definitions(config_file: Path, key: bytes) -> list:\n",
Expand Down Expand Up @@ -402,7 +398,7 @@
" print(f\"❌ Erreur chargement/traitement '{config_file}': {e}. Utilisation définitions en mémoire.\")\n",
" return fallback_definitions[:]\n",
"\n",
"# --- Assurez-vous que toutes les autres fonctions utilitaires sont collées ici ---\n",
"# --- Suite des fonctions utilitaires ---\n",
"def get_cache_filepath(url: str) -> Path:\n",
" url_hash = hashlib.sha256(url.encode()).hexdigest()\n",
" if 'CACHE_DIR' not in globals() or not isinstance(CACHE_DIR, Path): raise NameError(\"CACHE_DIR non définie.\")\n",
Expand Down Expand Up @@ -682,12 +678,12 @@
"\n",
"\n",
"print(\"Fonctions utilitaires UI_Configuration définies.\")"
],
"metadata": {}
]
},
{
"cell_type": "markdown",
"id": "qt712z5rbs",
"metadata": {},
"source": [
"### Fonctions utilitaires définies\n",
"\n",
Expand Down Expand Up @@ -725,8 +721,7 @@
"- **Gestion d'erreurs robuste** : Fallback sur définitions en mémoire si chargement échoue\n",
"\n",
"> **Stratégie de cache** : L'utilisation de hash SHA-256 sur l'URL garantit des noms de fichiers uniques et reproductibles, évitant les collisions même avec des URLs longues."
],
"metadata": {}
]
},
{
"cell_type": "markdown",
Expand All @@ -750,6 +745,7 @@
"cell_type": "code",
"execution_count": 5,
"id": "ex-aa5-hash-code",
"metadata": {},
"outputs": [
{
"name": "stdout",
Expand All @@ -775,8 +771,7 @@
"key = compute_cache_key(\"exemple de texte\")\n",
"print(f\"Cle de cache: {key}\")\n",
"print(\"Exercice a completer\")\n"
],
"metadata": {}
]
},
{
"cell_type": "markdown",
Expand All @@ -792,6 +787,7 @@
"cell_type": "code",
"execution_count": 6,
"id": "0e2d2004",
"metadata": {},
"outputs": [
{
"name": "stdout",
Expand Down Expand Up @@ -889,12 +885,12 @@
" print(\"\\n--- Fin Initialisation du Cache ---\")\n",
" if initialisation_errors > 0: print(f\"⚠️ {initialisation_errors} erreur(s) rencontrée(s).\")\n",
" else: print(\"✅ Cache initialisé/vérifié.\")"
],
"metadata": {}
]
},
{
"cell_type": "markdown",
"id": "zqrf5zupzv",
"metadata": {},
"source": [
"### Résultat de l'initialisation du cache\n",
"\n",
Expand All @@ -914,8 +910,7 @@
"- **Mode offline** : Une fois le cache rempli, le notebook peut fonctionner sans connexion internet\n",
"\n",
"> **Note** : En production, cette cellule peut être commentée si vous souhaitez un chargement à la demande plutôt qu'une initialisation complète."
],
"metadata": {}
]
},
{
"cell_type": "markdown",
Expand All @@ -930,6 +925,7 @@
{
"cell_type": "markdown",
"id": "b492opvkxlt",
"metadata": {},
"source": [
"### Architecture de la fonction principale\n",
"\n",
Expand Down Expand Up @@ -965,8 +961,7 @@
"1. **Polling UI** : La fonction utilise `ui_events()` pour bloquer jusqu'à ce que l'utilisateur clique sur \"Lancer l'Analyse\"\n",
"2. **Gestion d'état** : Variables `nonlocal` pour partager l'état entre les callbacks de widgets\n",
"3. **Retour** : Le texte préparé est retourné au notebook exécuteur principal"
],
"metadata": {}
]
},
{
"cell_type": "markdown",
Expand All @@ -990,6 +985,7 @@
"cell_type": "code",
"execution_count": 7,
"id": "ex-aa5-validate-code",
"metadata": {},
"outputs": [
{
"name": "stdout",
Expand All @@ -1014,13 +1010,13 @@
"test_extract = {\"url\": \"https://example.com\", \"text\": \"Lorem ipsum\"}\n",
"print(f\"Validation: {validate_extract(test_extract)}\")\n",
"print(\"Exercice a completer\")\n"
],
"metadata": {}
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "140c9f17",
"metadata": {},
"outputs": [
{
"name": "stdout",
Expand Down Expand Up @@ -1237,7 +1233,7 @@
" def on_prepare_click_ui(b):\n",
" nonlocal texte_analyse_prepare_local, analyse_ready_to_run_local\n",
" global current_extract_definitions\n",
" # ... (Logique complète et corrigée de on_prepare_click_ui de ma réponse précédente) ...\n",
" # Logique de préparation du texte : dropdowns, cache, reconstruction d URL\n",
" # ... Assurez-vous que cette logique utilise bien la structure URL corrigée ...\n",
" # ... et la gestion des extensions texte simple ...\n",
" analyse_ready_to_run_local = False; run_button.disabled = True\n",
Expand Down Expand Up @@ -1389,12 +1385,12 @@
"\n",
"# --- Fin de la définition de configure_analysis_task ---\n",
"print(\"Fonction configure_analysis_task() définie dans UI_Configuration.ipynb.\")"
],
"metadata": {}
]
},
{
"cell_type": "markdown",
"id": "f21axbbybo",
"metadata": {},
"source": [
"### Utilisation de la fonction dans le notebook exécuteur\n",
"\n",
Expand Down Expand Up @@ -1432,12 +1428,12 @@
"- **Validation** : Le bouton \"Lancer l'Analyse\" reste grisé tant qu'aucun texte valide n'est préparé\n",
"\n",
"> **Astuce** : En mode batch (sans UI), vous pouvez bypass cette fonction et définir directement la variable `texte_a_analyser` avec le contenu souhaité."
],
"metadata": {}
]
},
{
"cell_type": "markdown",
"id": "22b85056",
"metadata": {},
"source": [
"## Resume et perspectives\n",
"\n",
Expand All @@ -1446,8 +1442,7 @@
"L'architecture modulaire adoptee ici -- fonction `configure_analysis_task()` appelee par le notebook executeur via `%run` -- permet une separation nette entre la logique de preparation des données et celle de l'analyse par les agents. La gestion des sources predefinies (debats Lincoln-Douglas, discours historiques, documents geopolitiques) offre un corpus varie pour tester la detection de sophismes, la structure argumentative et la rhétorique persuasive. La verification automatique des marqueurs d'extraits garantit la robustesse du pipeline face aux modifications des pages source.\n",
"\n",
"Le notebook suivant, [Argument_Analysis_Executor](./Argumentation-08b-Executor-Python.ipynb), reprend le texte prepare ici pour orchestrer l'analyse proprement dite : extraction des arguments, identification des premisses et conclusions, detection de sophismes, et evaluation de la coherence globale du discours."
],
"metadata": {}
]
},
{
"cell_type": "markdown",
Expand Down
Loading