Input Method Auto Modifier Between Chinese and English

自動切換中英文輸入法程式

Posted by Jexus on July 31, 2017

Recently by the same author:


美國 EECS 博士班申請經驗分享 (ML/DL/NLP/Speech)

2021 Fall NLP/Speech PhD Application

寫這篇的時候我還沒有這個部落格,當時文章放在 https://hackmd.io/s/Sy4AZViU-

也可以直接看github頁面

程式效果

  • 使用英文輸入法鍵入兩個中文字之按鍵組合時,會自動切換成中文輸入法,並幫你刪錯字再重新輸入原本想打的字
  • 英文效果亦同,但為避免誤換輸入法,只有在輸入字庫中的單字時,才會轉換成英文輸入法,字庫會自動新增單字 (詳見 關於字庫 )
  • 應該有比微軟內建自動切換好用87倍

GIF

環境需求(Windows)

  • Python2.7
  • PyHook (下載 pyHook‑1.5.1‑cp27‑cp27m‑win32.whl #如果你python裝的是64bit,可以載amd64的 然後在檔案目錄pip install pyHook‑1.5.1‑cp27‑cp27m‑win32.whl)
  • pythoncom (附在pypiwin32裡面) (下載 pypiwin32-219-cp27-none-win32.whl #如果你python裝的是64bit,可以載amd64的 然後在檔案目錄pip install pypiwin32-219-cp27-none-win32.whl)
  • PyUserInput (下載 PyUserInput-0.1.11-py2-none-any.whl ,然後pip install PyUserInput-0.1.11-py2-none-any.whl)
  • PyAutoGUI (有內建,直接pip install pyautogui就好) <!–
  • requests (有內建,直接pip install requests就好) –> ※ 以上建議在虛擬環境中裝設,會比較乾淨

前置作業

由於微軟新注音輸入法不是什麼開源的軟體,一般情況下程式沒有方法可以取得當前的輸入法,所以要用PyAutoGUI來偷吃步:

  1. 找到工具列右下角顯示中英文輸入法的地方
  2. 找到一個像素位置,當中文輸入時是白色,英文輸入時是黑色(白色的RGB值須分別皆大於200) p.s. 我是選英字撇捺中間的地方
  1. Hook.py來查看該像素格的座標位置 (Hook.py需在環境建置好之後才能用)

Hook.py會不斷更新顯示滑鼠游標的座標位置及RGB值:

---
Position: (1361, 1002) #-->座標位置
RGB: (250, 250, 250)   #-->RGB值
---
  1. ModifyInputType.py程式碼126行的pixel=(1683, 1063)改成你自己取得的pixel位置
  2. If it’s stupid but it works, it isn’t stupid.

若使用電腦途中有調整螢幕解析度,除了上述pixel值要重新取得之外,需要登出一次,應用程式才會調整成新的解析度。如果是調小解析度還好,可能不會影響到。但如果調大解析度而未登出一次,會使應用程式抓不到超出原本小解析度範圍的pixel值。

啟動

需要把 字庫 跟其它程式放到同一資料夾,才能運作

然後就直接執行 ModifyInputType.py

如果有使用virtualenv,可以寫一個bat檔,像這樣:

@echo off
cmd /k "cd /d C:\path\to\your\virtualenv_location\Scripts & activate & cd /d  C:\path\to\to\your\file & python ModifyInputType.py"

之後就不用先開虛擬環境再執行囉,可以直接執行或是設定排程。

結束

直接關閉視窗 或是輸入enter, z, x, c, v 跳出程序回到cmd

關於字庫

  • 取用自Linux的內建字庫,原有45000餘字,刪去”so”, “up”, “go”…等會與中文輸入混淆的字( so: “ㄋㄟ”, up: “ㄧㄣ”, go: “ㄕㄟ”…) ```success 2017.08.17更新
  • 目前程式已更新為可以吃go,so等字,但需在go,so後面打一個空白才能辨別。
  • 請下載最新版程式碼ModifyInputType.py,並將字庫透過Dictionary_Add&Del.py自行增加”go+空白”,”so+空白”等新字。(或是直接載新版字庫EnWordBase.json也可)
  • 自行增加”- “入字庫可讓你使用Markdown語法時更方便(在輸入Generic List的時候),但必須確定你平常打字沒有使用一聲”ㄦ”的習慣。
  • up: “ㄧㄣ” -> 因為中文打一聲ㄧㄣ也會用到空白,會衝突沒辦法加,如果我哪一天學會ML幫我判斷上下文再加這功能好了QAQ ```
  • 當使用者使用中文輸入法打進一串英文字,但因英文字並不在字庫裡,所以沒有自動切換輸入法時,使用者通常會手動按shift切輸入法,這時剛剛所打的那串英文字會自動新增到字庫裡。因此使用者可藉此新增單字 (單字長度需大於3個字元)
  • 另外可藉由Dictionary_Add&Del.py的GUI介面來找查或新增刪除字庫內的字

建立捷徑、快捷鍵或釘選到工具列

  1. 寫成一個bat檔可以直接執行程式
  2. 在bat檔按右鍵建立捷徑,捷徑按右鍵可設定全域快捷鍵,像我是設Ctrl+Alt+” . “(還可以順便改個icon,雖然都很難看就是)
  3. 把捷徑放到C:\ProgramData\Microsoft\Windows\Start Menu\Program他就會出現在工具列裡了
  4. 有沒有比較像一般程式der感覺,讚讚!

Warning

  • 若同時使用cmd跑一些運算量較大的程式,與此程式有互相干擾之可能 (較常出現: 執行續順序錯誤導致自動打出來的字有鬼鍵出現)