2015年12月30日 星期三

部件檢索公開授權

最近我設計的「部件檢索」受到了一些朋友的關注,直接或間接的提供了很多改進的建議與協助。我整合了相關意見,做了一番大整理,最後決定將部件檢索的 html 版與 MDict 版脫鉤,今後「官方版」的「部件檢索」將以 html 版為主,同時無條件提供授權給一切非商業營利,有助於學術研究、有益於教育學習、有利於閱讀大眾的網站或個人使用,MDict 版將只視為一個辭典應用的分支(畢竟有很多功能都受到 MDict 主程式的限制)。

發展的歷程詳見:部件檢索辭典再談漢字的部件檢索

調整說明
因應有些好友向我徵詢將「部件檢索」放上網站的使用授權,我花了一些時間將 html 版的程式結構做了大幅度的調整,也補充添加了一些功能,希望能方便後續的維護,同時方便有需要的朋友進行客製化的修改。調整的說明如下:

1. 加上網頁抬頭名稱。
2. 核心程式獨立壓縮成一行,不與 UI 程式相混,容易抽離、置換與更新,也不易被不小心誤改產生錯誤,並提供版本辨識。
3. 所有跟 UI 操作、顯示有關的部分(包含顏色、樣式等等),均自核心程式中剝離出來,放在客製化修改區。客製化修改區獨立集中,程式不再壓縮,方便前端開發者修改、應用。
<!----------------------------------------------------------------------------->
<!-- 客製化修改區起始 -->
<!----------------------------------------------------------------------------->
……  <= 可以修改的東西都在這裡
<!----------------------------------------------------------------------------->
<!-- 客製化修改區結束 -->
<!----------------------------------------------------------------------------->
4. 新增「較大字形」選項,勾選時檢索結果會以較大的字形來顯示;反之則用較小的字形顯示。
5. 新增「複製模式」選項,勾選時點擊檢索結果會將該漢字複製到剪貼簿;反之則跳轉至 Unihan 資料庫的對應漢字網頁。
【註】可藉由修改 Global 變數「ref」的鏈結內容來達成客製化跳轉之目的 (目前暫時仍保留 MDict 的跳轉判斷機制,以方便轉換成 MDict 版)。
6. 所有的選項均採用 cookie 技術加以記錄,使用者不再需要每次都重新切換選項。
【註】cookie 記憶的功能在 Chrome 瀏覽器裡會無效,但在 IE、Firefox 瀏覽器裡則都能正常運作。經 Google 之後,據說是在本地端的網頁會無效,Html 要真的放到網路上去 cookie 才會有效。另外 MDict 似乎也完全不支援 cookie,暫時無解。
7. 新增「解構漢字」的功能。當使用者輸入「\說」就代表「解構『說』這個字」;反之不加帶頭碼就是正常的「部件檢索」。用反斜線「\」當做帶頭碼,取其「反解」的聯想。這個功能有什麼用呢?一是可以隨時查詢某個漢字的完整拆分樹資料,一是輔助「部件鍵盤」的不足。例如使用者想要檢索「女+𣶒」這個字,「𣶒」這個部件比較難輸入,恰好「部件鍵盤」裡又沒有,利用這個功能,輸入「\淵」,結果為「氵𣶒(一)」,直接複製「𣶒」貼到輸入框裡就行了。
8. 新增「解構符號」按鈕,可方便配合「解構漢字」的功能來使用。
9. 新增「倒退」按鈕,模擬實體鍵盤的「Backspace」鍵。
10. 所有操作按鈕全部加上小提示。
11. 新增實體鍵盤的「Esc」鍵等於清除按鈕「X」的功能。
12. 新增實體鍵盤的「Enter」鍵等於查詢按鈕「▶」的功能。
13. 「部件鍵盤」的輸入(包含「解構符號」按鈕),不再永遠加到最後,而是根據目前的游標位置插入。
14. 新增查詢結果的「顏色圖例」說明,解構漢字的結果亦會根據圖例顏色來顯示。
15. 新增核心程式的版本顯示。目前最新的版號為 0.90(0.9.0.2),這是最終測試版的版號,將來的正式版,版號應該會是 1.00。

