Spaces:
Sleeping
Sleeping
Update templates/result.html
Browse files- templates/result.html +33 -19
templates/result.html
CHANGED
|
@@ -357,7 +357,7 @@ footer {
|
|
| 357 |
<div class="panel-tag">03 — Data Komentar</div>
|
| 358 |
<div class="tbl-wrap">
|
| 359 |
<table>
|
| 360 |
-
<thead><tr><th>#</th><th>Sumber</th><th>Komentar</th><th>Sentimen</th></tr></thead>
|
| 361 |
<tbody id="tbl"></tbody>
|
| 362 |
</table>
|
| 363 |
</div>
|
|
@@ -477,9 +477,11 @@ function render(d) {
|
|
| 477 |
$('m-neg-p').textContent = pct(neg,tot)+'%';
|
| 478 |
$('m-neu-p').textContent = pct(neu,tot)+'%';
|
| 479 |
|
| 480 |
-
|
| 481 |
-
|
| 482 |
-
const
|
|
|
|
|
|
|
| 483 |
tEl.className = 'metric-n ' + (isUp ? 'c-up' : 'c-dn');
|
| 484 |
|
| 485 |
// DIST BAR
|
|
@@ -549,17 +551,21 @@ function render(d) {
|
|
| 549 |
}).join('');
|
| 550 |
} else wg.innerHTML = '<span class="empty">Tidak ada data kata.</span>';
|
| 551 |
|
| 552 |
-
// TABLE
|
| 553 |
const tb = $('tbl');
|
| 554 |
if(data.length) {
|
| 555 |
-
tb.innerHTML = data.slice(0,50).map((r,i)=>
|
| 556 |
-
|
|
|
|
|
|
|
| 557 |
<td style="color:var(--muted)">${i+1}</td>
|
| 558 |
<td><span class="src-badge">${esc(r.source||'—')}</span></td>
|
| 559 |
-
<td style="max-width:
|
| 560 |
<td><span class="tag tag-${sc(r.sentiment)}">${r.sentiment||'—'}</span></td>
|
| 561 |
-
|
| 562 |
-
|
|
|
|
|
|
|
| 563 |
|
| 564 |
// TOPICS
|
| 565 |
const tg = $('topics');
|
|
@@ -581,14 +587,18 @@ function render(d) {
|
|
| 581 |
</div>`).join('');
|
| 582 |
} else cg.innerHTML = '<span class="empty">Data tidak cukup untuk clustering.</span>';
|
| 583 |
|
| 584 |
-
// HOAX
|
| 585 |
const hg = $('hoax');
|
| 586 |
if(hoax.length) {
|
| 587 |
-
hg.innerHTML = hoax.map(h=>
|
| 588 |
-
|
|
|
|
|
|
|
| 589 |
<span class="h-badge ${h.label==='Hoax'?'hb-hoax':'hb-norm'}">${h.label}</span>
|
| 590 |
-
<span class="h-text">${esc((h.text||'').substring(0,
|
| 591 |
-
|
|
|
|
|
|
|
| 592 |
} else hg.innerHTML = '<span class="empty">Tidak ada konten terdeteksi.</span>';
|
| 593 |
|
| 594 |
// BOT
|
|
@@ -603,10 +613,14 @@ function render(d) {
|
|
| 603 |
</div>`).join('');
|
| 604 |
} else bg.innerHTML = '<span class="empty">Tidak ada bot terdeteksi.</span>';
|
| 605 |
|
| 606 |
-
// INSIGHT
|
| 607 |
-
const
|
| 608 |
-
|
| 609 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 610 |
|
| 611 |
// IMAGES
|
| 612 |
loadImg('static/wordcloud.png','wc-box');
|
|
|
|
| 357 |
<div class="panel-tag">03 — Data Komentar</div>
|
| 358 |
<div class="tbl-wrap">
|
| 359 |
<table>
|
| 360 |
+
<thead><tr><th>#</th><th>Sumber</th><th>Komentar</th><th>Sentimen</th><th>Conf.</th></tr></thead>
|
| 361 |
<tbody id="tbl"></tbody>
|
| 362 |
</table>
|
| 363 |
</div>
|
|
|
|
| 477 |
$('m-neg-p').textContent = pct(neg,tot)+'%';
|
| 478 |
$('m-neu-p').textContent = pct(neu,tot)+'%';
|
| 479 |
|
| 480 |
+
// TREND — sekarang object, bukan string
|
| 481 |
+
const tEl = $('m-trend');
|
| 482 |
+
const tObj = (typeof trend === 'object' && trend !== null) ? trend : { label: trend, dominant: '', confidence: 0 };
|
| 483 |
+
tEl.textContent = tObj.label || trend;
|
| 484 |
+
const isUp = (tObj.label || '').toLowerCase().includes('positif');
|
| 485 |
tEl.className = 'metric-n ' + (isUp ? 'c-up' : 'c-dn');
|
| 486 |
|
| 487 |
// DIST BAR
|
|
|
|
| 551 |
}).join('');
|
| 552 |
} else wg.innerHTML = '<span class="empty">Tidak ada data kata.</span>';
|
| 553 |
|
| 554 |
+
// TABLE — dengan confidence score
|
| 555 |
const tb = $('tbl');
|
| 556 |
if(data.length) {
|
| 557 |
+
tb.innerHTML = data.slice(0,50).map((r,i)=>{
|
| 558 |
+
const conf = r.confidence ? Math.round(r.confidence*100)+'%' : '—';
|
| 559 |
+
const confColor = r.confidence >= 0.8 ? 'var(--pos)' : r.confidence >= 0.6 ? 'var(--gold)' : 'var(--neg)';
|
| 560 |
+
return `<tr>
|
| 561 |
<td style="color:var(--muted)">${i+1}</td>
|
| 562 |
<td><span class="src-badge">${esc(r.source||'—')}</span></td>
|
| 563 |
+
<td style="max-width:240px;color:var(--m2)">${esc((r.text||'').substring(0,90))}</td>
|
| 564 |
<td><span class="tag tag-${sc(r.sentiment)}">${r.sentiment||'—'}</span></td>
|
| 565 |
+
<td style="font-family:var(--mono);font-size:0.6rem;color:${confColor}">${conf}</td>
|
| 566 |
+
</tr>`;
|
| 567 |
+
}).join('');
|
| 568 |
+
} else tb.innerHTML = '<tr><td colspan="5" class="empty" style="padding:.75rem">Tidak ada data.</td></tr>';
|
| 569 |
|
| 570 |
// TOPICS
|
| 571 |
const tg = $('topics');
|
|
|
|
| 587 |
</div>`).join('');
|
| 588 |
} else cg.innerHTML = '<span class="empty">Data tidak cukup untuk clustering.</span>';
|
| 589 |
|
| 590 |
+
// HOAX — dengan confidence score dan method
|
| 591 |
const hg = $('hoax');
|
| 592 |
if(hoax.length) {
|
| 593 |
+
hg.innerHTML = hoax.map(h=>{
|
| 594 |
+
const conf = h.confidence ? Math.round(h.confidence*100)+'%' : '';
|
| 595 |
+
const method = h.method === 'ml' ? '·ML' : '·KW';
|
| 596 |
+
return `<div class="hoax-item">
|
| 597 |
<span class="h-badge ${h.label==='Hoax'?'hb-hoax':'hb-norm'}">${h.label}</span>
|
| 598 |
+
<span class="h-text">${esc((h.text||'').substring(0,80))}</span>
|
| 599 |
+
${conf ? `<span style="font-family:var(--mono);font-size:0.5rem;color:var(--muted);white-space:nowrap;margin-left:auto">${conf}${method}</span>` : ''}
|
| 600 |
+
</div>`;
|
| 601 |
+
}).join('');
|
| 602 |
} else hg.innerHTML = '<span class="empty">Tidak ada konten terdeteksi.</span>';
|
| 603 |
|
| 604 |
// BOT
|
|
|
|
| 613 |
</div>`).join('');
|
| 614 |
} else bg.innerHTML = '<span class="empty">Tidak ada bot terdeteksi.</span>';
|
| 615 |
|
| 616 |
+
// INSIGHT — gunakan trend object
|
| 617 |
+
const avgConf = data.length ? (data.reduce((s,r)=>s+(r.confidence||0),0)/data.length*100).toFixed(1) : 0;
|
| 618 |
+
const trendLabel = tObj.label || String(trend);
|
| 619 |
+
const trendSum = tObj.summary || trendLabel;
|
| 620 |
+
const polarity = tObj.polarity !== undefined ? tObj.polarity : '—';
|
| 621 |
+
|
| 622 |
+
$('insight-text').innerHTML = `Dari <em>${data.length}</em> komentar yang dianalisis, opini publik terhadap "<em>${esc(kw)}</em>" bersifat <em>${trendLabel.toLowerCase()}</em>. ${trendSum}`;
|
| 623 |
+
$('insight-meta').innerHTML = `Model: IndoBERT (w11wo/indonesian-roberta-base)<br>Avg. confidence: ${avgConf}% · Polarisasi: ${polarity}<br>${new Date().toLocaleDateString('id-ID',{weekday:'long',year:'numeric',month:'long',day:'numeric'})}`;
|
| 624 |
|
| 625 |
// IMAGES
|
| 626 |
loadImg('static/wordcloud.png','wc-box');
|