Skip to content
kcwu edited this page Feb 25, 2013 · 10 revisions

資料處理流程

資料來源是教育部的 重編國語辭典修訂本 網站。 第一步是抓下網站的原始 HTML 檔, 透過 parse.py 轉成 json 檔, 再用 convert_json_to_sqlite.py 轉成 sqlite db 檔。 其他 project 可以視需求拿 json 檔或 sqlite db 作進一步的利用。

kcwu 在 這邊 放了 HTML tarball 還有處理好的 json, sqlite 檔。 github 的 moedict-data 也有 json 檔, 可參閱 history。

編碼

原始網頁採用 big5 編碼, 加上自行造字(以圖檔表示)。json 跟 sqlite 的內容都是用 UTF-8 編碼。

  • 少部分(十幾個) HTML 檔有非 big5 字元, 轉 unicode 時失敗 #1 目前先跳過
  • 除了少數符號, 大多數造字都保留為 {[xxxx]} 形式, client 可自行決定怎麼處理

欄位

3du.tw project 有定義 json apidb schema, 但我的輸出不完全相同, 將來可能還會再修改。(也就是說, 不保證相容, 請小心使用)

細節

  • 對於字音,我有做簡單的處理(羅馬字母轉半形,造字轉 unicode)。如果想拿該欄位再利用,要小心有些特別的 case,譬如
    • 根據 國語注音符號手冊
      • 「輕聲」號在橫寫的標準寫法是在注音符號的左邊,不像平常注音輸入法寫在右邊
      • 「ㄧㄨㄩ」的「ㄧ」在橫寫的標準寫法是直的,原本字典用「|(U+FF5C)」,我還是用「ㄧ(U+3127)」(注意 U+3127 在有些字形是直的有些是橫的)
    • 「乎」的第二音的注音寫「(又音)ㄏㄨˊ」
    • 「一檔子」的注音是「ㄧ ㄉㄤˇ .ㄗ (又音)ㄧ ㄉㄤˋ .ㄗ」
    • 兒化韻標注音時「ㄦ」緊接前一個注音,沒有空格。譬如「一古腦兒」的注音是「ㄧ ㄍㄨˇ ㄋㄠˇㄦ」,「一會兒」的注音是「ㄧ ㄏㄨㄟˇㄦ (變)ㄧˋ ㄏㄨㄜˇㄦ」
  • 對於每一個「詞義」, 都放在一個 definition 裡, 主要內容在 "def" 欄位。若是舉例或是引經據典, 則會另外放到 example,quote,link 等欄位。
  • example 是例句, quote 是引經據典, link 是參考其他條目。
    • link 的例子: 亦作「掊克」。亦稱為「鹽膚木」。同「裸」。見「牡丹」條。簡稱為「三藏」。亦稱為「仙鶴」。或稱為「哥本哈根學派」、「語符學派」。, 還有許多變化, 共通點是都有引號。
  • example, quote, link 這三個欄位, 在 json 是 array, 在 db 是以逗號分隔的字串。
  • 對於比較複雜的詞義, 或是一個詞義裡再細分多個義項, 目前並沒有各別 parse 開來, 為了避免誤會, 整個詞義保持不動放在 "def" 欄位。(這種狀況約 3000 個)
  • 同反義詞原本在頁始網頁是合在一起寫, 譬如「一般」的同義詞是「(1)一樣 (2)平常、通常、日常」,parse 後會把同義詞分到對應的詞義去
    • 但有時原始資料怪怪的, 無法對應回去。譬如「目次」的同義詞是「目錄(2)」 #2
  • 同反義詞(synonyms, antonyms)無論是 json 還是 sqlite db 都是用逗號分隔
  • 要注意有時 "def" 會是空的, 只有 "link" 有內容。譬如「万」的第二音, 只有 link "見「万俟」條。"
  • 要注意有時注音欄會是空的, 通常發生在異體字.

特殊符號

  • {[xxxx]} 是造字
  • <1>、<2>…是㊀、㊁… 用來區分一個字的不同讀音]
    • 譬如「乎」的第二個音(ㄏㄨˊ)的寫「<1>之又音。」表示是第一個音(ㄏㄨ)的又音
  • {1}、{2}…是❶、❷…用來區分多義的序號
    • 譬如「使」的第二音(ㄕˋ)寫「<1>名、動{7}之又音。」表示是第一音(ㄕˇ)的名詞還有動詞第7義的又音
  • 詞性有共分十一種, 「名動形副助介嘆連代綴狀」目前沒有用特別的符號表示...(要嗎?)
  • 另外 type 除了詞性還可能是「辨似」
  • 這些符號㊀❶我之所以用比較單純的寫法代換,而不是直接用對應的 Unicode char,是因為我覺得這樣比較 developer friendly。譬如➓跟⓫在 unicode 不連號

Checklist 列舉各種不同的例子, 可以用來檢查資料檔有沒有 parse 錯或是顯示時是否錯漏