ppt-commitment-parser
將施政報告或施政綱要 PDF 轉換成 CSV 的工具。 PDF 檔必須要用公文書格式進行標號(階層依序為「壹、」「一、」「(一)」「1、」「(1)」「甲、 或 A.」,系統會處理半型全型的差異),方能處理。
Usage
CLI
$ commitment-parser <options> PDF檔名
範例與說明都寫在 ppt-parser --help
。
Library
;;
Output Format
輸入 PDF 範例
以桃園市議會第 1 屆第 1 次定期會的市長施政報告第 14 頁的某段文字為例:
CSV 輸出(CLI)
# 前 6 個固定是分層,第 7 個是頁碼,第 8、9 是左上點 x、y 坐標(pt),第 10 個是內文# 坐標為最小的標題的坐標,以頁面左下角為原點。。"政策規劃與執行","捷運城市","發展無縫公共運輸","推動捷運建設","","",14,80,454,"為配合//⋯⋯""政策規劃與執行","捷運城市","發展無縫公共運輸","推動捷運建設","航空城捷運線(綠線)","",14,109,556,"航空城捷運線(綠線)總長約//⋯⋯"# ...
Array 輸出(Library)
number: 2 numberCH: '貳' text: '政策規劃與執行' page: 14 coord: 55 373 // 頁面左下點為原點,單位:pt items: number: 1 numberCH: '一' text: "捷運城市" page: 14 coord: 55 402 items: number: 1 numberCH: '(一)' text: '發展無縫公共運輸' page: 14 coord: 62 427 items: number: 1 numberCH: '1' text: '推動捷運建設' page: 14 coord: 80 454 items: // text-only text: '為配合航空城發展/* ⋯⋯ */及優質適居的低碳生態環境。' page: 14 coord: 132 480 // text with number number: 1 numberCH: '(1)' text: '航空城捷運線(綠線)' page: 14 coord: 109 556 items: /* ... */ // ... //... //... // ...
Error Handling
// returns a promise
onError
callback 的 this
會被設成 LineMachine
instance,因此可以存取 LineMachine
的 method (請見 LineMachine
的實作)。
errType === 'PARSE_NUM'
errPayload === input // 中文數字
errPayload.input
無法被轉為數字。
errType === 'NUMBER_MISMATCH'
errPayload === text // 出錯的該行文字 page // 出錯文字所在頁碼 number // 出錯文字的標號(已轉數字) lastSiblingSection // 同層前一 Section instance(若出錯的是該層第一項,則為 undefined)
各層標題應該要從 1 開始而且連續,若有數字不連續的狀況,就會觸發此 error。
errType === 'LEVEL_MISMATCH'
errPayload === text // 出錯的該行文字 page // 出錯文字所在頁碼 coord // 出錯文字所在頁面坐標(左下為原點,單位 pt) level // 標題層級(-1 為頂層,0 為「壹、」,6 為「甲、」) lastLevel // 前文標題層級 numberCH // 出錯文字的標號
errPayload.text
的標題階層與所在之前文不符。
標題階層應依序為「壹、」、「一、」、「(一)」、「1、」、「(1)」、「甲、」六層。 若某一行突然向下太多層(例如說原本在「一、」,突然有一行用「1、」標號),就會觸發此 error。