客製化修改
這次的調整,新增了一個 Global 變數「ref」,內容就是要跳轉的鏈結,可以搜尋「http://www.unicode.org/cgi-bin/GetUnihanData.pl?codepoint=$ENC$」(在 html 檔案的第 24 行),將它取代成想要跳轉的資料庫網頁鏈結即可達成客製化的目的。該鏈結中可用幾個特殊的「KEY」來代表傳入的漢字參數:
$CHR$:表示未經編碼的漢字變數
$ENC$:表示經 URI 編碼的漢字變數(百分號編碼)
$UCD$:表示漢字的 10 進制 Unicode 變數
$UCh$:表示漢字的 16 進制小寫 Unicode 變數
$UCH$:表示漢字的 16 進制大寫 Unicode 變數
譬如我們希望點擊檢索的結果就自動跳轉到維基詞典查詢對應的漢字,那麼就把跳轉鏈結改為「https://zh.wiktionary.org/wiki/$ENC$」,這樣就可以了,夠簡單了吧!

這個調整主要是讓「部件檢索」更能符合每個人的不同需求,另一個目的是要讓網站的管理者能夠很方便、快速地將「部件檢索」的功能導入既有的網站,不需要安裝一堆有的沒的第三方模組,只要將一個「部件檢索」的 html 檔放上網站,修改一個跳轉鏈結的變數,所有的工作便完成了(當然還可以加個網站 Logo、調整一下風格什麼的)。後續如果「部件檢索」有更新,只要沒有添加影響到 UI 的功能,那麼只要複製、貼上核心程式的那一行,便完成了版本升級的動作。

其他只要在客製化修改區的東西,原則上都可以自行修改,但您可能要有一點點 javascript 的基礎。

日前「引得市」網站的站長透過好友向我徵詢授權,希望能將「部件檢索」功能放上他的網站,讓他整合至後端的專屬資料庫,我於是提供這樣的方式,讓他能快速的導入「部件檢索」的功能。目前「引得市」網站上的部件檢索已經上線(進入主網頁後,右上角的第一個連結即是),介紹說明則在「2016年「引得市」小改版說明」。

操作 UI 簡述
預設畫面上的一些可操作 UI,簡單敘述如下:

「\」:解構符號按鈕,清除所有的查詢輸入並鍵入解構符號。可方便配合「解構漢字」的功能來使用。
「◃」:倒退按鈕,模擬實體鍵盤的「Backspace」鍵。
「X」:清除按鈕,清除所有的查詢輸入及查詢結果。實體鍵盤的「Esc」鍵有相同作用。
「▶」:查詢按鈕,進行查詢檢索,查詢結果的上限為一千字。實體鍵盤的「Enter」鍵有相同作用。
「包容異體」:勾選時會將所有互為異體的部件視為相同;反之則視為不同。
「即時查詢」:勾選時輸入框裡有任何輸入變動均會自動執行查詢檢索(為縮短反應時間,查詢結果僅限一百字,但「精確命中」的字一定會列出,不在此限。若要查看百字以外的字,可再多按一下「▶」);反之則需等到按下「▶」才會執行查詢檢索。
「較大字形」:勾選時檢索結果會以較大的字形來顯示;反之則用較小的字形顯示。
「複製模式」:勾選時點擊檢索結果會將該漢字複製到剪貼簿;反之則跳轉至 Unihan 資料庫的對應網頁。
「▲」:收起按鈕,按一下則收起部件鍵盤,方便查看大量的查詢結果。
「▼」:展開按鈕,按一下則展開部件鍵盤,方便輸入難以鍵入的部件。

授權說明
目前的「部件檢索」雖然我還將其定位在測試版,但是幾乎所有的查詢、檢索功能都已經完備,可以提供生僻漢字一個有效的檢索方式,故提前開放授權給需要的朋友們使用。

