[Py] 使用 Python 製作簡易 Mac 辭典 – 以國家教育研究院專有名詞網站資料為例(上)

「國家教育研究院雙語詞彙、學術名詞暨辭書資訊網」在讀文章、寫作業的時候是常常會用到的網站,他是一本涵蓋不同領域大量的專有名詞的好用網站。本文將介紹如何將從網站下載的試算表檔案包裝成 Mac 辭典並匯入之。上篇將會介紹使用 Apple 提供的 Dictionary Develop Tool (下簡稱 DDK)。

需要的資源

  • 字詞對照表:請至「國家教育研究院雙語詞彙、學術名詞暨辭書資訊網」的「下載專區」下載所需的檔案。或建立 Excel 試算表,並在第一列以「英文名稱」、「中文名稱」作為標題。
  • Apple 的 Dictionary Development Kit(下面簡稱 DDK)。請至 開發者網站(https://developer.apple.com/)中 「Develop」>「Downloads」搜尋並下載「Auxiliary_Tools_for_Xcode_7.dmg」。
  • Xcode 7 以上 (我是用 Xcode 8)

要準備做什麼?

網路上搜尋的「製作 Mac 辭典」相關文章的結果是:*.dictionary 是一個經過加密、壓縮的自訂格式,所以只能基本上只能看官方的開發手冊,準備好資料使用 DDK 去編譯。而 DDK 中的程式都已經是編譯過的,因此難以參透 DDK 中還有什麼方法可以使用。參考開發文件,我們要準備這些檔案給 DDK 使用:

  • Makefile :最後呼叫「make」 指令時需要的檔案。指定下面所有必須檔案的路徑,並且紀錄 DDK 執行路徑。
  • MyDictionary.css:給辭典內文的格式(大小、色彩等等)
  • MyDictionary.xml:辭典的主要內容,裡面儲存所有 key-value pair 以及包裝的方式。
  • MyInfo.plist:描述辭典的資訊。
  • MyDictionary_prefs.html(選用):顯示在 辭典.app 中「偏好設定」最下方的部分,可以作為該本辭典的偏好設定使用。
  • MyDictionary.xsl:包括辭典必須的進入點資訊,如何搜尋與搭配 MyDictionary_prefs.html 的方式。

官方範本說明

在 DDK 中「project_templates」資料夾裡,有提供一個非常簡單的樣版給大家,詳細的開發方法請見官方文件,下面就僅以範本以及我的理解簡單說明一下每個檔案意義。範例檔中,會創造一個名為 MyDictionary.dictionary 的客製化字典,裡面包含了「make」這一個單字,同時提供「美國」、「英國」不同的音標,給使用者選擇該如何檢視。

MyDictionary.xml

這個檔案記錄了最重要的「鍵值配對」(key-value pair)與索引(index)的資料,這是一個 XHTML 格式的文件,可以參考網路資源查看可以加入的標籤,建立表格與其他很有特色的內容。官方文件看這邊

檔頭:

辭典內文:所有的辭典內文都包括在「<d:dictionary > </d:dictionary> 」這個標籤中間,有許多的進入點「entry」(我再想想更好的翻譯…)。單字的「鍵值配對」與「辭典內文」則是包含在 <d:entry> 之中。

單字內文:進入點標籤「<d:entry>」, 標籤中有幾個選項:

  • d:index:必須提供一個不重複的 index 值。若遇到重複的在 DDK 編譯時會出錯。
  • d:value:進入點的名稱,通常也作為搜尋時彈跳視窗的顯示標題。
  • d:parental-control:選用,表示顯示的等級,從 0-9,0的話是不論在何處都顯示(預設),數字越大則等級越低,要開啟 辭典.app 時才會顯示。

<d:index /> 標籤記載了「鍵」的資訊,即遇到什麼文字則辭典會進入這個單字,顯示內文。這個標籤數量不限一個。它有幾個選項:

  • d:value:鍵(key)的內容,搜尋單字完全符合這個字串的話就會進入內文。(一定要)
  • 還有 d:title、d:parental-control、d:anchor、d:yomi 的選項,請參照官方說明。

接下來內部就是使用一些標籤來建構顯示的內文了,如 <h1> 表示大標題、<ol>表示清單等等,也可以創造連結或其他標籤來使用,並在 MyDictionary_pref.html 與 MyDictionary.xsl 控制其表現。

下面的範例中,創造了「Dictionary application」、「make」、「make up ones mind」與「Front/Back Matter」四個詞或與語句,其中 make 包含了三種不同的音標,配合 MyDictionary_pref.html 與 MyDictionary.xsl 所選擇的偏好,可以分別單獨顯示出來。另外, make 單字的內容有提到「make up ones mind」的部分,也用「<a href=”x-dictionary:r:make_up_ones_mind”>」在字典中互相參照。最後一個就有點看不懂了…有理解的拜託告訴筆者。

MyDictionary.css

就跟一般網頁的 css 一樣,可以控制上面字詞顯示時的格式設定,基本概念是:先指定標籤(如 h1),接下來設定格式細節如大小、色彩等等, css 的內容可以參考 之前學習的筆記或是其他網路資源。

MyInfo.plist

這邊設定了一些關於辭典的屬性質,我就直接貼上官方文件中的屬性表格了,

Table 2-1  Keys and values for the dictionary property list file
Key Value
CFBundleDevelopmentRegion A region 開發地區。
CFBundleDisplayName The full display name of the dictionary. The default is to use the file system name. 字典顯示的名稱。
CFBundleIdentifier The identifier of the dictionary bundle; specify a unique ID. 開發者 ID。
CFBundleName The short display name of the dictionary. 簡短的辭典名。
CFBundleShortVersionString The version of the dictionary. 辭典版本號。
DCSDictionaryCopyright The copyright notice of the dictionary. 辭典版權。
DCSDictionaryManufacturerName The manufacturer name of the dictionary 辭典製造者。

範例文件如下:

MyDictionary_prefs.html

這格部分就是設計一個小小的網頁,讓 辭典.app 中偏好設定下面可以讓使用者字型勾選客製化的選項。在範本中,使用者可以選擇其中一種拼音的音標(「pronunciation」的選項按鈕(radio button)),以及是否顯示欄標籤裡面的內容或是否顯示圖片(「display」的勾選)。

MyDictionary.xsl

這份文件控制了 Dictionary Service 在進入字典內文進入點(entry)之前,要做的操作。在上面辭典內文中,「Dictionary application」有使用了「column」與「picture」兩個類別(class)(分別使用 <span class=”column”> 與 <span class=”picture”> 兩格標籤);在「make」單字的音標部分,則使用了「d:pr」這個變數(?)去指定要顯示哪種音標(共有<span d:pr=”US_IPA”>、<span d:pr=”US_IPA”>、<span d:pr=”UK_IPA”>這三個標籤)。在本文件中,就會判斷使用者在「MyDictionary_prefs.html」中勾選「pronunciation」變數的選擇,來決定開啟哪個音標、「picture」與「column」是否勾選,來顯示特定的內容或圖片。最後一個「<xsl:template match=”@*|node()”>」標籤,則是給其他所有的標籤(全部顯示的概念吧?)。

Makefile

記錄如何編譯辭典的方法,所需檔案的路徑(xsl 雖然不用指定,但是一定要在同一個資料夾下,否則無法順利編譯)。

編譯辭典

當所有檔案就緒,就可以開始編譯辭典啦!編譯辭典時,在 Terminal.app 中,進入辭典所有檔案所在的目錄後,即可以「make」指令進行編譯,他會產生新目錄「objects」,並將辭典與其他檔案產生在裡面。

加入「辭典.app」

打開「辭典.app」,點選「檔案」>「打開辭典資料夾」(「~/Library/Dictionaries/」)顯示辭典收藏處。接著把編譯完的辭典檔(「MyDictionary.dictionary」)複製到裡面,最後再於「辭典」>「偏好設定」中勾選「MyDictionary」即可使用。

下一篇…

這篇主要是介紹使用 DDK 製作 Mac 辭典時所需的材料,他的基本格式、概念等。下一篇就是用簡單的 Python 程式去產生非常簡易的辭典,即辭典內容只有「中文名稱」的簡易解釋。我將會以國家教育研究院專有名詞網站下載到的 Excel 檔為範例(裡面記載著英文名稱(key)與中文名稱(value)的對照表)。


2 則迴響

  • raccon

    2017-03-14

    因在學習葡文,想自建字典,礙於英文苦手,看了好幾篇都不得其門而入,好不容易找到中文教學,真是太感謝了。

    希望能儘快出下篇。^^

    回復
    • Sun

      2017-03-18

      最近課業有點炸,所以比較晚才發文。請參考下篇的文章來實做吧!這邊請

      回復

請多多指教!

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料