iOS自帶輸入法導入第三方輸入法詞庫

Mac/iOS自帶輸入法導入第三方輸入法詞庫

蘋果的自帶輸入法簡潔美觀流暢,對各種軟件的兼容性也是最好的,但是很明顯的不足的就是詞庫沒有第三方輸入法強大。下面就介紹如何把第三方輸入法個人詞庫導入到蘋果自帶輸入法,原理都類似,支持百度輸入法、搜狗輸入法

詞庫文件

macOS、iOS上面輸入法裡面都有文本替換,這就可以讓用戶自定義詞庫,但是並沒有導入的選項。但是發現在Mac上面選中文本項之後往桌面拖動是會在桌面生成一個 用戶詞典.plist 的文件,所以我們可以大膽把已有的文本替換都刪除,把生成的plist文件拖進窗口裡面,發現都還原了,我們可以推斷這就是蘋果自帶輸入法的自定義的詞庫文件了。

Mac/iOS自帶輸入法導入第三方輸入法詞庫

用戶詞典文件


打開 用戶詞典.plist 的文件,發現裡面的結構也比較簡單清晰,詞庫文件規則也一目瞭然,如下圖:

Mac/iOS自帶輸入法導入第三方輸入法詞庫

plist用戶詞典文件規則


在百度輸入法用戶偏好設置裡面選擇導出用戶詞庫文件,使用編輯器打開文件,發現並沒有加密,打開文件,內容格式如下:

Mac/iOS自帶輸入法導入第三方輸入法詞庫


接下來我們就可以寫一個腳本來對百度輸入法導出的詞庫文件內容格式進行轉換,轉換邏輯都類似,不同的語言都可以實現,因為我是Web前端開發,所以用NodeJS來對文件進行處理。

用NodeJS轉換詞庫文件

需要注意的是,你在VSCode打開百度輸入法詞庫文件,發現其編碼是UTF-16 LE,我在用NodeJS讀取文件需要使用encoding UCS-2,否則會出現亂碼。下面寫了一個通用的腳本word2plist.js

<code>const { join } = require('path');
const { readFileSync, writeFileSync } = require('fs');

const fileName = process.argv.pop();

const wordStr = readFileSync(join(__dirname, fileName), { encoding: 'ucs-2'}).toString();

const wordList = wordStr.split(/\\r\\n/);

const plist = wordList.filter(v => v).map(record => {
const match = record.match(/(.+)\\((.+)\\)/);
const phrase = match[1];
const shortcut = match[2].replace(/\\|/g, '');
return `<dict>
phrase
<string>${phrase}/<string>
shortcut
<string>${shortcut}/<string>
/<dict>`;
}).join('\\r\\n');

writeFileSync(join(__dirname, `${fileName}.plist`), `

<plist>
<array>
${plist}
/<array>
/<plist>`);/<code>

安裝NodeJS 之後,就可以直接運行:node word2plist.js 文件路徑,比如導出的文件名是baidu,我們就可以運行

<code>node word2plist.js baidu/<code>

運行之後就會在目錄下生成一個baidu.plist文件,我們拖動文件到文本替換窗口裡面,發現詞庫全部導入進去了!

Mac/iOS自帶輸入法導入第三方輸入法詞庫


導入搜狗輸入法詞庫

因為搜狗輸入法mac版本升級之後導出的詞庫bin文件是加密的,我們可以使用深藍詞庫轉換成百度的,然後用上面的腳本同樣適用,QQ拼音等其他輸入法用同意做法也是可以的。

PS:詞庫是可以自動同步到iPhone設備上的,所以打開手機上的文本替換髮現剛才導入的詞庫全有了!因為我的詞庫量太大了,不得不吐槽一下,手機上打開文本替換動不動就會卡死,蘋果官方目前對該長列表展示的優化不足呀…


分享到:


相關文章: