2021年3月29日 星期一

漢字使用環境的建置 —— 十五萬漢字粉墨登場

從去年底開始,我將注意力放在了一部目前已經出版的收字最多的字典——《漢字海》身上。前後花了三個多月的時間,終於將這部字典的字頭清理完畢。《漢字海》第一版 (全三冊),2014 年由香港大正出版公司出版,共收錄 102447 個漢字字頭,超越了《漢語大字典》的 60367、《中華字海》的 86987,成為目前為止收錄漢字最多的字典(《教育部異體字字典》收字 104302,但未實質出版,故不列入比較)。經清查該字典有 12 個字頭重出,而與既有的全宋體 12 萬字庫比對,約有七萬字已收,最後將 32373 個未收字補入字庫,成功將字庫的字量推升到 151917 字,一舉超過了十五萬字大關。

新增超過三萬個字符,憑我一人之力要一一造字根本不可能。我採用的方法是將掃描的字頭點陣圖片,利用開源的軟體 Potrace 批量轉成 SVG 向量圖檔,再利用開源軟體 FontForge 撰寫 Python script,批量將 SVG 圖檔整合為一個字型,縮放成一致大小並調整居中,讓它們排列整齊。這思路是仿效當年紫雪藍海兄處理漢語大字典字頭的做法,不過做法細節上經過了我的改良,與紫兄的做法不盡相同。雖然這些字符的顯示品質會略差,但這卻是目前為止可以快速地讓這些漢字為大家所用的唯一方法。

整個作業中最辛苦的部分就是與既有的 12 萬字庫比對,篩選出未收漢字。這部分雖然有部分自行撰寫的軟體輔助,但幾乎還是需要純人工。感謝 suns99 兄,獨力為數萬字頭一一編製倉頡碼,並剔除已收字。我雖然也同步利用批量部件檢索篩出數千組可能已收字,但若沒有 suns99 兄的火力支援,要完成這些比對的工作,還不知道要多久的時間。由衷地感謝 suns99 兄,每次都是我跳坑他沒有第二句話就跟著跳,得友如此,此生也算不枉了,呵呵!

部件檢索也同步更新,支援全部十五萬漢字的檢字。由於補充字大幅擴增,檢字的響應必然變得比較慢,我尚在研究利用   HTML5   的多線程功能來改善的可能性,現階段只能先請大家多包涵。為此,新增了一個「限標準字」開關,預設勾選,勾選時不比對補充字,讓不使用補充字的情境下可以加速響應速度。需要檢索補充字時,則請記得取消勾選。


此外新增了一個 Filter function,方便需要客製化篩選字符的使用者可以自行撰寫邏輯來過濾不想要的字符。

經過九個月時間的測試使用,我覺得「類聚鍵盤」有其顯著的優點,故今後不再提供「傳統鍵盤」的版本,只專心維護「類聚鍵盤」版本。

雖然這次新增的補充字多數顯示品質略差、拆分數據也還沒完全優化,但先推出來讓大家使用仍有其價值。我初步用這新的字庫去比對一些古籍、字書,發現能將不少以往無法以既有字符對應的漢字重新以新的字符對應,這意味著利用這次的新字庫便能讓這些漢字得以顯示、檢索,有利於相關的數位化、學術研究之用。

我常跟 suns99 兄開玩笑說,我們兩個年過半百的老頭兒,簡直就是現代版的愚公一號跟二號,整天與望不見盡頭的漢字整理任務拚搏。如果您剛好也想不開,想加入愚公的行列,歡迎跟我報名,呵呵!我最終的目標還是希望將《教育部異體字字典》的所有圖片字都清理出來、納進字庫。目前只清理出了 57250 字,進展緩慢。這陣子剛忙完《漢字海》這個大部頭,先喘口氣,收拾一些零碎工作,接下來就要全力對付《教育部異體字字典》了。

感謝文良兄,協助了 CNS 漢字拆分的初步優化。感謝 suns99  兄,不斷地協助字形的糾錯、訂正。感謝瑾昀老弟,提供了很多使用上的反饋。感謝很多直接或間接提供協助的朋友。

