萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> C++ OpenCC 簡易使用紀錄

C++ OpenCC 簡易使用紀錄

 OpenCC 除了有函數庫外,也有提供命令提示字符形式、以及圖形介面的執行檔可以使用。而他預先編譯好的程序,則是放在 Google Code 上,最新的 Windows 版是 0.4.2。

由於 筆者 是在自己寫程序,所以一開始是想用函數庫的版本,但是在 0.4.2 的原始碼…感覺和 Visual Studio 的兼容性有些問題,筆者始終無法成功編譯,所以就放棄了。後來則是采用調用外部程序的形式、來在程序內調用 OpenCC 的命令提示字符來完成轉換。

而最近,因為程序要改版,所以又開始試著看看,能不能把 OpenCC 整合的更好。而結果呢,則是發現在來 GitHub 上的最新版本可以用!這篇就是簡單紀錄一下使用的經驗了~

如果要在 Visual Studio 2013 內使用 OpenCC 這個函數庫,首先就是要到 GitHub 上,去下載最新的原始碼。下載下來後,接下來是要使用 CMake 這個工具,來建立出 VisualSudio 用的專案檔。執行的指令是:
cmake -G "Visual Studio 12" -DCMAKE_INSTALL_PREFIX="" 
-DCMAKE_BUILD_TYPE=Release -DENABLE_GETTEXT:BOOL=OFF

順利執行後,就可以看到目錄下會出現 VisualStudio 對應的專案檔和方案檔,這時候去開啟建立出來的‘opencc.sln’這個文件,就可以開啟 OpenCC 的方案了~
沒意外的話,這個方案應該可以完整地建置出來。不過如果是要把 OpenCC 當函數庫用,那其實只要建置‘libopencc’這個專案就可以了。

在成功建立 libopencc 這個專案後,建立出來的文件會在‘srcDebug’或‘srcRelease’的目錄下;這邊需要的,只有‘opencc.dll’和‘opencc.lib’這兩個文件。(個人建議可以建置 release 版就好)

而其他專案在使用 OpenCC 時,所需要 header 檔,基本上只有兩個:‘srcopencc.h’和‘srcExport.hpp’;所以在建置好之後,其實只要把下面四個文件撈出來就可以了~
opencc.h
Export.hpp
opencc.lib
opencc.dll
之後要使用的時候,在專案設置則是和一般的函數庫一樣,設置對應的 include 路徑、library 路徑,並且設置加入 opencc.lib 就可以了。
而程序的部分,則也相當簡單~只要 include opencc.h 這個文件後,就可以開始使用了!而他的程序寫法,就是:

  1. std::string sInput = ".....";  
  2. Opencc::SimpleConverter mOpenCC("s2t.json");  
  3. std::string sResult = mOpenCC.Convert(sInput); 

基本上,就是先建立一個 SimpleConvert 的物件、mOpenCC 出來,然後調用他的 Convert() 函數來進行轉換就可以了。而 Convert() 函數接受的,應該是 UTF-8 編碼的 std::string,所以如果來源字串不符合需求的話,可以考慮先透過 Boost.Locale 來做轉換(參考)。
 

而在建立的時候,指定一個組態設置檔給 OpenCC,讓他知道要用怎樣的設置來進行之後的轉換。Heresy 這邊是用‘s2t.json’這個設置檔,應該算是最簡單的簡體轉繁體的設置。

 

而這些設置檔,都可以在 OpenCC 下的‘dataconfig’目錄裡找到。如果用文字編輯器打開這些設置檔的話,可以發現他們其實都是很簡單的 JSON 格式的數據,定義了要使用那些轉換的對應表;像是‘s2t.json’的內容,基本上就是下面這樣的形式:
{
  "name": "Simplified Chinese to Traditional Chinese",
  "conversion_chain": [{
    "type": "mmseg",
    "dict": {
     "type": "group",
      "dicts": [{
        "type": "ocd",
        "file": "STPhrases.ocd"
      }, {
        "type": "ocd",
        "file": "STCharacters.ocd"
      }]
    }
  }]
}

 

這邊可以看到,他裡面指定去使用了 STPhrases.ocd 和 STCharacters.ocd 這兩個 OpenCC 自定義的 ocd 轉換對應檔。於這些文件,則可以在‘datadictionary’找到對應的文字檔,如果要以 OCD 的格式來使用的話,則需要先將有需要的純文字檔,轉換成 OCD 檔。
不過,由於 OpenCC 也可以直接使用純文字檔~所以這邊 Heresy 選擇不要轉換、而是修改 json 的組態檔,讓他直接使用純文字檔~而修改後的 s2t.json 的內容,就變成:

  1. {  
  2.   "name": "Simplified Chinese to Traditional Chinese",  
  3.   "conversion_chain": [{  
  4.     "type": "mmseg",  
  5.     "dict": {  
  6.       "type": "group",  
  7.       "dicts": [{  
  8.         "type": "text",  
  9.         "file": "STPhrases.txt" 
  10.       }, {  
  11.         "type": "text",  
  12.         "file": "STCharacters.txt" 
  13.       }]  
  14.     }  
  15.   }]  

之後,只要把 s2t.json、STPhrases.ocd 和 STCharacters.ocd 這三個文件,放在執行目錄,讓程序在初始化 OpenCC 的時候,可以讀取到就好了!
而如果要反向轉換的話,也只要改用‘t2s.json’這類的設置檔來初始化 OpenCC 就可以了。
附注:
理論上,OpenCC 提供的 txt 檔應該是可以用 opencc_dict 這個程序來轉換成 ocd 檔,但是不知道為啥,Heresy 轉換出來後,OpenCC 會無法使用(程序會停住不動),所以只好放棄。
OpenCC 如果讀不到設置檔或對應的字典文件,會沒有任何信息、直接死當,而且不能在 VisualStudio 裡面 trace code…這點還真的滿討厭的。

 

copyright © 萬盛學電腦網 all rights reserved