D Ф m i И i q ц e L Ф y e r commited on
Commit ·
287ff6e
1
Parent(s): 72d257e
fix: add explainer functions for EEAT, TREC, and Bias dashboards
Browse files- syscred/static/index.html +160 -1
syscred/static/index.html
CHANGED
|
@@ -1147,7 +1147,7 @@
|
|
| 1147 |
const biasColor = biasScore > 0.5 ? '#ef4444' : biasScore > 0.3 ? '#eab308' : '#22c55e';
|
| 1148 |
detailsHTML += `
|
| 1149 |
<div class="detail-card">
|
| 1150 |
-
<div class="detail-label">⚖️ Analyse de Biais <span class="help-icon" title="Mesure si le texte contient un langage biaisé ou partisan">?</span></div>
|
| 1151 |
<div class="detail-value" style="color: ${biasColor}">${biasLabel} (${(biasScore * 100).toFixed(0)}%)</div>
|
| 1152 |
</div>
|
| 1153 |
`;
|
|
@@ -1895,6 +1895,165 @@
|
|
| 1895 |
document.getElementById('explainerModal').classList.remove('visible');
|
| 1896 |
}
|
| 1897 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1898 |
// Close modal with Escape key
|
| 1899 |
document.addEventListener('keydown', function(e) {
|
| 1900 |
if (e.key === 'Escape') closeExplainer();
|
|
|
|
| 1147 |
const biasColor = biasScore > 0.5 ? '#ef4444' : biasScore > 0.3 ? '#eab308' : '#22c55e';
|
| 1148 |
detailsHTML += `
|
| 1149 |
<div class="detail-card">
|
| 1150 |
+
<div class="detail-label">⚖️ Analyse de Biais <span class="help-icon" onclick="event.stopPropagation(); showBiasExplainer()" title="Mesure si le texte contient un langage biaisé ou partisan">?</span></div>
|
| 1151 |
<div class="detail-value" style="color: ${biasColor}">${biasLabel} (${(biasScore * 100).toFixed(0)}%)</div>
|
| 1152 |
</div>
|
| 1153 |
`;
|
|
|
|
| 1895 |
document.getElementById('explainerModal').classList.remove('visible');
|
| 1896 |
}
|
| 1897 |
|
| 1898 |
+
function showEEATExplainer() {
|
| 1899 |
+
if (!lastAnalysisData) {
|
| 1900 |
+
alert('Analysez d\'abord une URL pour voir les explications.');
|
| 1901 |
+
return;
|
| 1902 |
+
}
|
| 1903 |
+
|
| 1904 |
+
const modal = document.getElementById('explainerModal');
|
| 1905 |
+
const body = document.getElementById('explainerBody');
|
| 1906 |
+
|
| 1907 |
+
const eeatScores = lastAnalysisData.eeat_scores || {};
|
| 1908 |
+
|
| 1909 |
+
let html = `
|
| 1910 |
+
<div class="metric-explain" style="border-left-color: #3b82f6; background: rgba(59, 130, 246, 0.1);">
|
| 1911 |
+
<div class="metric-explain-header">
|
| 1912 |
+
<span class="metric-explain-icon">📊</span>
|
| 1913 |
+
<span class="metric-explain-name">E-E-A-T Score</span>
|
| 1914 |
+
<span class="metric-explain-value" style="color: #3b82f6; font-size: 1.5rem;">${((eeatScores.overall || 0) * 100).toFixed(0)}%</span>
|
| 1915 |
+
</div>
|
| 1916 |
+
<div class="metric-explain-simple">
|
| 1917 |
+
<strong>Experience, Expertise, Authoritativeness, Trustworthiness</strong><br><br>
|
| 1918 |
+
Ce sont les critères utilisés par Google pour évaluer la qualité du contenu.
|
| 1919 |
+
</div>
|
| 1920 |
+
</div>
|
| 1921 |
+
`;
|
| 1922 |
+
|
| 1923 |
+
const eeatComponents = [
|
| 1924 |
+
{ key: 'experience', label: 'Experience', desc: 'L\'auteur a-t-il une expérience directe du sujet ?' },
|
| 1925 |
+
{ key: 'expertise', label: 'Expertise', desc: 'L\'auteur a-t-il des connaissances reconnues ?' },
|
| 1926 |
+
{ key: 'authority', label: 'Authoritativeness', desc: 'La source est-elle reconnue dans son domaine ?' },
|
| 1927 |
+
{ key: 'trust', label: 'Trustworthiness', desc: 'Le contenu est-il honnête et précis ?' }
|
| 1928 |
+
];
|
| 1929 |
+
|
| 1930 |
+
eeatComponents.forEach(comp => {
|
| 1931 |
+
const score = eeatScores[comp.key] || 0;
|
| 1932 |
+
const color = score >= 0.7 ? '#22c55e' : score >= 0.4 ? '#eab308' : '#ef4444';
|
| 1933 |
+
html += `
|
| 1934 |
+
<div class="metric-explain">
|
| 1935 |
+
<div class="metric-explain-header">
|
| 1936 |
+
<span class="metric-explain-icon">${score >= 0.7 ? '✅' : score >= 0.4 ? '⚠️' : '❌'}</span>
|
| 1937 |
+
<span class="metric-explain-name">${comp.label}</span>
|
| 1938 |
+
<span class="metric-explain-value" style="color: ${color}">${(score * 100).toFixed(0)}%</span>
|
| 1939 |
+
</div>
|
| 1940 |
+
<div class="metric-explain-simple">
|
| 1941 |
+
${comp.desc}
|
| 1942 |
+
</div>
|
| 1943 |
+
</div>
|
| 1944 |
+
`;
|
| 1945 |
+
});
|
| 1946 |
+
|
| 1947 |
+
body.innerHTML = html;
|
| 1948 |
+
modal.classList.add('visible');
|
| 1949 |
+
}
|
| 1950 |
+
|
| 1951 |
+
function showTRECExplainer() {
|
| 1952 |
+
if (!lastAnalysisData) {
|
| 1953 |
+
alert('Analysez d\'abord une URL pour voir les explications.');
|
| 1954 |
+
return;
|
| 1955 |
+
}
|
| 1956 |
+
|
| 1957 |
+
const modal = document.getElementById('explainerModal');
|
| 1958 |
+
const body = document.getElementById('explainerBody');
|
| 1959 |
+
|
| 1960 |
+
const trecMetrics = lastAnalysisData.trec_metrics || {};
|
| 1961 |
+
|
| 1962 |
+
let html = `
|
| 1963 |
+
<div class="metric-explain" style="border-left-color: #8b5cf6; background: rgba(139, 92, 246, 0.1);">
|
| 1964 |
+
<div class="metric-explain-header">
|
| 1965 |
+
<span class="metric-explain-icon">🔍</span>
|
| 1966 |
+
<span class="metric-explain-name">Métriques TREC</span>
|
| 1967 |
+
<span class="metric-explain-value" style="color: #8b5cf6; font-size: 1.5rem;">IR</span>
|
| 1968 |
+
</div>
|
| 1969 |
+
<div class="metric-explain-simple">
|
| 1970 |
+
<strong>Information Retrieval Metrics</strong><br><br>
|
| 1971 |
+
Ces métriques mesurent la qualité de la récupération d'informations.
|
| 1972 |
+
</div>
|
| 1973 |
+
</div>
|
| 1974 |
+
`;
|
| 1975 |
+
|
| 1976 |
+
const metrics = [
|
| 1977 |
+
{ key: 'precision', label: 'Precision', desc: 'Proportion de documents pertinents parmi ceux retrievés' },
|
| 1978 |
+
{ key: 'recall', label: 'Recall', desc: 'Proportion de documents pertinents récupérés sur le total' },
|
| 1979 |
+
{ key: 'map', label: 'MAP', desc: 'Mean Average Precision - qualité globale du ranking' },
|
| 1980 |
+
{ key: 'ndcg', label: 'NDCG', desc: 'Normalized DCG - pertinence normalisée' },
|
| 1981 |
+
{ key: 'mrr', label: 'MRR', desc: 'Mean Reciprocal Rank - rang de la première réponse pertinente' }
|
| 1982 |
+
];
|
| 1983 |
+
|
| 1984 |
+
metrics.forEach(m => {
|
| 1985 |
+
const val = trecMetrics[m.key];
|
| 1986 |
+
const displayVal = typeof val === 'number' ? (m.key === 'precision' || m.key === 'recall' ? (val * 100).toFixed(1) + '%' : val.toFixed(3)) : '--';
|
| 1987 |
+
html += `
|
| 1988 |
+
<div class="metric-explain">
|
| 1989 |
+
<div class="metric-explain-header">
|
| 1990 |
+
<span class="metric-explain-icon">📈</span>
|
| 1991 |
+
<span class="metric-explain-name">${m.label}</span>
|
| 1992 |
+
<span class="metric-explain-value" style="color: #8b5cf6">${displayVal}</span>
|
| 1993 |
+
</div>
|
| 1994 |
+
<div class="metric-explain-simple">
|
| 1995 |
+
${m.desc}
|
| 1996 |
+
</div>
|
| 1997 |
+
</div>
|
| 1998 |
+
`;
|
| 1999 |
+
});
|
| 2000 |
+
|
| 2001 |
+
body.innerHTML = html;
|
| 2002 |
+
modal.classList.add('visible');
|
| 2003 |
+
}
|
| 2004 |
+
|
| 2005 |
+
function showBiasExplainer() {
|
| 2006 |
+
if (!lastAnalysisData) {
|
| 2007 |
+
alert('Analysez d\'abord une URL pour voir les explications.');
|
| 2008 |
+
return;
|
| 2009 |
+
}
|
| 2010 |
+
|
| 2011 |
+
const modal = document.getElementById('explainerModal');
|
| 2012 |
+
const body = document.getElementById('explainerBody');
|
| 2013 |
+
|
| 2014 |
+
const biasAnalysis = (lastAnalysisData.analyseNLP || {}).bias_analysis || {};
|
| 2015 |
+
const biasScore = biasAnalysis.score || 0;
|
| 2016 |
+
|
| 2017 |
+
let html = `
|
| 2018 |
+
<div class="metric-explain" style="border-left-color: #f59e0b; background: rgba(245, 158, 11, 0.1);">
|
| 2019 |
+
<div class="metric-explain-header">
|
| 2020 |
+
<span class="metric-explain-icon">⚖️</span>
|
| 2021 |
+
<span class="metric-explain-name">Analyse de Biais</span>
|
| 2022 |
+
<span class="metric-explain-value" style="color: #f59e0b; font-size: 1.5rem;">${(biasScore * 100).toFixed(0)}%</span>
|
| 2023 |
+
</div>
|
| 2024 |
+
<div class="metric-explain-simple">
|
| 2025 |
+
<strong>Détection de parti pris</strong><br><br>
|
| 2026 |
+
Nous analysons si le texte contient un langage émotionnel, subjectif ou partisan.
|
| 2027 |
+
</div>
|
| 2028 |
+
</div>
|
| 2029 |
+
`;
|
| 2030 |
+
|
| 2031 |
+
const indicators = [
|
| 2032 |
+
{ key: 'label', label: 'Label', desc: 'Classification du niveau de biais détecté' },
|
| 2033 |
+
{ key: 'score', label: 'Score', desc: 'Valeur entre 0 (pas de biais) et 1 (biais fort)' }
|
| 2034 |
+
];
|
| 2035 |
+
|
| 2036 |
+
indicators.forEach(ind => {
|
| 2037 |
+
let val = biasAnalysis[ind.key];
|
| 2038 |
+
if (ind.key === 'score') val = (val * 100).toFixed(0) + '%';
|
| 2039 |
+
html += `
|
| 2040 |
+
<div class="metric-explain">
|
| 2041 |
+
<div class="metric-explain-header">
|
| 2042 |
+
<span class="metric-explain-icon">📋</span>
|
| 2043 |
+
<span class="metric-explain-name">${ind.label}</span>
|
| 2044 |
+
<span class="metric-explain-value" style="color: #f59e0b">${val || '--'}</span>
|
| 2045 |
+
</div>
|
| 2046 |
+
<div class="metric-explain-simple">
|
| 2047 |
+
${ind.desc}
|
| 2048 |
+
</div>
|
| 2049 |
+
</div>
|
| 2050 |
+
`;
|
| 2051 |
+
});
|
| 2052 |
+
|
| 2053 |
+
body.innerHTML = html;
|
| 2054 |
+
modal.classList.add('visible');
|
| 2055 |
+
}
|
| 2056 |
+
|
| 2057 |
// Close modal with Escape key
|
| 2058 |
document.addEventListener('keydown', function(e) {
|
| 2059 |
if (e.key === 'Escape') closeExplainer();
|