diff --git a/docs/taxonomy/497-grappe-inventory.csv b/docs/taxonomy/497-grappe-inventory.csv new file mode 100644 index 00000000..08eb23c6 --- /dev/null +++ b/docs/taxonomy/497-grappe-inventory.csv @@ -0,0 +1,22 @@ +grappe_path,grappe_pk,grappe_name,famille,subtree_size,depth_min,depth_max,existing_crosslinks +1.1,2,Généralisation hâtive,Insuffisance,68,2,7,2 +1.2,70,Préjugé,Insuffisance,63,2,7,0 +1.3,133,Surinterprétation,Insuffisance,42,2,7,3 +2.1,176,Technique rhétorique,Influence,123,2,8,0 +2.2,299,Appel à l'émotion,Influence,57,2,7,2 +2.3,356,Manipulation mentale,Influence,239,2,8,7 +3.1,595,Généralisation abusive,Erreur mathématique,37,2,6,0 +3.2,632,Interprétation quantitative erronée,Erreur mathématique,34,2,6,0 +3.3,666,Conclusion mathématique invalide,Erreur mathématique,30,2,6,1 +4.1,697,Causalité douteuse,Erreur de raisonnement,29,2,6,0 +4.2,726,Composition fautive,Erreur de raisonnement,32,2,6,0 +4.3,758,Déduction invalide,Erreur de raisonnement,40,2,7,0 +5.1,799,Définition biaisée,Abus de langage,34,2,7,2 +5.2,833,Comparaison fallacieuse,Abus de langage,13,2,4,0 +5.3,846,Ambiguïté,Abus de langage,41,2,7,0 +6.1,888,Présentation trompeuse des faits,Tricherie,85,2,8,0 +6.2,973,Déplacement des critères,Tricherie,51,2,7,2 +6.3,1023,Raisonnement biaisé,Tricherie,257,2,10,0 +7.1,1281,Refus du débat,Obstruction,31,2,7,1 +7.2,1312,Sabotage du débat,Obstruction,48,2,7,0 +7.3,1360,Ad hominem,Obstruction,46,2,6,2 diff --git a/docs/taxonomy/497-grappe-substrate.md b/docs/taxonomy/497-grappe-substrate.md new file mode 100644 index 00000000..33802083 --- /dev/null +++ b/docs/taxonomy/497-grappe-substrate.md @@ -0,0 +1,171 @@ +# #497 — Substrat de comparaison grappe-à-grappe (lane ai-01, chantier multi-sessions) + +> **Statut : proposition GATED sous `docs/taxonomy/`.** Aucune écriture dans le CSV de prod. +> L'écriture des cellules `crossLink_*` validées dans `Cards/Fallacies/Argumentum Fallacies - Taxonomy.csv` +> est l'**étape finale gated** (spot-check ai-01 + nod jsboige sur échantillon). +> +> **Mandat jsboige (VÉRIFIÉ, interactif 2026-06-17)** : « il faudra se donner la possibilité de +> **comparer des grappes entières**, et **remonter jusqu'aux nœuds qui se répondent, les plus généraux** » +> — à tâtons, sur de nombreuses sessions, comme le regroupement manuel en grappes de la taxonomie actuelle. +> Direction validée ; #497 est un **chantier multi-sessions**, pas une génération leaf-by-leaf. + +Ce document livre le **substrat outillé** qui rend ces comparaisons faisables session après session. +Il ne propose pas (encore) de liens à écrire : il établit la **carte de travail** sur laquelle la +curation va s'appuyer. Le générateur `497-grappe-substrate.py` (commité ici) re-produit l'ensemble à +partir du CSV — reproductible, zéro état caché. + +--- + +## 1. Méthode — pourquoi « grappe », pourquoi « le plus général d'abord » + +La taxonomie Fallacies = **1408 nœuds** sur un arbre de profondeur 0→10 (`path` = numérotation +hiérarchique, ex `2.3.1.1.4.1`). Comparer **feuille à feuille** (1366 feuilles) est combinatoirement +intenable *et* contraire à la méthode de jsboige. On compare donc des **sous-arbres (« grappes »)**. + +- **Grappe = sous-arbre raciné à un nœud de profondeur 2** (le niveau « sous-famille majeure »). + Il y a **21 grappes depth-2** — le bon grain pour « les nœuds les plus généraux ». (Le niveau + depth-3 = 63 grappes plus fines, disponible pour la descente ultérieure « à tâtons ».) +- **Trois couches d'analyse**, par fiabilité décroissante : + 1. **Inventaire** (§2) — squelette factuel des 21 grappes. + 2. **Grappes qui se répondent — preuve empirique** (§3) — on fait **remonter** les crossLinks + feuille-à-feuille *déjà existants* jusqu'au niveau grappe. **Zéro fabrication** : c'est de la + donnée réelle ré-agrégée. C'est le signal de confiance. + 3. **Candidats d'affinité lexicale** (§4) — heuristique exploratoire (vocabulaire partagé), à + **trier en curation**. Ne vaut que comme générateur de pistes. + +Workflow cible (§5) : valider la **correspondance générale** d'une paire de grappes, puis **descendre +à tâtons** en mappant les nœuds fins ; chaque session ajoute les liens généraux validés puis raffine. + +--- + +## 2. Inventaire des 21 grappes depth-2 + +(`size` = nœuds du sous-arbre ; `cl` = crossLinks déjà posés dans le sous-arbre. Source machine : +`497-grappe-inventory.csv`.) + +| path | Famille | nom de la grappe | size | depth | cl | +|------|---------|------------------|-----:|-------|---:| +| 1.1 | Insuffisance | Généralisation hâtive | 68 | 2–7 | 2 | +| 1.2 | Insuffisance | Préjugé | 63 | 2–7 | 0 | +| 1.3 | Insuffisance | Surinterprétation | 42 | 2–7 | 3 | +| 2.1 | Influence | Technique rhétorique | 123 | 2–8 | 0 | +| 2.2 | Influence | Appel à l'émotion | 57 | 2–7 | 2 | +| **2.3** | **Influence** | **Manipulation mentale** | **239** | 2–8 | **7** | +| 3.1 | Erreur mathématique | Généralisation abusive | 37 | 2–6 | 0 | +| 3.2 | Erreur mathématique | Interprétation quantitative erronée | 34 | 2–6 | 0 | +| 3.3 | Erreur mathématique | Conclusion mathématique invalide | 30 | 2–6 | 1 | +| 4.1 | Erreur de raisonnement | Causalité douteuse | 29 | 2–6 | 0 | +| 4.2 | Erreur de raisonnement | Composition fautive | 32 | 2–6 | 0 | +| 4.3 | Erreur de raisonnement | Déduction invalide | 40 | 2–7 | 0 | +| 5.1 | Abus de langage | Définition biaisée | 34 | 2–7 | 2 | +| 5.2 | Abus de langage | Comparaison fallacieuse | 13 | 2–4 | 0 | +| 5.3 | Abus de langage | Ambiguïté | 41 | 2–7 | 0 | +| 6.1 | Tricherie | Présentation trompeuse des faits | 85 | 2–8 | 0 | +| 6.2 | Tricherie | Déplacement des critères | 51 | 2–7 | 2 | +| **6.3** | **Tricherie** | **Raisonnement biaisé** | **257** | 2–10 | 0 | +| 7.1 | Obstruction | Refus du débat | 31 | 2–7 | 1 | +| 7.2 | Obstruction | Sabotage du débat | 48 | 2–7 | 0 | +| 7.3 | Obstruction | Ad hominem | 46 | 2–6 | 2 | + +**Observation structurelle** : les deux **plus grosses** grappes de tout l'arbre — `2.3 Manipulation +mentale` (239) et `6.3 Raisonnement biaisé` (257) — concentrent l'essentiel de la masse. Couverture +relationnelle actuelle = **22 crossLinks / 1408 nœuds (1,6 %)**, très concentrée (7 des 22 partent de `2.3`). + +--- + +## 3. Grappes qui se répondent — preuve empirique (bubble-up des crossLinks) + +On prend les **22 crossLinks feuille-à-feuille existants** et on remonte **chaque extrémité jusqu'à sa +grappe depth-2**. Résultat : **16 arêtes grappe↔grappe**, dont **14 inter-familles**. Source machine : +`497-responding-grappes.csv`. + +### Arête dominante (le point d'ancrage du chantier) + +> **`2.3 Manipulation mentale` [Influence] → `6.3 Raisonnement biaisé` [Tricherie] — poids 7** + +Sept crossLinks `PredatesOn` (« prédate sur ») relient des **techniques de manipulation** au **biais +cognitif** qu'elles exploitent : Cadrage→Effet de cadrage, Ancrage→Effet d'ancrage, Leurre→Effet de +leurre, Coûts irrécupérables→Biais des coûts irrécupérables, etc. La relation générale qui « se +répond » est donc : **`Manipulation mentale` *exploite* `Raisonnement biaisé`**. Ce sont précisément +**les deux nœuds les plus généraux** qui se correspondent — exactement la cible de la méthode jsboige. +Une fois ce lien général posé, la descente est *systématique* : chaque technique de manipulation ↔ le +biais qu'elle exploite (mapping 1-à-1 partiellement déjà tracé, à compléter à tâtons). + +### Les autres arêtes (poids 1, déjà attestées) + +| src grappe | type(s) | tgt grappe | inter-fam | +|-----------|---------|-----------|:--------:| +| 7.3 Ad hominem [Obstruction] | PredatesOn | 6.3 Raisonnement biaisé [Tricherie] | ✓ | +| 7.3 Ad hominem [Obstruction] | Leverages | 5.2 Comparaison fallacieuse [Abus de langage] | ✓ | +| 7.1 Refus du débat [Obstruction] | Leverages | 5.3 Ambiguïté [Abus de langage] | ✓ | +| 6.2 Déplacement des critères [Tricherie] | IsRelatedTo | 1.1 Généralisation hâtive [Insuffisance] | ✓ | +| 5.1 Définition biaisée [Abus de langage] | Mirrors | 3.3 Conclusion math. invalide [Erreur math.] | ✓ | +| 2.2 Appel à l'émotion [Influence] | Allows | 1.3 Surinterprétation [Insuffisance] | ✓ | +| 2.2 Appel à l'émotion [Influence] | PredatesOn | 1.1 Généralisation hâtive [Insuffisance] | ✓ | +| 1.3 Surinterprétation [Insuffisance] | Leverages | 5.3 Ambiguïté [Abus de langage] | ✓ | +| 1.3 Surinterprétation [Insuffisance] | Denounces | 5.1 Définition biaisée [Abus de langage] | ✓ | +| 1.3 Surinterprétation [Insuffisance] | Leverages | 4.1 Causalité douteuse [Erreur de raisonnement] | ✓ | +| 1.1 Généralisation hâtive [Insuffisance] | IsRelatedTo | 7.1 Refus du débat [Obstruction] | ✓ | +| (2 arêtes intra-famille `6.2→6.2`, `5.1→5.1` — bruit attendu, ignorées en priorité) | | | | + +Ces 14 arêtes inter-familles **sont la première carte des grappes qui se répondent** — entièrement +fondée sur des liens déjà validés à la main, donc sûres comme points de départ de la curation. + +--- + +## 4. Candidats d'affinité lexicale (heuristique — à TRIER en curation) + +Pour suggérer des paires **pas encore liées**, on mesure le vocabulaire distinctif partagé entre +grappes inter-familles (Jaccard sur les ~22 termes saillants de `text_fr`+`desc_fr`, stopwords +argumentatifs génériques retirés). **C'est un générateur de pistes, pas une preuve** : le bruit +résiduel (verbes de second-personne, « votre », « entre ») reste présent. Top pistes : + +| Jaccard | grappe A | grappe B | termes partagés notables | +|--------:|----------|----------|--------------------------| +| 0.19 | Généralisation hâtive [Insuff.] | Refus du débat [Obstr.] | preuve, prétendez, rejetez, fournir | +| 0.16 | Interprétation quantitative [Err.math] | Causalité douteuse [Err.rais.] | causalité, cause, résultat, attribuez, tort | +| 0.16 | Appel à l'émotion [Infl.] | Ad hominem [Obstr.] | adversaire, discréditer, interlocuteur, proposition | +| 0.16 | Conclusion math. invalide [Err.math] | Ambiguïté [Abus] | argumentation, plusieurs, faites, utilisez | +| 0.13 | Généralisation hâtive [Insuff.] | Raisonnement biaisé [Tricherie] | croyances, monde, pensez, considérez | + +Lecture curatoriale : « Interprétation quantitative ↔ Causalité douteuse » (les deux erreurs causales, +familles différentes) et « Appel à l'émotion ↔ Ad hominem » (attaquer via la personne / l'affect) +sont des **ponts plausibles** ; les autres mélangent du vocabulaire de surface. Liste complète +re-générable via le script (`cands2`, 65 paires ≥ 3 termes). + +--- + +## 5. Workflow curatorial proposé (multi-sessions, « le général d'abord ») + +1. **Session-type** : prendre **une** paire de grappes « qui se répondent » (commencer par l'ancre + §3 : `2.3 ↔ 6.3`), poser/valider le **lien au niveau général** (le nœud depth-2/3 le plus général + de chaque côté), avec son type (`PredatesOn`, `Leverages`, `Opposes`…). +2. **Descendre à tâtons** : sous ce lien général, apparier les nœuds fins (technique ↔ biais exploité), + un sous-ensemble par session — pas d'exhaustivité forcée. +3. **Réciprocité** : rappel convention — `crossLink_*` stocke le **`path`** de la cible (PAS le PK) ; + un lien réciproque = paths croisés dans les deux nœuds. +4. **Accumulation** : chaque session ajoute ses liens généraux validés au substrat (re-run du script + met à jour le bubble-up — les nouveaux liens remontent automatiquement et raffinent la carte). +5. **Gate** : tout passe d'abord en proposition `docs/taxonomy/` ; l'écriture dans le CSV de prod = + spot-check ai-01 + nod jsboige sur échantillon. + +### Premières paires-cibles recommandées (ordre proposé) +1. **`2.3 Manipulation mentale` *exploite (PredatesOn)* `6.3 Raisonnement biaisé`** — déjà 7 liens, descente quasi-mécanique. +2. **`7.3 Ad hominem` *exploite* `6.3 Raisonnement biaisé`** (effet de mode, etc.) + **`2.2 Appel à l'émotion`** : les trois voies « attaque/émotion/mode → biais ». +3. **`3.2 Interprétation quantitative` ↔ `4.1 Causalité douteuse`** (pont causal inter-familles, piste §4 à valider). + +--- + +## 6. Fichiers livrés (gate-safe, docs/ only) + +| Fichier | Rôle | +|---------|------| +| `497-grappe-substrate.md` | ce document (méthode + carte de travail) | +| `497-grappe-inventory.csv` | les 21 grappes depth-2 (squelette factuel) | +| `497-responding-grappes.csv` | les 16 arêtes empiriques (bubble-up), machine-consumable | +| `497-grappe-substrate.py` | générateur reproductible (lit le CSV, écrit les sorties) | + +**Aucune** modification de CSV de prod, OWL, EPITA, cartes, mindmaps. Je livre le substrat, je ne +déclare pas de lien à écrire : la curation grappe-à-grappe démarre sur ce socle, session après session. + +🤖 ai-01 — lane #497 (curation outillée) diff --git a/docs/taxonomy/497-grappe-substrate.py b/docs/taxonomy/497-grappe-substrate.py new file mode 100644 index 00000000..ff080011 --- /dev/null +++ b/docs/taxonomy/497-grappe-substrate.py @@ -0,0 +1,174 @@ +# -*- coding: utf-8 -*- +"""#497 grappe-comparison substrate generator (ai-01 lane). +Produces a per-grappe inventory + empirical crossLink bubble-up (responding grappes) ++ a lexical affinity candidate pass. Gate-safe: writes only to docs/taxonomy/. +""" +import csv, re, io +from collections import Counter, defaultdict + +SRC = 'Cards/Fallacies/Argumentum Fallacies - Taxonomy.csv' +rows = list(csv.DictReader(open(SRC, encoding='utf-8-sig', newline=''))) + +CL = ['crossLink_PredatesOn','crossLink_Denounces','crossLink_Leverages','crossLink_Allows', + 'crossLink_Opposes','crossLink_Inverts','crossLink_Mirrors','crossLink_IsRelatedTo'] + +bypath = {r['path']: r for r in rows} +def name(r): return (r.get('text_fr') or r.get('nom_vulgarisé') or '').strip() +def fam(r): return (r.get('Famille') or '').strip() + +# ---- ancestor helpers ------------------------------------------------------- +def ancestor_at_depth(path, d): + segs = path.split('.') + if len(segs) <= d: return path # node shallower than target depth = itself + return '.'.join(segs[:d]) + +# ---- 1) GRAPPE INVENTORY (depth 2 and depth 3 roots) ------------------------ +def build_grappes(grappe_depth): + g = defaultdict(list) + for r in rows: + depth = int(r['depth']) if r['depth'].isdigit() else 0 + if depth < grappe_depth: # root/family above grappe level - skip as members + continue + groot = ancestor_at_depth(r['path'], grappe_depth) + g[groot].append(r) + out = [] + for groot, members in g.items(): + rootrow = bypath.get(groot) + if not rootrow: # grappe root path not itself a node -> skip (shouldn't happen) + continue + depths = [int(m['depth']) for m in members if m['depth'].isdigit()] + ncl = sum(1 for m in members for c in CL if (m.get(c) or '').strip()) + out.append({ + 'root': groot, 'pk': rootrow['PK'], 'name': name(rootrow), 'fam': fam(rootrow), + 'size': len(members), 'dmin': min(depths) if depths else 0, + 'dmax': max(depths) if depths else 0, 'ncl': ncl, 'members': members, + }) + out.sort(key=lambda x: [int(s) for s in x['root'].split('.')]) + return out + +g2 = build_grappes(2) +g3 = build_grappes(3) + +# ---- 2) CROSSLINK BUBBLE-UP (empirical responding grappes) ------------------ +# climb each existing leaf crossLink endpoint to its depth-2 grappe root. +edges2 = Counter() # (srcG2, tgtG2) -> count +edge_detail = defaultdict(list) +raw_links = [] +for r in rows: + for c in CL: + v = (r.get(c) or '').strip() + if not v: continue + tgt = bypath.get(v) + if not tgt: continue + typ = c.replace('crossLink_','') + raw_links.append((r['path'], name(r), typ, v, name(tgt), fam(r), fam(tgt))) + sG = ancestor_at_depth(r['path'], 2) + tG = ancestor_at_depth(v, 2) + key = (sG, tG) + edges2[key]+=1 + edge_detail[key].append((r['path'], name(r), typ, v, name(tgt))) + +# ---- 3) LEXICAL AFFINITY CANDIDATES (heuristic, UNVALIDATED) ---------------- +STOP = set('''de la le les des du un une et en au aux dans par pour sur avec sans sous +ce cette ces qui que quoi dont ou où à a ses son sa leur leurs il elle on nous vous ils +est sont être avoir fait faire plus moins très bien mal tout tous toute toutes autre +comme ne pas ni se sʼ s lʼ l d n c j m t qu y'''.split()) +def toks(s): + s = s.lower() + s = re.sub(r"[''`]", ' ', s) + return [w for w in re.findall(r"[a-zàâäéèêëîïôöùûüçœ]{4,}", s) if w not in STOP] + +def grappe_vocab(grp): + c = Counter() + for m in grp['members']: + c.update(toks(name(m))) + c.update(toks((m.get('desc_fr') or ''))) + return c + +vocab2 = {grp['root']: grappe_vocab(grp) for grp in g2} +# candidate cross-family pairs by shared distinctive vocabulary (Jaccard on top terms) +def top_terms(c, n=25): + return set(w for w,_ in c.most_common(n)) +cands = [] +g2_index = {grp['root']: grp for grp in g2} +roots = [grp['root'] for grp in g2] +for i in range(len(roots)): + for j in range(i+1, len(roots)): + a, b = roots[i], roots[j] + ga, gb = g2_index[a], g2_index[b] + if ga['fam'] == gb['fam']: # cross-family only (intra-family already grouped) + continue + ta, tb = top_terms(vocab2[a]), top_terms(vocab2[b]) + inter = ta & tb + if len(inter) >= 3: + jac = len(inter)/len(ta|tb) + cands.append((jac, len(inter), a, ga['name'], ga['fam'], b, gb['name'], gb['fam'], sorted(inter))) +cands.sort(reverse=True) + +# ---- WRITE OUTPUTS ---------------------------------------------------------- +import os +os.makedirs('docs/taxonomy', exist_ok=True) + +# CSV inventory (depth-2 grappes) +with open('docs/taxonomy/497-grappe-inventory.csv','w', encoding='utf-8', newline='') as f: + w = csv.writer(f) + w.writerow(['grappe_path','grappe_pk','grappe_name','famille','subtree_size','depth_min','depth_max','existing_crosslinks']) + for grp in g2: + w.writerow([grp['root'],grp['pk'],grp['name'],grp['fam'],grp['size'],grp['dmin'],grp['dmax'],grp['ncl']]) + +print('rows', len(rows), '| g2', len(g2), '| g3', len(g3)) +print('bubble-up edges (grappe-pairs from leaf crossLinks):', len(edges2)) +print('top bubble edges:') +for cnt,k in sorted(((cnt,k) for k,cnt in edges2.items()), reverse=True)[:12]: + sN = g2_index.get(k[0],{}).get('name','?'); tN = bypath.get(k[1]) and name(bypath[k[1]]) or '?' + sG = g2_index.get(k[0]); tG = g2_index.get(k[1]) + print(f' {cnt}x {k[0]} {sN[:22]!r} [{sG["fam"] if sG else "?"}] -> {k[1]} {tN[:22]!r} [{tG["fam"] if tG else "?"}]') +print('lexical affinity candidates (cross-family, >=3 shared top-terms):', len(cands)) +for c in cands[:8]: + print(f' jac={c[0]:.2f} share={c[1]} {c[3][:20]!r}[{c[4]}] <-> {c[6][:20]!r}[{c[7]}] {c[8][:6]}') + +# ---- REFINED lexical pass (down-weight generic argumentation scaffolding) ---- +STOP2 = STOP | set('''argument arguments debat débat sophisme appel position point parce +afin deux meme même fausse presentez présentez affirmez idee idée raisonnement conclusion +premisse prémisse exemple personne facon façon plutot plutôt alors donc ainsi cela celui +chose choses cas type sorte maniere manière terme termes mot mots phrase elements éléments'''.split()) +def toks2(s): + s=s.lower(); s=re.sub(r"[''`]",' ',s) + return [w for w in re.findall(r"[a-zàâäéèêëîïôöùûüçœ]{4,}",s) if w not in STOP2] +def gv2(grp): + c=Counter() + for m in grp['members']: + c.update(toks2(name(m))); c.update(toks2((m.get('desc_fr') or ''))) + return c +vv={grp['root']:gv2(grp) for grp in g2} +def tt(c,n=22): return set(w for w,_ in c.most_common(n)) +cands2=[] +for i in range(len(roots)): + for j in range(i+1,len(roots)): + a,b=roots[i],roots[j]; ga,gb=g2_index[a],g2_index[b] + if ga['fam']==gb['fam']: continue + ia,ib=tt(vv[a]),tt(vv[b]); inter=ia&ib + if len(inter)>=3: + jac=len(inter)/len(ia|ib) + cands2.append((round(jac,3),len(inter),a,ga['name'],ga['fam'],b,gb['name'],gb['fam'],sorted(inter))) +cands2.sort(reverse=True) +print('\n=== REFINED lexical candidates:', len(cands2)) +for c in cands2[:12]: + print(f' jac={c[0]:.2f} n={c[1]} {c[3][:22]!r}[{c[4][:4]}] <-> {c[6][:22]!r}[{c[7][:4]}] {c[8][:5]}') +print('\n=== FULL depth-2 grappe inventory (21) ===') +for grp in g2: + print(f' {grp["root"]:>4} {grp["fam"][:14]:<14} sz={grp["size"]:>3} d{grp["dmin"]}-{grp["dmax"]} cl={grp["ncl"]} {grp["name"]}') + +# ---- emit responding-grappes CSV (empirical bubble-up, machine-consumable) --- +with open('docs/taxonomy/497-responding-grappes.csv','w', encoding='utf-8', newline='') as f: + w=csv.writer(f) + w.writerow(['weight','src_grappe_path','src_grappe_name','src_famille', + 'tgt_grappe_path','tgt_grappe_name','tgt_famille','cross_family','leaf_link_examples']) + for cnt,k in sorted(((cnt,k) for k,cnt in edges2.items()), reverse=True): + sg=g2_index.get(k[0]); tg=g2_index.get(k[1]) + sN=sg['name'] if sg else (name(bypath[k[0]]) if k[0] in bypath else '?') + tN=tg['name'] if tg else (name(bypath[k[1]]) if k[1] in bypath else '?') + sF=sg['fam'] if sg else '?'; tF=tg['fam'] if tg else '?' + ex='; '.join(f'{d[1]}-[{d[2]}]->{d[4]}' for d in edge_detail[k][:3]) + w.writerow([cnt,k[0],sN,sF,k[1],tN,tF, 'YES' if sF!=tF else 'no', ex]) +print('\nWROTE docs/taxonomy/497-responding-grappes.csv (', len(edges2),'edges )') diff --git a/docs/taxonomy/497-responding-grappes.csv b/docs/taxonomy/497-responding-grappes.csv new file mode 100644 index 00000000..51d5741e --- /dev/null +++ b/docs/taxonomy/497-responding-grappes.csv @@ -0,0 +1,17 @@ +weight,src_grappe_path,src_grappe_name,src_famille,tgt_grappe_path,tgt_grappe_name,tgt_famille,cross_family,leaf_link_examples +7,2.3,Manipulation mentale,Influence,6.3,Raisonnement biaisé,Tricherie,YES,Cadrage-[PredatesOn]->Effet de cadrage; Appel à la validation subjective-[PredatesOn]->Validation subjective; Ancrage-[PredatesOn]->Effet d'ancrage +1,7.3,Ad hominem,Obstruction,6.3,Raisonnement biaisé,Tricherie,YES,Appel à la bande-[PredatesOn]->Effet de mode +1,7.3,Ad hominem,Obstruction,5.2,Comparaison fallacieuse,Abus de langage,YES,Culpabilité par association-[Leverages]->Sophisme d'association +1,7.1,Refus du débat,Obstruction,5.3,Ambiguïté,Abus de langage,YES,Relativisme abusif-[Leverages]->Réification +1,6.2,Déplacement des critères,Tricherie,6.2,Déplacement des critères,Tricherie,no,Tourner la page-[Opposes]->Attente irréaliste +1,6.2,Déplacement des critères,Tricherie,1.1,Généralisation hâtive,Insuffisance,YES,La pendule cassée inverse-[IsRelatedTo]->La pendule arrêtée +1,5.1,Définition biaisée,Abus de langage,5.1,Définition biaisée,Abus de langage,no,Faux dilemme-[Inverts]->Déni du corrélatif +1,5.1,Définition biaisée,Abus de langage,3.3,Conclusion mathématique invalide,Erreur mathématique,YES,Faux dilemme-[Mirrors]->Juste milieu +1,3.3,Conclusion mathématique invalide,Erreur mathématique,5.1,Définition biaisée,Abus de langage,YES,Juste milieu-[Mirrors]->Faux dilemme +1,2.2,Appel à l'émotion,Influence,1.3,Surinterprétation,Insuffisance,YES,Fâcher l'adversaire-[Allows]->Appel à la colère +1,2.2,Appel à l'émotion,Influence,1.1,Généralisation hâtive,Insuffisance,YES,Appel à l'ignorance assumée-[PredatesOn]->Ignorance délibérée +1,1.3,Surinterprétation,Insuffisance,5.3,Ambiguïté,Abus de langage,YES,Tromperie implicite-[Leverages]->Fausse implication +1,1.3,Surinterprétation,Insuffisance,5.1,Définition biaisée,Abus de langage,YES,Sophisme étymologique-[Denounces]->Langage idiosyncrasique +1,1.3,Surinterprétation,Insuffisance,4.1,Causalité douteuse,Erreur de raisonnement,YES,Sophisme du sophisme-[Leverages]->Négation de l'antécédent +1,1.1,Généralisation hâtive,Insuffisance,7.1,Refus du débat,Obstruction,YES,Argument vide-[IsRelatedTo]->Portée limitée +1,1.1,Généralisation hâtive,Insuffisance,6.2,Déplacement des critères,Tricherie,YES,La pendule arrêtée-[Opposes]->La pendule cassée inverse