Windows 輸入法編輯器 (IME) 內建語言分析引擎,透過 IFELanguage COM 介面可實現中文句子分詞、取得讀音 (拼音/注音)。本文整理自日本網站原始碼 (VC8),經 Zswang (Delphi) 與 ccrun (BCB6) 移植測試。
OleInitialize(NULL),結束時 CoUninitialize()。msime.h (含 IFELanguage、IFECommon 定義、常數、結構)。CLSIDFromString(L"MSIME.China", &clsid) → CoCreateInstance(clsid, ..., IID_IFELanguage, ...)。Open()、GetConversionModeCaps()。GetJMorphResult(FELANG_REQ_REV, FELANG_CMODE_PINYIN | FELANG_CMODE_NOINVISIBLECHAR, len, input, NULL, &pmorrslt)。MORRSLT 結構:pwchOutput 為帶拼音輸出串,pWDD[] 陣列記錄每個詞/字的原文位置/長度與拼音位置/長度。CoTaskMemFree(pmorrslt)、Close()、Release()。WideString wstrInput = L"漢字加拼音演示 妖哥萬歲";
MORRSLT *pmorrslt;
if (pIFELanguage->GetJMorphResult(FELANG_REQ_REV,
FELANG_CMODE_PINYIN | FELANG_CMODE_NOINVISIBLECHAR,
wstrInput.Length(), wstrInput, NULL, &pmorrslt) == S_OK) {
WideString wstrOutput = WideString(pmorrslt->pwchOutput).SubString(1, pmorrslt->cchOutput);
for (int i=0; i < pmorrslt->cWDD; i++) {
WideString word = wstrInput.SubString(pmorrslt->pWDD[i].wReadPos + 1, pmorrslt->pWDD[i].cchRead);
WideString pinyin = wstrOutput.SubString(pmorrslt->pWDD[i].wDispPos + 1, pmorrslt->pWDD[i].cchDisp);
if (pinyin.Length() > 0) word = word + L"(" + pinyin + L")";
Memo1->Lines->Add(word); // 輸出: 漢字(han4 zi4) 加(jia1) 拼音(pin1 yin1) ...
}
CoTaskMemFree(pmorrslt);
}
MSIME.China (簡體中文拼音)MSIME.Taiwan (繁體中文注音/拼音)MSIME.Japan (日文平假名/片假名)原文提供 IMEEngine 封裝類 (C++/Delphi) 及完整測試專案下載。可擴展取得筆畫、部首等資訊。