Spaces:
Runtime error
Runtime error
File size: 7,017 Bytes
0ad9aa8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Fake News Detection using AugTagalog-BERT</title>
<link rel="icon" type="image/png" href="{{ url_for('static', filename='bert.png') }}" />
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" />
</head>
<body class="min-h-screen flex flex-col justify-between font-sans bg-gray-100">
<header class="bg-gray-800 w-full py-2 flex items-center justify-start">
<div class="flex items-center space-x-4 ml-4">
<img src="{{ url_for('static', filename='bert.png') }}" alt="BERT Logo" class="w-8 h-8" />
<h1 class="text-white text-md font-bold">Fake News Detection using AugTagalog-BERT</h1>
</div>
</header>
<div class="flex-grow flex items-center justify-center px-10 py-12">
<div class="grid grid-cols-1 md:grid-cols-2 w-full gap-12 max-w-6xl">
<div class="flex flex-col p-12 space-y-8 bg-white rounded-lg shadow-lg">
<h2 class="text-2xl font-semibold text-gray-800">Tagalog Fake News Classifier</h2>
<div>
<label for="models" class="block text-lg font-medium text-gray-600 mb-2">Choose a model:</label>
<div class="relative">
<select id="models" name="models" class="w-full bg-white text-gray-900 text-lg rounded-md border border-gray-300 focus:border-gray-500 focus:ring focus:ring-gray-200 py-3 pl-4 pr-10 appearance-none transition duration-200">
<option value="nonaug-bert">Non-Augmented BERT Model</option>
<option value="aug-bert">Augmented BERT Model</option>
<option value="nonaug-tagbert">Non-Augmented Tagalog-RoBERTa Model</option>
<option value="aug-tagbert" selected>Augmented Tagalog-RoBERTa Model</option>
<option value="nonaug-electra">Non-Augmented ELECTRA</option>
<option value="aug-electra">Augmented ELECTRA</option>
</select>
<div class="absolute inset-y-0 right-0 flex items-center pr-4 pointer-events-none">
<i class="fas fa-chevron-down text-gray-500"></i>
</div>
</div>
</div>
<div class="relative w-full">
<label for="newsInput" class="block text-lg font-medium text-gray-600 mb-2">Input News:</label>
<textarea
id="newsInput"
class="h-40 w-full border-2 border-gray-300 rounded-lg pl-4 pr-4 py-3 focus:outline-none focus:ring-2 focus:ring-gray-500 focus:border-gray-500 transition duration-200"
placeholder="Paste your text here..."
rows="6"
></textarea>
</div>
<div class="flex justify-center">
<button
id="detectBtn"
class="bg-gray-800 text-white font-semibold py-3 px-8 rounded-lg hover:bg-gray-600 transition duration-300"
>
Detect
</button>
</div>
</div>
<div class="flex flex-col justify-center p-12 bg-white rounded-lg shadow-lg">
<div id="resultContainer" class="opacity-0 transition-opacity duration-500 h-full flex flex-col justify-center">
<div class="p-8 bg-gradient-to-b from-blue-50 to-white rounded-lg shadow-md">
<h2 class="text-3xl font-semibold mb-6 text-center text-gray-700">Result</h2>
<p id="result" class="text-center text-lg font-semibold p-4 rounded-lg border text-gray-800"></p>
<div class="mt-8">
<h3 class="text-lg font-bold text-center text-gray-700 mb-4">Confidence Levels</h3>
<div class="grid grid-cols-2 gap-4">
<div class="p-4 bg-red-100 rounded-lg shadow-sm text-center">
<h4 class="font-semibold text-red-600">Fake</h4>
<p id="fake" class="text-lg font-bold text-red-700">0%</p>
</div>
<div class="p-4 bg-green-100 rounded-lg shadow-sm text-center">
<h4 class="font-semibold text-green-600">Real</h4>
<p id="real" class="text-lg font-bold text-green-700">0%</p>
</div>
</div>
</div>
</div>
</div>
<div id="loadingSpinner" class="hidden flex justify-center items-center h-full">
<div class="flex flex-col items-center">
<div class="animate-spin rounded-full h-12 w-12 border-b-4 border-gray-600"></div>
<p class="mt-4 text-gray-600 font-semibold">Detecting...</p>
</div>
</div>
</div>
</div>
</div>
<footer class="text-center py-4 bg-gray-800 w-full shadow-inner">
<p class="text-white text-sm">
© 2024 | <span class="font-semibold">J. Embolode, A. Kuan, A. Linaza</span>
</p>
</footer>
<script>
document.getElementById("detectBtn").addEventListener("click", function () {
const newsInput = document.getElementById("newsInput").value;
const model = document.getElementById("models").value;
const loadingSpinner = document.getElementById("loadingSpinner");
const resultContainer = document.getElementById("resultContainer");
const resultText = document.getElementById("result");
const confidenceFake = document.getElementById("fake");
const confidenceReal = document.getElementById("real");
if (newsInput.trim() === "") {
alert("Please enter text.");
return;
}
loadingSpinner.classList.remove("hidden");
resultContainer.style.opacity = 0;
fetch("/detect", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ text: newsInput, model: model }),
})
.then((response) => response.json())
.then((data) => {
loadingSpinner.classList.add("hidden");
resultContainer.style.opacity = 1;
if (data.status === "error") {
resultText.textContent = data.message;
resultText.classList.add("text-red-500");
resultText.classList.remove("text-green-500");
} else {
resultText.innerHTML = data.prediction;
if (data.prediction === "News Needs Further Validation") {
resultText.classList.add("text-red-500");
resultText.classList.remove("text-green-500");
} else {
resultText.classList.add("text-green-500");
resultText.classList.remove("text-red-500");
}
confidenceFake.textContent = (data.confidence.fake * 100).toFixed(2) + "%";
confidenceReal.textContent = (data.confidence.real * 100).toFixed(2) + "%";
}
})
.catch((error) => {
loadingSpinner.classList.add("hidden");
console.error("Error:", error);
});
});
</script>
</body>
</html>
|