小時候中文沒學好,常常看到某些複雜的字卻不會念,前陣子去吃了家火鍋,叫做溱洧陶養,看到店名,還跟老婆一起猜,到底是唸作溱(ㄓㄣ)洧(ㄨㄟˇ),還是唸作溱(ㄓㄣ)洧(一ㄡˇ)。
為了要應付這種狀況,當下便想找個 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的注音輸入法內一定有個類似的表格,只是該如何取得對應資料。
個人的想法是兩種方式都提供,預設使用離線查詢,若使用者想懂多一個對應的資訊,再幫打開全字庫的網頁。
註:後來詢問老闆的結果是唸作(ㄓㄣ ㄨㄟˇ ㄊㄠˊ 一ㄤˇ)
參考資料: