首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

利用 IFELanguage 介面實現中文分詞與漢字注音 (拼音) - C++ Builder

     編輯:VC 教學

背景

Windows 輸入法編輯器 (IME) 內建語言分析引擎,透過 IFELanguage COM 介面可實現中文句子分詞、取得讀音 (拼音/注音)。本文整理自日本網站原始碼 (VC8),經 Zswang (Delphi) 與 ccrun (BCB6) 移植測試。

核心步驟

  1. 初始化 OLE:OleInitialize(NULL),結束時 CoUninitialize()。
  2. 引入 msime.h (含 IFELanguage、IFECommon 定義、常數、結構)。
  3. 建立簡體中文 IME 實例:CLSIDFromString(L"MSIME.China", &clsid) → CoCreateInstance(clsid, ..., IID_IFELanguage, ...)。
  4. 呼叫 Open()、GetConversionModeCaps()。
  5. 核心分詞/注音:GetJMorphResult(FELANG_REQ_REV, FELANG_CMODE_PINYIN | FELANG_CMODE_NOINVISIBLECHAR, len, input, NULL, &pmorrslt)。
  6. 解析 MORRSLT 結構:pwchOutput 為帶拼音輸出串,pWDD[] 陣列記錄每個詞/字的原文位置/長度與拼音位置/長度。
  7. 釋放資源: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) 及完整測試專案下載。可擴展取得筆畫、部首等資訊。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved