2015年1月2日 星期五

用中文字找注音念法

小時候中文沒學好,常常看到某些複雜的字卻不會念,前陣子去吃了家火鍋,叫做溱洧陶養,看到店名,還跟老婆一起猜,到底是唸作溱(ㄓㄣ)洧(ㄨㄟˇ),還是唸作溱(ㄓㄣ)洧(一ㄡˇ)

為了要應付這種狀況,當下便想找個 app 幫忙查一下注音,可是沒想到 iOS 上面並沒有這種應用,我想可能是太簡單了,所以沒人想寫。所以只好自己來弄囉。以下針對這個 app 實作,作個記錄。

1. 輸入
預設的使用情境是看到某個字,卻不會念,因此想要查這個字的注音,所以提供使用者的輸入方式應該會有兩種,分別是
  • 透過手寫輸入法輸入,
  • 透過相機,拍下字,以此圖片當做輸入

2. 手寫輸入法輸入
以 iOS 而言,系統內本來便提供中文手寫輸入法,因此我們所需要的便是幫使用者把這個輸入法叫出來,讓使用者方便輸入。邏輯如下:
// 判斷 iPhone 上是否已經安裝中文手寫輸入法 
NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; 
if ([lang isEqualToString:@"zh-Hant"]) { // 繁體中文輸入   // iPhone 上已安裝中文手寫輸入法   ;
}
else {
   // iPhone 上並無安裝中文手寫輸入法
   // 提醒使用者需安裝中文手寫輸入法才能使用,
   // 並且取消手寫輸入功能,只支援用圖片當成輸入來源。

   ;
}

3. 辨識圖片,找出中文字
圖片變成中文字的過程叫做OCR(Optical character recognition),此部份可以直接參考此Tesseract 的使用範例 
以下簡介此範例使用步驟,
1. Download and install
$ git clone https://github.com/pablosproject/iPhone-OCR-Tesseract-and-OpenCV.git
$ sudo gem install cocoapods
$ cd iPhone-OCR-Tesseract-and-OpenCV
$ pod setup
$ pod install 
2. setup
download Chinese (Traditional) language data for Tesseract 3.02 from https://code.google.com/p/tesseract-ocr/downloads/list
$ tar xvf tesseract-ocr-3.02.chi_tra.tar
$ cp tesseract-ocr/tessdata/* iPhone-OCR-Tesseract-and-OpenCV/infojobOCR/tessdata
$ open TestOCR.xcworkspace

4. 找注音
基本的想法很簡單,透過使用者的輸入,找到對應的中文字碼(BIG5 or UNICODE),到注音的字庫內找到對應的碼,在螢幕上顯示注音。 
iOS內的每個字元都是使用 UNICODE (UTF-16),中文碼的範圍介於4E00 ~ 9FFF之間(細節請參考全字庫),因此透過手寫輸入法所取得字,將其轉成 UTF-16 即可,查詢的方式可分為離線查詢,或線上查詢兩種

線上查詢 
可以直接登入此網頁,輸入對應的UNICODE即可,用法舉例如下:
 
若APP要支援此方法,便需要簡化操作與顯示頁面,當使用者輸入之後,使用CGI請此伺服器查詢資料,然後解析XML,直接取出第三頁內的部分資料提供使用者檢視,例如只取出發音子頁面。 
當然,如果要直接作個網頁介面連到此網站也是一種方式啦。 
離線查詢 
要用此方法,首先得需要有一個 unicode 與注音的對照表格,在iOS的注音輸入法內一定有個類似的表格,只是該如何取得對應資料。 
個人的想法是兩種方式都提供,預設使用離線查詢,若使用者想懂多一個對應的資訊,再幫打開全字庫的網頁。 

註:後來詢問老闆的結果是唸作(ㄓㄣ  ㄨㄟˇ ㄊㄠˊ 一ㄤˇ)

參考資料:
  1. 注音字母 與 Unicode 對照表
  2. U全字庫Unicode 字碼查詢
  3. 教育部終身教育司- 中文譯音轉換系統
  4. ios Managing the Keyboard