樂見學術研究、教育工作、個人閱讀這方面的運用,但請勿用做任何形式的商業營利行為。希望「全宋體」這個字庫以及「部件檢索」這個檢字工具,能在漢字文化的整理、研究上幫上一點小忙。


下載連結:全宋體.zip
下載連結:部件檢索(測試版).7z
下載連結:倉頡碼表.7z (由於每個人的習慣不同,僅保留漢字部分,請自行併入您慣用的碼表)


勘誤:

󰩴、󱮵 兩字重複,後者註銷。(2021/03/30)
画、󺣼 兩字重複,後者註銷。(2021/03/31)
󰔂、󱇫 兩字重複,後者註銷。(2021/04/06)
󴷃、󼴔 兩字重複,後者註銷。(2021/04/13)
󸮟、󻐇 兩字重複,後者註銷。(2021/04/17)
𬟅、󹆢 兩字重複,後者註銷。(2021/04/19)
󰏈、󱐍 兩字重複,後者註銷。(2021/05/09)
󲡛、󲡶 兩字重複,後者註銷。(2021/05/10)
𪼟、󸌴 兩字重複,後者註銷。(2021/05/10)




44 則留言:

  1. 居然还有配套仓颉码表,这工作也真是太细致了,感谢!!

    回覆刪除
  2. 除了感謝無法還是感謝!

    回覆刪除
  3. 謝謝你的付出!
    請問在技術上是否可以直接將全宋體製作成兩種字體,全宋體(等寬)和全宋體(調和),而不是分割成複數個ttf檔再用reg檔串接,因為串接的方式似乎不能應用在mac上,若是字體一開始就打包在一起,那似乎可以直接解決這個痛點。

    回覆刪除
    回覆
    1. 您好!正因為技術上無法達成,所以才必須拆成多個 ttf,呵呵!據我的了解,一個 ttf 的字型檔最多只能內含 65535 個字符,這是它的上限,無法超越。應該是當初制定字型標準時就是用一個 16 位元的整數來索引字符,因此除非有更新、更大容量的字形標準出現,否則這個問題無解。

      目前官方定義的漢字數目早已超過了 65535 個,若再加上西文字符、各式符號,要全部都塞入一個 ttf 是不可能的。這點從 Windows 作業系統內建的台灣細明體、大陸宋體都是拆成兩個 ttc,便可略窺端倪。

      建議您向蘋果官方詢問、反應這個問題,或許他們已經有解決方案只是我們不知道罷了。如果沒有,至少讓他們知道這個問題,期待有一天他們能提出解決方案。

      刪除
    2. 謝謝回覆,希望能找到解決方案。

      刪除
  4. 您好
    謝謝您的付出,有一個不情之請,因為沒有您的私人聯絡方式,所以在此處發言,如有不當請見諒,或是直接把我的發文刪除。
    因為個人缺乏製作技術,不知道您是否願意發心幫我製作.mdx檔案(佛學辭典),我已經有內容的.txt和.pdf檔案,不知道在剩下的步驟是否會花很多時間?
    若是願意,此外MDict官網有提供Windows (1.3 RC4)、Windows (2.0.12)兩種程式,目前我的環境只能運行Windows (1.3 RC4),我發現有一些字典無法在這個版本運行,請問是否可以編輯成Windows (1.3 RC4)可運行的版本?
    如果願意和我私人聯絡可以參考下面的email。
    ignorantly_speiled@aleeas.com
    謝謝!
    另外您對中文字典方面研究甚深,如果您願意,這部分也想和您交流請益。

    回覆刪除
    回覆
    1. 您好:

      承蒙您看得起,如果不是太複雜,製作的目的是利益大眾或是有助於學術研究,我是很樂意幫忙。不過 mdx 的製作可大可小,快的幾分鐘就可以搞定,慢的幾天、幾個月都有可能,端看資料內容是否規整、需不需要精細處理等等。

      您提到佛學辭典,這部份相對來說比較沒有版權問題,製作的人應該很多,除非很特殊的辭典,否則應該有不少現成的製作可以利用,對岸的論壇裡有位阿彌陀佛兄就製作了大量的佛學辭典,您不妨到 https://forum.freemdict.com/ 找找他的製作,看是否剛好有您需要的。

      如果仍然需要我的幫忙,請再次在此留言,我會與您聯繫,了解詳細的情形。

      刪除
  5. 謝謝您的回覆
    1. 辭典版權部分,我不是相關法律專業,但是基本上都是20年以上的辭典,並且原作者應該都已經往生,相信應當沒問題。
    2. 您的作品在質量上難以匹及,讓我在使用上受益良多。
    3. 因為這兩部辭典對我尤其重要,我希望內容務必無誤,我閱讀時常推敲每個文字的內涵,也常使用您製作的字典輔助。您說的現成來源,我猜應該是我目前看到的版本之一,光看成品部分,質量上我不確定如何。我無法將已經製作好的mdx和我手邊比較可靠的內容進行校對。再者,因為有一些不常見字,所以若能另製成以全宋體這類字體的版本會更好。另外,畢竟是對岸內容,擔心有簡體繁體轉換問題,對我而言這樣重要的內容使用軟體自帶的自動轉換還是不太放心。
    希望您能協助。

    回覆刪除
  6. 我目前協助開發的編輯器,可以指定顯示 字碼範圍和字型,想問一下 全宋體 各ttf所在的字碼區間為何?
    或是可以聊看看或看看這個編輯器

    回覆刪除
    回覆
    1. 您好!您開發的是什麼樣的編輯器呢?手機、平板上的APP?可以指定「顯示字碼範圍」這個我有點不理解,有什麼作用?

      全宋體各 ttf 所佔用的字碼區間如下:
      FSung-m or FSung-p:0x0000 - 0xFFFF
      FSung-1:0x10000 - 0x1FFFF
      FSung-2:0x20000 - 0x2FFFF
      FSung-3:0x30000 - 0x3FFFF
      FSung-F:0xF0000 - 0xFFFFF
      FSung-X:0x100000 - 0x10FFFF(即將推出)

      刪除
  7. 就是 He11/He12 (漢書),程式本身可以設定 顯示字碼範圍和對應字體,也可以顯示彩色 Emoji,這是 PC 用的文書處理

    回覆刪除
    回覆
    1. 原來是大名鼎鼎的「漢書」啊,呵呵!雖然我沒用過,但是在 DOS 時代我也是用 PE-II 過來的。在 Windows 的環境下,於漢書裏指定全宋體為顯示字型,應該也能正確使用吧!

      刪除
    2. 其實 Windows 對於一些字的抓取常常有問題,比如說 0x2F800 的 Unicode 文字,你設定細明體有時候會顯示不出來,所以我在漢書就用 自訂區間和字型對應(當然內部也有自動搜尋有哪些字),去對應進而顯示,所以目前 漢書,可以完整顯示所有 Unicode 文字,包含 彩色 Emoji

      刪除
    3. 編輯器我倒是沒遇過類似問題,通常指定了正確字型就可以顯示。有類似問題的反倒是瀏覽器,目前發現以 WebKit 為核心的瀏覽器對於兼容區的字似乎會不理會 css 指定的字型,而固定以系統的預設字形顯示,包含 Chrome、Edge 都是如此。IE、Firefox 則無此問題。

      刪除
  8. 目前對應後顯示效果不錯,顯示圖 https://mega.nz/file/CE9GDBpD#N0hdw84Zjr6c5wygWNxlkhsgW6XZ03bSX6uqmpeFPeU

    回覆刪除
    回覆
    1. 嗯,看起來很不錯。因應 Unicode 14.0,我增補了一些符號。另外就是針對《教育部異體字字典》的字頭做了清理,大約又增補了一萬八千多個漢字,目前漢字總數超過了十七萬,還在做最後整理,希望能儘快將成果發布出來讓大家使用。

      刪除
  9. 目前我幫修正的 漢書12 版本可以完整正確顯示所有字出來,如果你要使用看看,可以跟我 Line 聯絡一下,
    就是 .txt 文字檔案可以直接顯示(都可以放大縮小),不需要用到 .doc,然後,載入都是秒載入

    回覆刪除
    回覆
    1. 如果有機會的話倒是可以試用看看漢書,不過真是抱歉,我沒使用 Line,呵呵!平常的編輯需求裡,使用正則的機會很大,不知漢書有無提供正則表示式的功能?

      刪除
    2. 有的,包含搜尋置換,和色彩顯示等,都有提供正則,那如何聯絡,有 FB 或是 Skype ?

      刪除
    3. 感謝!我是個手機的低度使用者,所以這些社群軟體幾乎都沒使用,呵呵!Blogger 沒有悄悄話的功能,不過您可以留言後立刻刪除,我還是會收到完整留言的通知信,留個 e-mail 給我,我便可以私下跟您聯繫。

      刪除
  10. qots 𱟲
    qotn 𱟳

    「𱟳」「𱟲」編碼應該一樣。

    回覆刪除
  11. lhyiu 𱍮
    llyiu 𱍮
    lhbmr 𱍯
    llbmr 𱍯
    lhmtc 𱍰
    llmtc 𱍰
    lhbtu 𱍱
    llbtu 𱍱
    lhhab 𱍲
    llhab 𱍲
    lhtgv 𱍴
    lltgv 𱍴
    lhtxc 𱍵
    lltxc 𱍵
    lhipf 𱍶
    llipf 𱍶

    lhvc 𲂫
    llvc 𲂫
    類似情況還有「𲃀」「𲎕」

    以上左邊字頭相同,右邊或三碼,或二碼,應保持一致。

    據漢文庫典「帰」字,ll開頭是右邊是二碼,大約是把第一豎視作左邊組件。lh開頭右邊是三碼,大約是把「𬼀」視作左邊組件。無論ll開頭右邊取二碼還是三碼,我覺得都可以,唯盼碼表能保持一致,一以貫之,感謝。

    回覆刪除
    回覆
    1. 作者已經移除這則留言。

      刪除
    2. 最好是4碼、5碼都加上

      類似這些情況
      不是短時間可以完成
      只能靠自己不斷去完善

      阿9 鮮少上這裏
      今天是W兄通知才來看

      刪除
  12. 碼表第88379行:「𬟏 𬟏 txu」,似乎格式有誤,應該是「txu 𬟏」?

    回覆刪除
  13. 發現了一系列疑問編碼:

    gibk 𱘀 gybk?
    hkkiu 𬓦 hdyiu?
    yiil 𠗷 還需要 imiil?
    yitc 𠘛 還需要 imitc?
    yhfk 𠘜 還需要 imhfk?
    ojru 𠉗 ohru?
    dsji 𬄫 dsja?
    fb 𫰒 vb?
    nbmwk 𧣲 nbmlk? (「更」爲mlwk)
    ianw 𬐁 kanw?
    tjste 𫖋 tjsce? (「殿」爲schne)
    ufirm 𠒬 fuirm?
    ekmj 𣴰 還需要 ekq?(ekmj對應的是Unicode 5.2 T源字形,6.0字形有改動)

    以上疑問還請指教。

    == 右邊組件相同取碼不一致 ==
    𤊪 fllc
    𠶁 rllc



    𠁵 llmc
    𱞟 plmc
    𱞟 plqc
    𱠎 qlmc
    𱠎 qlqc
    𫥪 yulmc


    如果 lqc 和 lmc 都可以,那麼需要將兩種碼都應用到這些字。前面兩例 llc 又是另一種拆法。無論拆成llc還是lqc還是lmc我都沒有強烈意見。只希望碼表能保持一致,保證至少有一種拆法可以應用到所有字。再次感謝。

    回覆刪除
  14. txu 𬟏
    gybk 𱘀
    gkbk 𱘀
    hdkiu 𬓦
    hdyiu 𬓦
    imiil 𠗷
    yiil 𠗷
    imitc 𠘛
    yitc 𠘛
    imhfk 𠘜
    yhfk 𠘜
    ohru 𠉗
    dsja 𬄫
    dsji 𬄫
    vb 𫰒
    nbmlk 𧣲
    kanw 𬐁
    tjsce 𫖋
    fuirm 𠒬
    ekq 𣴰

    回覆刪除
    回覆
    1. 感謝,已經更新到我本地的rime方案。

      刪除
    2. 另外煩請您過目上面對「𬼀」部件的討論。

      lhvc 𲂫
      llvc 𲂫

      𲃀𲎕,這幾個字ll之後取兩位,右邊組件都是兩位取不盡的構形。但是別的同組件字是取三位。此處不一致不知道該用哪一種?

      刪除
    3. 這些字不是在同一個時間編碼
      所以編碼當下只依當時的直覺編
      未全盤考量
      日後巧遇了才有可能統一

      刪除
  15. B區之前的編碼是前人所賜
    阿9 没通盤檢視過
    C區之後的錯碼是阿9 之過

    回覆刪除
    回覆
    1. 我無一絲一毫責備之意,只求碼表穩定可靠。感謝兩位先生盡心盡責維護字型和碼表。我先前有因爲其他人維護的碼表錯誤而誤認未編碼字,所以寫了個程式用BabelStone上的IDS與倉頡碼對勘,以上只是程式報告出來的15%問題,後續我會篩選後(程式也有許多不完善之處)繼續彙報。

      刪除
    2. 不用「繼續彙報」
      阿9 怕没空理

      刪除
  16. 不怕不怕,我並無迫切的修復需求,兩位什麼時候修復都可以。有問題只是發到這裏備忘,不要就這樣算了就好。

    hmb 𦚑
    imb 𦚑
    還需要 ismb 對應 6.0+ G字形

    mwbne 𨣥 mwbbe?
    iedm 𬡩 ledm?
    jrsh 𮝞 jjrsh?
    jrsm 𮝞 jjrsm?
    sbmr 𫧒 sbr? (sbmr 是8.0字形,9.0有修正)
    men 𪜘 mende? (左右結構字)
    imis 𫢙 omis?
    pysl 𰒈 pydl?
    ipyk 𪪐 ypyk? (ipyk 是6.0字形,6.1有修正,換成了虍)
    chml 𨨎 coml (「邱」是omnl)
    dhml 𣔆 doml
    qhml 𢮼 qoml
    jod 𫹎 hod?
    ooog 𮉴 ouoog?
    mgool 𬍦 還需要 mgooi (ooi是碼表字形, ool應該是花園明朝形)
    mrno 𮀌 還需要 mrvo (vo是碼表字形乆,no是通用的久)
    nmfu 𫸱 還需要 nifu (nifu是碼表字形,nmfu應該是花園明朝形)
    hisn 𦜛 bisn?
    ronn 𪠿 rh? (onn對應的字形就是V的「竹」字)
    bueot 𥋕 還需要 buiot (iot對應是14以上,5.2-6.0的形,eot對應其他版本Unicode形狀,有夠混亂,兩個都收好了)
    bcjka 𫎟 bcjpa? (耆是 jpa)
    rlrg 𫪄 rleg?

    回覆刪除
  17. jisli 𩲂 hisli
    jisy 𩲂 hisy
    pdhj 𠉟 odhj
    hqrrr 𭯞 hurrr
    lrmg 𤶲 krmg
    lshj 𬡳 還需要 lsmj (碼表字形, lshj應該是花園明朝形)
    tqmpo 𦎜 tqmso
    ikmr 𭚈 ikma (「奭」爲kmaa)
    sfhag 𩥧 sfhug (騜𩥧不同)
    afahm 𩤵 sfahm
    sbun 𮋴 sjbun
    tqgrt 𦏔 tqgrr
    yeji 𬩅 yeja
    gcjiu 𬦄 gcjau (jiu可能指的是⿰者見?這個也是花園明朝形,V的形右邊是沒有丶的覩)
    qp 𰒹 qps
    lip 𮓲 lips
    aymu 𭨈 aybu
    hrqi 𡀤 還需要 rhqi(11.0新字形)
    mnjoe 𨺶 nljoe (不知道mn怎麼來的😄)
    anhs 𨴃 anos
    pslg 𪬮 psrg
    emda 𤃝 還需要 emha (emda是全字庫的拆法,也不差。但是別的𱵃 mrmha,𱡌 qmha,𦏩 tqmha 都沒有支援 mda)
    qolk 𪮈 qojk
    qjoy 𢰯 qkly (栆是kly)
    cyrn 𨯤 cynv
    hakoo 𮩩 hadoo
    gkjmm 𪯆 jejmm (十二支)
    lubf 𫌌 lujf
    hfohs 𱈨 hfihs
    mwiq 𬪨 還需要 mwij (碼表字形從戋,mwiq應該是花園明朝形,從㦮)
    gywg 𤎆 fywg
    hmln 𠜄 htln (卹 htsl)
    buonp 𬑛 buoip (捻 qoip)

    回覆刪除
    回覆
    1. 感謝您費心抓錯,或許沒辦法很及時地訂正,但記錄在這裏,將來得空總是有機會修正。

      刪除
    2. 不客氣,反正對照字形的苦力活都是程式在做,我只是做點篩選驗證工作而已。

      刪除
  18. buhaj 𭿟 buhuj
    nlygj 𱀷 nlygq
    tmixi 𨄭 rmixi
    wrse 𪽜 還需要 whje (6.1更改字形)
    nbhs 𧣝 nbos
    gonai 𮚻 gonau
    mgjpu 𭺋 mgjpi
    beji 𬛒 還需要 beja (碼表字形從者,beji應該是花園明朝形,從者)
    domp 𱤵 dorp (㘛 rorp,漢文庫典)
    vfwii 𦂮 還需要 vfwki (兩種取碼其他字都有)
    bcgoo 𬥗 bcoog (挫 qoog)
    haog 𪽽 haom (丘 om)
    duiu 𰗟 duku
    fmdm 𫰌 vmdm
    ubob 𪨹 urob
    nbapp 𧣤 nbap
    yrhag 𧫍 yrhug
    bwp 𥌷 還需要 bujqp (bwp是6.0-13.0字形, bujqp ⿰目憲 是現在的字形)
    ofuf 𰂆 ogug
    ebch 𣽷 eboh
    hatqy 𩡚 hatqt
    𩡚 還需要 hatgt (tqt 是 5.1-5.2 字形, tgt 是6.0+字形)
    sjnem 𦕣 sjnkm/sjnkv (延nkhym/nkhyv)
    meime 𥒜 mrime
    yli 𨒷 ylmi (如果要匹配日本的辶用 iylmi也可以,但是個人覺得沒有必要,不然要把所有J的辶字全部做一個兼容,工作量太大)
    dmbib 𪲔 dmbb
    rqi 𰇊 rqni
    dqvi 𣏢 (可能需要刪掉,我們只有专qni, 沒有 qvi)

    回覆刪除
  19. biko 𬛇 bilo
    kiyub 𮔮 liyub
    tqtvi 𦍫 tqyvi
    govp 𪤣 gomp (右邊組件是K的愈,取碼跟T的一樣)
    hponp 𫗃 hpomp
    hqonp 𫗃 hqomp
    huonp 𫗃 huomp
    hvonp 𫗃 hvomp
    hponp 𫗄 hpomp
    hqonp 𫗄 hqomp
    huonp 𫗄 huomp
    hvonp 𫗄 hvomp
    olonp 𪬪 olomp
    hdyol 𬓰 hdyok
    lihqm 𧌯 lihjm
    pedw 𢟞 pimw (看起來像是氵,實際上是忄+冫)
    ypuh 𬩃 yyuh
    nlhuu 𨽊 nlnuu
    ltta 𫌑 ltca
    ssphh 𫇅 slphh (頣 slmbc)
    kmnk 𪽨 還需要 kmni (mnk是5.2 - 10.0字形,mni是11.0+字形)

    回覆刪除
  20. nflbt 𫙬 nflkt?
    nesmm 𢌟 nksmm
    ouvme 𬙐 ouvne
    hfopv 𬷸 hfoiv
    ybopv 𬛠 yboiv
    humuu 𩳯 himuu
    wdnau 𬚐 qdnau
    lli 𧙽 llmi

    回覆刪除