訂明本例驗收任務
假設摘錄答案須為來源一段完全相同的連續文字,大小寫及標點都計,答案不可空白。找到時列首次出現的零起點及不含終點位置。隔開詞語拼成一句看似合理,也不是本例摘錄。
- 保存確切來源及候選
- 查找未改連續片段
- 列位置或並非摘錄
改述可能另有用途,但不符合此摘錄準則。
使用已填個案
| 個案 | 已提供輸入 | 預期結構化結果 | 判斷及原因 |
|---|---|---|---|
| 確切連續文字 | {"source":"Collect after review, never before review.","answer":"after review"} | {"extractive":true,"start":8,"end":20} | 位置八至十九正是候選字樣。 |
| 把隔開字詞拼接 | {"source":"Collect after review, never before review.","answer":"Collect before review"} | {"extractive":false,"start":null,"end":null} | 那些字並非來源同一連續片段。 |
| 候選空白 | {"source":"Collect after review.","answer":""} | {"extractive":false,"start":null,"end":null} | 本要求明訂答案不可空白。 |
逐步處理 empty-extract 個案,須得到甚麼結果?原因是甚麼?
查看參考答案
{"extractive":false,"start":null,"end":null}。本要求明訂答案不可空白。
執行完整本機驗算
import assert from 'node:assert/strict';
function evaluate(x){
if(!x.answer.length)return {extractive:false,start:null,end:null};const start=x.source.indexOf(x.answer);
return {extractive:start>=0,start:start>=0?start:null,end:start>=0?start+x.answer.length:null};
}
const cases = [
{
"id": "exact-span",
"input": {
"source": "Collect after review, never before review.",
"answer": "after review"
},
"expected": {
"extractive": true,
"start": 8,
"end": 20
}
},
{
"id": "mosaic-claim",
"input": {
"source": "Collect after review, never before review.",
"answer": "Collect before review"
},
"expected": {
"extractive": false,
"start": null,
"end": null
}
},
{
"id": "empty-extract",
"input": {
"source": "Collect after review.",
"answer": ""
},
"expected": {
"extractive": false,
"start": null,
"end": null
}
}
];
for (const c of cases) assert.deepEqual(evaluate(c.input), c.expected, c.id);
console.log(JSON.stringify({checked:cases.length,caseIds:cases.map(c=>c.id)}));
只在要求原文摘錄時用此檢查。找到片段不代表答中問題、資料現行或可披露。