中醫笈成 » 協助 » 資料建置

資料建置

笈成資料建置流程圖

上圖為笈成的資料建置之大致流程,茲說明如下。

首先尋找最佳品質的可用電子文本。笈成目前收錄文本主要來源包括行政院衛生署中醫藥委員會建置之82部典籍、醫籍650文本、中醫瑰寶苑651~699文本、《漢典》之31部電子書、永諸藏書數十部、及其他網路文本,格式有TXT、DOC(X)、PDF、HTML等。

取得文本後,將電子文本轉置為HTML5格式的笈成文本,而後持續以程式處理、人工校對、差異比對等方式改進笈成資料原始檔(即笈成文本與共用網頁模版)的品質。

製作笈成站台產生器,可將笈成資料原始檔輸出為靜態網頁,以便發布於大部分伺服器環境。

中醫笈成網站即是將前述靜態網頁同步發布至伺服器,並加上其他站台輔助程式提供進階功能,例如自動轉換缺字的笈成檢字系統。將本地資料同步到伺服器的工具很多,如rsync及FreeFileSync皆可,本站主要使用rsync。

笈成資料原始檔笈成站台產生器皆以Git做版本控管,並發布於GitLab供開放協作。

實用工具

Git

我們主要使用Git作為版本控制系統。使用版本控制系統的目的在於記錄每次修訂,以便在發生錯誤或有疑義時可追溯及還原。Git使用特殊的壓縮格式儲存資料,可節省大量儲存空間。按我們實際使用情形,儲存50000個修訂版本大約只佔最新版本資料的7倍空間。

除此之外,Git還支援版本線的分支、合併、移植、重新定基等進階功能,對於整理資料及多人協作亦大有助益。

Git命令列介面較複雜,不易上手,可先從圖形介面上手。Windows作業系統可使用TortoiseGit,跨平台使用者可考慮SourceTree等等。

TortoiseGit版本總覽畫面
TortoiseGit特定版本之檔案異動總覽畫面

WinMerge2011

WinMerge2011主要用於文字檔的差異比對,介面較易用,可搭配前述的Git圖形介面使用。

WinMerge差異比對畫面

Notepad++

Notepad++是國人開發的純文字編輯軟體,提供完善的純文字編輯功能,且有語法標示、自動補完、正規表示式搜尋/取代、多檔案搜尋/取代等功能。

Notepad++只須幾個按鍵就能對大量檔案做尋找/取代

示例:如何利用上述工具快速提高資料品質

許多中醫數位文本最初是由中國建立,而後轉為繁體中文,或有經過校對,但錯誤仍所在多有。假設我們發現許多已收錄的文本有錯誤的簡轉繁「炒松」(應為「炒鬆」)……。

  1. 用Git將目前版本記錄下來,假設為版本A。
  2. 用Notepad++的「在檔案中尋找/取代」功能,指定將資料目錄下所有「*.html」檔案的「炒松」取代為「炒鬆」。
  3. 將更動提交為新版本B。可在提交訊息註明為全自動修改,並記錄使用的尋找及取代條件,以利事後追查。
  4. 比對所有更動的文字,檢查是否有錯誤。可用圖形介面TortoiseGit和WinMerge列出所有被更動的檔案,逐一進入比對有差異處,亦可在命令列用「git diff」列出差異摘要逐一瀏覽。
  5. 若發現散在的錯誤,則手工修訂之。
  6. 若發現大量有規律的錯誤,例如多處「炒松子」被誤改為「炒鬆子」、「炒松节」被誤改為「炒鬆節」,則退回版本A,修改條件再試一次,如此例可改為尋找正規表示式炒松(?!子|节)」取代為「炒鬆」,然後再提交為新版本B2。
    • 就此例而言,亦可在版本B對所有檔案做「炒鬆子」取代為「炒松子」、「炒鬆節」取代為「炒松節」之操作再提交為新版本。最佳做法視具體情況而定。
    • 若在執行6.之前已做了一些5.的修訂,可將已做的修訂先提交為新版本C,按步驟6.退回版本A,更改條件,重新取代,提交為新版本B3,再移植C的修訂(git cherry-pick C)即可。
  7. 重複上述步驟,直至確認被更動的內容無誤,即完成此次的修訂工程。

簡而言之,即是利用機器處理大量重複、類似的問題,再藉由差異比對找出剩餘的少量問題人工修正,即可快速提高資料的整體品質。

附:為何沒有選擇維基文庫?

維基文庫是開放自由編輯的古籍資料庫,與維基百科一樣是用MediaWiki架設。我們當初曾考慮過在上面整理資料,但實際操作後發現一些限制:

總體而言,維基文庫以人工即時編輯為主,而我們要大量程式操作,因而不適合以之作為主要平台。話雖如此,維基文庫仍是優秀的協作系統,也收錄了大量優質文獻,我們歡迎有志者協助做雙向的資料共享與整合。

至於其他wiki系統,按我們過去嘗試以DokuWiki建置《笈成資料庫》的經驗,自架DokuWiki允許自訂語法,也允許私人空間,比MediaWiki靈活,但「大規模編輯」及「錯誤還原」仍有相同的困難。此外DokuWiki系統在資料量大時效能會明顯低落,過去《笈成資料庫》的資料量即有效能問題,因此也非理想。