1. 「部件檢索」即日起無條件提供授權給一切非商業營利,有助於學術研究、有益於教育學習、有利於閱讀大眾的網站或個人使用。
2. 不論於網站上線上使用,或是於本地端離線使用,只要不違背前項的前提,均屬於合理的授權使用。
3. 拆分資料的來源整理自「漢字構形資料庫」與「字形IDSデータ」,再經自行修訂而成。此部分授權謹遵循原資料來源的規定,援引使用「部件檢索」的網站,請明確標示上述的資料來源,以示尊重。

(我不是很熟悉這些授權規定,只是一顆單純分享的心,若有不周之處尚請指正。)

下載連結部件檢索(測試版).7z

欲將「部件檢索」放上網站的朋友,我十分歡迎,如果方便,請您在這裡留下一個回應,讓我知道您將用於哪一個網站,也讓我有個參考,做為往後繼續改進的依據。

誌謝
「部件檢索」這個題目是我在偶然的因緣下,一頭栽進去的,後續仍在持續地進行中。我對 javascript 並不算熟悉,原先也想透過朋友找到高手來幫忙實作,無奈四處徵詢不著,最後因緣際會自己卻跳下來做了。目前初步的成果,已是花了不少時間與心力,背後更有著許多朋友的支持、鞭策、建議與幫忙,這些直接或間接提供協助的朋友們,才真正是「部件檢索」幕後的大功臣。

感謝文良兄,他是這個題目原始的發想者,不僅提供了他多年累積的拆分資料供我參考,並在我一度想放棄時,主動跳下來幫忙負擔了一半的拆分資料整理工作,沒有他大概也就沒有今天的「部件檢索」。

感謝瑾昀老弟,年紀雖然只有我的一半,但卻是我最佳的 "文字學顧問",常常為我 "說文"、"解字"。他及他的朋友們提供了「部件檢索」大量的實用測試,反饋了許多的錯誤及缺失,提供了許多的寶貴意見。我的 "夜不安眠" 的 "全面作戰" 階段,便是他的 "傑作",我設計的「拆分樹演算法」也可說是他一手 "逼" 出來的,沒有他大概也就沒有目前的「拆分樹演算法」。

感謝新朋友 kyles,後期的操作 UI 改良,他提供了許多很好的構想、建議以及實作的支援,新增的「解構漢字」功能便是他給我的靈感,讓使用「部件檢索」時更添利器。
還有許多間接幫忙的朋友,我或許不知道你們是誰,但在此一併申致謝意。

結語
2015 已經進入倒數計時了,回顧這一年,幾乎有一半的時間都在跟「部件檢索」這個題目 "搏鬥"。展望 2016,還要繼續花上大半年的時間去重新校訂一次拆分資料,我還有一些構想,可能必須藉由這次的校訂才能得以實踐。

還是那句老話:「有人利用的資料才能彰顯它的價值,鎖在抽屜沒人加以利用的資料,只是垃圾。」我本著這個信念,將我灌注大量心力製作出來的「部件檢索」,完全開放出來,歡迎大家加以利用。不需要每個人都再花重複的時間去重來一次,希望我能成為那個值得踩的 "肩膀",更能有人在我的基礎上繼續往上攀登,讓「部件檢索」創造出更大的價值,造福更多漢字、漢學的愛好者、研究者。

值此一年的最終,就以這個公開的授權,做為這一年努力的總結,也做為自己給自己的年終大禮。


