程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 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…這點還真的滿討厭的。

     

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved