首先介紹一下台灣華語羅馬拼音(THL) , THL跟通用一樣是從漢語拼音衍生出來,所以拼字結構基本上是相同的,主要是配合台灣人的習慣做調整及延伸,也因為結構相同,原則上我們希望羅馬拼音輸入法不只是吃 THL,也要能夠通吃漢語拼音及通用拼音例如:
(THL/漢語/通用)以目前 libchewing 的架構下,就我們的理解是,每一個輸入字串最後都會被轉為單一個注音拼音,然後開始查表,要達到上面這幾點的需求,這部份的架構勢必需要調整,我們在嘗試的時候是用一些繞路抓特例的方式來實作 (目前試到一半,不確定能不能成功),不過這種方式彈性會很低,能有一個完整的架構的話當然會更理想了,當然,如果需要我們的話,我們會非常樂意共同參與開發的,謝謝大家。
請問您是余博士的朋友嗎?
http://jidanni.org/lang/pinyin/older.html
之前 Jeff Chen 做的版本是查表處理,可見 src/hanyupinyin.c
/**
* Map pinyin key-sequence to Zuin key-sequence.
* Caller should allocate char zuin[4].
*
* Non-Zero: Fail to fully convert
*
* @retval 0 Success
*/
int HanyuPinYinToZuin( char *pinyinKeySeq, char *zuinKeySeq )
如果要作到華語羅馬拼音的支援,這部份的邏輯可能得大改,但我相信可行的。
> 以目前 libchewing
> 的架構下,就我們的理解是,每一個輸入字串最後都會被轉為單一個注音拼音,然後開始查表,要達到上面這幾點的需求,這部份的架構勢必需要調整,我們在嘗試的時候是用一些繞路抓特例的方式來實作
> (目前試到一半,不確定能不能成功),不過這種方式彈性會很低,能有一個完整的架構的話當然會更理想了,當然,如果需要我們的話,我們會非常樂意共同參與開發的,謝謝大家。
>
好的,歡迎討論。
Sincerely,
-jserv
可以改 data/pinyin.tab
其內容大概為:
34
b 1
p q
m a
f z
d 2
t w
n s
l x
g e
k d
h c
... (下略) ...
以 "h" 來說,就是對到「ㄏ」(鍵位 = "c")
當然再建立另一個表格與搜尋方法也行。
> 更進一步的話,就我目前的理解(有錯請指正,感謝),新酷音的聲調前段處理是切開處理完不同鍵盤排列,接著轉成預設注音輸入碼,然後再合流從有聲調的詞典檔做判斷。一開始
> PinYinInput() 會透過 HanyuPinYinToZuin() 一對一把輸入轉成注音輸入碼,然後放進 buffer
> 裡。這邊要改成直接可以無調或是模糊的話,那輸入就變成一對多,這樣勢必會影響到原本注音輸入的運作模式,會變成大規模變動,似乎不是很理想。
>
> 或許在後端動手會比較容易,也就是在輸入碼固定的情況下,轉出來的注音符號會不只一組(cheng2 bao3 → t/6 1l3) → ㄔㄥˊ ㄅㄠˇ +
> ㄔㄣˊ ㄅㄠˇ),最後再照指定的順序(ex. 常用音優先或正確音優先、漢語優先或THL優先等) 合併後呈現,然後把這整段都鎖在 kbtype ==
> KB_HANYU_PINYIN 也就是只有用羅馬拼音輸入的時候才會生效,這樣影響範圍就不會太大了。
這部份應該可以參考鍵盤排列的想法來作。程式碼搜尋 "Hsu",可見到 src/chewingio.c 與 src/zuin.c 的實做。
Regards,
-jserv
感謝分享與提交實做。附件是針對 libchewing GIT 的 patch (作了些微的縮排語行末空白調整,可 git apply 來測試。
「單一字採用不同拼音方案就變得可能,而且對應表會相對很簡單,像是雄(漢語 xiong2, THL syong2) 輸入 xyong2 或是
siong2 都通,甚至要交互支援威妥瑪也是可行的」聽起來很有趣 :)
Regards,
-jserv
若讓學生亂拼,
會害他們一輩子,
故應有嚴拼設定,
不接受所選目前方案非完整之輸入。
現在打「ㄎㄠˋㄧㄠ」有「哭夭」可以選,感覺好像不太對
2012/8/18 jidanni <jid...@jidanni.org>:
> 若讓學生亂拼,
> 會害他們一輩子,
> 故應有嚴拼設定,
> 不接受所選目前方案非完整之輸入。
>
> --
> 您已訂閱「Google 網上論壇」的「Chewing IM Development」群組,因此我們特別傳送這封郵件通知您。
> 如要在網路上查看這項討論,請造訪
> https://groups.google.com/d/msg/chewing-devel/-/m5VOKRLhKS4J。
>
> 如要在此群組張貼留言,請傳送電子郵件至 chewin...@googlegroups.com。
> 如要取消訂閱此群組,請傳送電子郵件至 chewing-deve...@googlegroups.com。
> 如需更多選項,請造訪此群組:http://groups.google.com/group/chewing-devel?hl=zh-TW。
感謝三位指出目前新酷音在詞語支援的疑慮,個人想法是我們讓詞庫本身保持一個平衡,也就是說,開發階段尊重語文演化的事實,並採納相關的詞彙,而經由網路統計與人工檢閱的方式,將原本單一詞庫切離成兩個以上的詞庫。這樣我們可透過
subset 的控制,克服詞彙的相容議題。
目前台科大 Rifur 等同學正在進行動態詞庫加載的機制,並預期導入由社群成員分享交流的詞庫匯出、匯入機制。
而成大 Sponge 等同學在進行允許模糊音 / 無調詞彙的輸入機制。
在暑假結束後,我們預期這些開發成果能導入到 libchewing,並且輔助詞彙處理。
回到羅馬拼音,我個人傾向採納 Wei-Hao 的貢獻,但應該提供必要的「容錯」選項 (抱歉,我意思是相容多個拼音系統)。各位覺得如何?
Regards,
-jserv
至於革命性的功能,只要預設關閉。
至於余氏兼信徒,通通抓起來。
請問這部份有計劃更新嗎?或許我們來得及在年底前整合進去。
Thanks,
-jserv
patch 大致上完成,主要是 kbtype 新增了 KB_THL_PINYIN (台灣華語羅馬拼音) 跟 KB_MPS2_PINYIN (注音二式),同時修正了 KB_HANYU_PINYIN (漢語拼音) 的一些問題,原來的特性大致上都還是保留了下來。
然後因為有些音有重疊的定義,所以我另外拉了一個 Alt 的系列出來,ZuinData 裡面多了 pho_inx_alt 跟 phoneAlt,ChewingData 多了一個 phoneSeqAlt,原則上就是拼音遇到同輸入不同音時, Alt 就能派上用場了,以 si 來講:
KB_THL_PINYIN:
phone: 0x1c80 (ㄒㄧ)
phoneAlt: 0x2a00 (ㄙ)
KB_HANYU_PINYIN:
phone: 0x2a00 (ㄙ)
phoneAlt: 0x1c80 (ㄒㄧ)
會依照所選的 kbtype 決定順序,當然也有些是共用的,像 lu 不管選哪個 kbtype ㄌㄨ 後面都會加上 ㄌㄩ。至於一般情況,包括所有其他注音排列,phoneAlt 就只是 phone 的複製,例如 ji:
phone: 0x1880 (ㄐㄧ)
phoneAlt: 0x1880
然後在 choice.c 的 SetChoiceInfo() 會看兩個值有沒有相同再決定要不要附加,這個附加跟許氏注音附加音 (例:ㄘ/ㄟ) 的方式類似,只是單純處理單字的情況,並不會影響到組詞的部份。話說回來,其實許氏注音附加音的那塊也可以整合進來…
附檔一個是 libchewing 的 patch,另外我通常用 ibus 在測試,所以也弄了一個給 ibus-chewing 用的 patch,還請大家多多測試,謝謝。
patch 大致上完成,主要是 kbtype 新增了 KB_THL_PINYIN (台灣華語羅馬拼音) 跟 KB_MPS2_PINYIN (注音二式),同時修正了 KB_HANYU_PINYIN (漢語拼音) 的一些問題,原來的特性大致上都還是保留了下來。
感謝 patch! 我有以下的問題:
在 2012年12月27日上午10:36,Wei-Hao Syu <whsy...@gmail.com> 寫道:
> patch 大致上完成,主要是 kbtype 新增了 KB_THL_PINYIN (台灣華語羅馬拼音) 跟 KB_MPS2_PINYIN
> (注音二式),同時修正了 KB_HANYU_PINYIN (漢語拼音) 的一些問題,原來的特性大致上都還是保留了下來。
既然拼音系統已經大幅擴充,要不我們趁這個機會將 src/hanyupinyin.c 重新命名?
若稱為 src/pinyin.c 適當嗎?
> 然後因為有些音有重疊的定義,所以我另外拉了一個 Alt 的系列出來,ZuinData 裡面多了 pho_inx_alt 跟
> phoneAlt,ChewingData 多了一個 phoneSeqAlt,原則上就是拼音遇到同輸入不同音時, Alt 就能派上用場了,以 si 來講:
[...]
> 然後在 choice.c 的 SetChoiceInfo() 會看兩個值有沒有相同再決定要不要附加,這個附加跟許氏注音附加音 (例:ㄘ/ㄟ)
> 的方式類似,只是單純處理單字的情況,並不會影響到組詞的部份。話說回來,其實許氏注音附加音的那塊也可以整合進來…
src/zuin.c (EndKeyProcess)
u16Pho = UintFromPhoneInx( pZuin->pho_inx );
+ u16PhoAlt = UintFromPhoneInx( pZuin->pho_inx_alt );
+
+ /* no alternative phone, copy from origial as alt*/
+ if ( (u16PhoAlt & 0xFFF8) == 0 ) {
+ u16PhoAlt = u16Pho;
+ }
+
if ( GetCharFirst( pgdata, &tempword, u16Pho ) == 0 ) {
ZuinRemoveAll( pZuin );
return ZUIN_NO_WORD;
}
這裡就是改回同輸入不同音的預設值,是嗎? 0xFFF8 是 magic number 嗎?
另外,能否將程式碼的註解改以英文為主?
Thanks,
-jserv
在年底的 release,應該來不及更名 "zuin" 這項「美麗的錯誤」。但可以列入 2013 年的計畫,連同 API 改版一起處理。
hi Wei-Hao,感謝 patch! 我有以下的問題:
在 2012年12月27日上午10:36,Wei-Hao Syu <whsy...@gmail.com> 寫道:
> patch 大致上完成,主要是 kbtype 新增了 KB_THL_PINYIN (台灣華語羅馬拼音) 跟 KB_MPS2_PINYIN
> (注音二式),同時修正了 KB_HANYU_PINYIN (漢語拼音) 的一些問題,原來的特性大致上都還是保留了下來。既然拼音系統已經大幅擴充,要不我們趁這個機會將 src/hanyupinyin.c 重新命名?
若稱為 src/pinyin.c 適當嗎?
> 然後因為有些音有重疊的定義,所以我另外拉了一個 Alt 的系列出來,ZuinData 裡面多了 pho_inx_alt 跟
> phoneAlt,ChewingData 多了一個 phoneSeqAlt,原則上就是拼音遇到同輸入不同音時, Alt 就能派上用場了,以 si 來講:
[...]
> 然後在 choice.c 的 SetChoiceInfo() 會看兩個值有沒有相同再決定要不要附加,這個附加跟許氏注音附加音 (例:ㄘ/ㄟ)
> 的方式類似,只是單純處理單字的情況,並不會影響到組詞的部份。話說回來,其實許氏注音附加音的那塊也可以整合進來…src/zuin.c (EndKeyProcess)
u16Pho = UintFromPhoneInx( pZuin->pho_inx );
+ u16PhoAlt = UintFromPhoneInx( pZuin->pho_inx_alt );
+
+ /* no alternative phone, copy from origial as alt*/
+ if ( (u16PhoAlt & 0xFFF8) == 0 ) {
+ u16PhoAlt = u16Pho;
+ }
+
if ( GetCharFirst( pgdata, &tempword, u16Pho ) == 0 ) {
ZuinRemoveAll( pZuin );
return ZUIN_NO_WORD;
}這裡就是改回同輸入不同音的預設值,是嗎? 0xFFF8 是 magic number 嗎?
另外,能否將程式碼的註解改以英文為主?
Thanks,
-jserv
Great!
已更名:
commit ec247444905a00cff0101919f4ed5a7f37d6e26f
Author: Jim Huang <js...@0xlab.org>
Date: Fri Dec 28 20:09:02 2012 +0800
Rename all occurrence of 'hanyupinyin' with 'pinyin' to be more generic
We are going to merge THL-Pinyin (台灣華語羅馬拼音) and MPS2-Pinyin
(注音二式). It should be better to make naming more consistent.
請在這基礎上提交 patch。
Thanks,
-jserv
patch based on czchen's latest commit:
commit 536c9ab82ce680b1446d4cc612c3e41152c0df69 (Fix memory leak when malloc() fails)
http://admin.thl.tw/_media/programming/2012-12-30/libchewing-pinyin-update-2012-12-30.patch