22 則留言:

  1. 您好:請問一下,《部件檢索辭典》輸入窗格右邊有個⌘的符號,不知道代表什麼意思呢?感謝。附圖:https://i.imgur.com/J6He3Zs.png

    回覆刪除
    回覆
    1. 表示暫存區,這是新增加的功能,雙擊下方的候選字後,候選字會出現⌘後面(最多10个)。

      刪除
    2. 抱歉,沒留意到這則留言,感謝瑾昀幫忙說明,請參考"漢字使用環境的建置 ㈡ —— 輸入篇"(https://fgwang.blogspot.com/2018/02/blog-post_9.html),裡面有說明。

      刪除
  2. 您好,我做了一個修改版本(降低卡頓感、支援智慧型手機等)。
    本想先私下與您聯絡,但找不到聯絡方式,故先發布在GitHub上,在此向您告知。
    https://github.com/ButTaiwan/hanseeker
    使用範例:https://zi-hi.com/sp/uni/CJKSeeker
    若有不適切的地方還煩請告訴我,謝謝!

    回覆刪除
    回覆
    1. 您好,很歡迎見到這樣的修改,也很高興您能告知我這項改動與應用,讓我知道自己的努力又得到了一些迴響。

      「部件檢索」是個美麗的意外,為了滿足漢字的完善使用,讓我擲下了大量的時間與心力,這些整理與研究仍在不斷地持續,目前預計還有四到五萬個見於經典、字書的未編碼漢字會陸續加入,期望「部件檢索」與全宋體能成為專業級的研究學者、平凡級的一般大眾都能輕鬆上手與應用的漢字工具。

      讀了您 GitHub 上的說明,有幾點可以做個回應,也將我的想法與您分享一下:
      1. 碎片化的查詢是個思考方向,多謝您提供這個構想,或許可以在這方面有所突破。
      2. 「搜尋結果已經超過99/999字,仍不會中途跳出」,這是個刻意而且 "重要" 的設計,為的就是要確保精確命中的字一定會被顯示出來,否則位於後段的字有很大的機會不顯示,會讓使用者誤以為沒有該字,那這個檢字工具就不可靠了。
      3. 早期的「部件檢索」為求好寫,就是直接用 JavaScript 的物件形式索引,但我已經預期到漢字的數量會巨量的擴增,故而某版之後開始改採陣列式的索引,雖然知道會有些維護上的不便,但權衡後為的就是應付巨量擴增後能確保索引不掉速。
      4. PUA 區有大量未定義拆分的文字是因為這些字已經被 G 區收錄,故註銷使用。不過將來新增的字就會補滿,原則上不會空著太久。
      5. 保留兩種鍵盤是為了實驗新想法的實用性,經過一段時間的試用後,我覺得類聚鍵盤可能才是正確的方向,今後只會保留類聚鍵盤,傳統鍵盤就不會再維護。

      網頁式的程式設計本非我所長,或許將來要多向您請益,互相交流心得。

      刪除
  3. G區的 U+2B737 好像沒有glyph,但拆出來是:寿⻏。
    據Unihan,這個編碼不存在;是不是該歸於補充區?

    http://www.unicode.org/cgi-bin/GetUnihanData.pl?codepoint=%F0%AB%9C%B7

    回覆刪除
    回覆
    1. U+2B737 是 C 區字,不是 G 區。這是準候選字,Unicode 尚未正式發布,所以查不到。請參閱「漢字使用環境的建置 —— 追加三千漢字」一篇最後的附註,裡面有說明。目前不能顯示是我的疏忽,稍後就會更新。

      刪除
  4. 還想請教“屮”(2F878)與“䶹”(4DB9)兩個部件怎麼分辨?
    前者有64字;後者有20字。兩個字單,我仔細看了,但看不出差別。不知道兩個部件的不同搜尋功能是怎麼分辨。

    回覆刪除
    回覆
    1. 您注意到了這組字,很細心呢,呵呵!如果我沒記錯,“䶹”(U+4DB9)是近期 Unicode 13.0 才加入的,按照 Unicode 的文件“屮”(U+2F878)≡屮(U+5C6E),所以我認為 U+4DB9 是為了與 U+2F878 區別而加入。這個字形在古籍中有兩個意思:一是象草;一是象左手,同形而異字。U+2F878≡U+5C6E 所以是草義,因此 U+4DB9 該是左手義。目前我便是以這二義來區分這兩字,所以在類聚鍵盤上,一個歸在「植物類」,一個歸在「人體類」。但目前有些字的構形意義我還無法完全掌握,初步判定可能是手義的先歸到 U+4DB9,草義或還無法判定的就暫時還是留給 U+2F878,這部份還有待專家們幫忙指正。一般使用者檢索時可能並不會區分二者,因此勾選「包容異體」時,兩者視為相同(雖然兩者並不是異體字),方便一般使用者檢字。

      刪除
    2. 有趣,謝謝詳細解釋。

      “𡴤”是“手”,歸於4DB9,makes sense.
      "𨒯"拆出來是“𡴂”(攀),makes sense.

      "𡴟",說文說“从𣎵”。後人說法不同,但沒當做手。"𡴟"也許該歸於2F878。

      刪除
    3. 您說得有理。我只是憑直覺快速而粗略的歸類,沒有詳細的逐字查證,應該疏失不少。沒辦法,工作量太大,只能邊用邊修正了,呵呵!

      刪除
    4. 您的工作量太大了,已經是神功了。

      關於拆法:
      𢟃@𢖶⺄䶹≅(@𢖶⺄󰐓?)
      𣂹@山󰔐≅斤
      𤔠@󰑾≅攵

      我不理解這個“≅”符號,是不是該是4DB9?

      𥅱@󰋌≅目
      也許是2F878。

      刪除
    5. 呵呵!不知是哪時候剪剪貼貼取代時弄錯了,感謝指正。

      刪除
    6. 關於「䶹䶹」與「󰐓」,我想都是手義,只是筆法的問題,應當可以認為相同。不過像「㪿」與「𣂚」,Unicode 還是區分為二字,故暫時還是不相互代用,或許將來該造個「䶹䶹」部件,然後將二者設為異體關聯。

      刪除
    7. 這個例子頗有趣!「折」字左旁在甲骨文本象「木」被斧斤砍斷成兩截,西周金文到戰國文字訛成兩「屮/草」,隸變楷化以來又訛成「手」,於是字形變成了斧斤砍手。所以,「㪿」與「𣂚」究竟從「屮」或從「手」,好像是兩可吧!呵呵

      刪除
    8. 先生對漢字也多有研究。從「斷木」訛變為「艸」,再從「艸」訛變為「手」,確實也有趣。若從這個角度看「䶹䶹」當从草義;而「󰐓」當从手義比較合理,呵呵!

      刪除
  5. 您好!我這邊點擊下載連結好像並不能成功下載,而是跳轉到了「http://sync.hamicloud.net/_oops/fg_wang/rd3」。請問有方法解決嗎?

    回覆刪除
    回覆
    1. 抱歉,由於 Blogger 沒有郵件通知您的留言,遲了好多天才給您回覆。我已更新了連結,麻煩您再重新下載試試看。

      刪除
  6. 请问作者:您好,请问是否考虑使用github发布部件检索的下载?如果能在github上发布的话,对于让大家一起参与贡献会非常有帮助的。希望作者使用git进行版本管理,并在github上发布部件检索功能,感谢。

    回覆刪除
    回覆
    1. 您好!感謝您的建議。

      我沒有使用過 github,可能還得花時間去熟悉它的運作。目前主要把時間都花在《教育部異體字字典》的字頭整理上,暫時還沒有時間分心去研究他務。為了完善漢字的拆分資料,現階段我對部件檢索的改動非常頻繁,幾乎天天都在變動,短時間內可能並不適合上到 github 去,否則只會降低我的工作效率。或許等到拆分資料更成熟一些時,再來考慮。

      刪除
  7. 确实是神功。不知道怎么能推动这个成为标准。

    回覆刪除
    回覆
    1. 感謝誇讚!用的人多了自然就會成為標準。不過這太「小眾」了,沒幾個人會關心,離所謂標準太遙遠,呵呵!

      刪除