mirror of
https://github.com/karma-riuk/crab-webapp.git
synced 2025-07-05 14:18:12 +02:00
added table to show results in frontend
This commit is contained in:
@ -42,3 +42,50 @@ h1 {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#results-container {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
table th {
|
||||||
|
background-color: #f4f4f4;
|
||||||
|
padding: 8px;
|
||||||
|
text-align: left;
|
||||||
|
border-bottom: 2px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
table td {
|
||||||
|
padding: 8px;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
table tr:nth-child(even) {
|
||||||
|
background-color: #fafafa;
|
||||||
|
}
|
||||||
|
|
||||||
|
table tr:hover {
|
||||||
|
background-color: #f1f1f1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* style id column values */
|
||||||
|
table td:nth-child(1) {
|
||||||
|
|
||||||
|
font-family: monospace; /* fixed-width font */
|
||||||
|
width: 8ch; /* exactly 8 “0” widths */
|
||||||
|
white-space: normal; /* allow wrapping */
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* style score header */
|
||||||
|
table th:nth-child(3) {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* style score column values */
|
||||||
|
table td:nth-child(3) {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -56,6 +56,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="results-container">
|
||||||
|
<h3>Results</h3>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>id</th>
|
||||||
|
<th>Proposed comment</th>
|
||||||
|
<th>Max bleu score</th>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
@ -6,6 +6,8 @@ const progressBar = document.getElementById("progress-bar");
|
|||||||
const progressText = document.getElementById("progress-text");
|
const progressText = document.getElementById("progress-text");
|
||||||
const statusEl = document.getElementById("status");
|
const statusEl = document.getElementById("status");
|
||||||
|
|
||||||
|
const resultsContainer = document.getElementById("results-container");
|
||||||
|
|
||||||
function setProgress(percent) {
|
function setProgress(percent) {
|
||||||
progressBar.value = percent;
|
progressBar.value = percent;
|
||||||
progressText.textContent = `${percent}%`;
|
progressText.textContent = `${percent}%`;
|
||||||
@ -24,3 +26,27 @@ socket.on("started-processing", () => {
|
|||||||
progressContainer.style.display = "block";
|
progressContainer.style.display = "block";
|
||||||
setProgress(0);
|
setProgress(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
socket.on("ended-processing", (data) => {
|
||||||
|
resultsContainer.style.display = "block";
|
||||||
|
// empty the table besides the header of the table and fill the table. the data is of form id:
|
||||||
|
// {"proposed comment": "bla bla bla", "bleu score": 0.2}
|
||||||
|
|
||||||
|
const table = resultsContainer.querySelector("table");
|
||||||
|
|
||||||
|
// remove all the rows besides the table header
|
||||||
|
while (table.rows.length > 1) {
|
||||||
|
table.deleteRow(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.entries(data).forEach(([id, info]) => {
|
||||||
|
const row = table.insertRow(); // create a new row
|
||||||
|
const idCell = row.insertCell(); // cell 1: id
|
||||||
|
const commentCell = row.insertCell(); // cell 2: proposed comment
|
||||||
|
const scoreCell = row.insertCell(); // cell 3: bleu score
|
||||||
|
|
||||||
|
idCell.textContent = id;
|
||||||
|
commentCell.textContent = info["proposed comment"];
|
||||||
|
scoreCell.textContent = info["max bleu score"].toFixed(4);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
@ -80,11 +80,18 @@ router.post("/submit/comments", upload.single("file"), async (req, res) => {
|
|||||||
io.to(socketId).emit("started-processing");
|
io.to(socketId).emit("started-processing");
|
||||||
}
|
}
|
||||||
|
|
||||||
evaluate_comments(validatedData, (percent) => {
|
evaluate_comments(
|
||||||
|
validatedData,
|
||||||
|
(percent) => {
|
||||||
if (!(socketId && io.sockets.sockets.has(socketId))) return;
|
if (!(socketId && io.sockets.sockets.has(socketId))) return;
|
||||||
|
|
||||||
io.to(socketId).emit("progress", { percent });
|
io.to(socketId).emit("progress", { percent });
|
||||||
});
|
},
|
||||||
|
(results) => {
|
||||||
|
if (!(socketId && io.sockets.sockets.has(socketId))) return;
|
||||||
|
io.to(socketId).emit("ended-processing", results);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
res.status(200).json({
|
res.status(200).json({
|
||||||
message: "Answer submitted successfully",
|
message: "Answer submitted successfully",
|
||||||
|
@ -4,7 +4,7 @@ import { bleu } from "bleu-score";
|
|||||||
|
|
||||||
const DATASET_PATH = getProjectPath("data/dataset.json");
|
const DATASET_PATH = getProjectPath("data/dataset.json");
|
||||||
|
|
||||||
export const evaluate_comments = async (answers, percent_cb) => {
|
export const evaluate_comments = async (answers, percent_cb, finished_cb) => {
|
||||||
console.log(`Reading dataset...`);
|
console.log(`Reading dataset...`);
|
||||||
const raw = fs.readFileSync(DATASET_PATH);
|
const raw = fs.readFileSync(DATASET_PATH);
|
||||||
const dataset = JSON.parse(raw);
|
const dataset = JSON.parse(raw);
|
||||||
@ -19,6 +19,7 @@ export const evaluate_comments = async (answers, percent_cb) => {
|
|||||||
|
|
||||||
const total = Object.keys(answers).length;
|
const total = Object.keys(answers).length;
|
||||||
let i = 0;
|
let i = 0;
|
||||||
|
const results = {};
|
||||||
for (const [id, generated_comment] of Object.entries(answers)) {
|
for (const [id, generated_comment] of Object.entries(answers)) {
|
||||||
console.log(`Processing ${id}...`);
|
console.log(`Processing ${id}...`);
|
||||||
if (!(id in referenceMap)) {
|
if (!(id in referenceMap)) {
|
||||||
@ -34,15 +35,20 @@ export const evaluate_comments = async (answers, percent_cb) => {
|
|||||||
maxScore = Math.max(score, maxScore);
|
maxScore = Math.max(score, maxScore);
|
||||||
console.log(`bleu score: ${score}`);
|
console.log(`bleu score: ${score}`);
|
||||||
}
|
}
|
||||||
|
results[id] = {
|
||||||
|
"proposed comment": generated_comment,
|
||||||
|
"max bleu score": maxScore,
|
||||||
|
};
|
||||||
console.log(`Max bleu score: ${maxScore}`);
|
console.log(`Max bleu score: ${maxScore}`);
|
||||||
|
|
||||||
console.log(`Done with ${id}`);
|
console.log(`Done with ${id}`);
|
||||||
percent_cb(Math.floor((++i / total) * 100));
|
percent_cb(Math.floor((++i / total) * 100));
|
||||||
}
|
}
|
||||||
console.log("Done processing comments!");
|
console.log("Done processing comments!");
|
||||||
|
finished_cb(results);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const evaluate_refinement = async (answers, percent_cb) => {
|
export const evaluate_refinement = async (answers, percent_cb, finished_cb) => {
|
||||||
const total = Object.keys(answers).length;
|
const total = Object.keys(answers).length;
|
||||||
let i = 0;
|
let i = 0;
|
||||||
for (const [key, value] of Object.entries(answers)) {
|
for (const [key, value] of Object.entries(answers)) {
|
||||||
|
Reference in New Issue
Block a user