OpenCC 簡易使用紀錄


由於 Heresy 自己在寫的一個程式,是在擷取大陸簡體網站的內容,拿來做進一步的後處理。而雖然 Heresy 自己其實對簡體字的閱讀基本上沒啥大問題,但是由於部分的人還是習慣看繁體字,所以 Heresy 也有試著想在處理的時候,順便把簡體轉繁體的動作做掉。

Heresy 自己找了一下後,最後採用的方案,是「OpenCC」(Open Chinese Convert)這個開放原始碼的專案;他的網址是:

http://opencc.byvoid.com/

程式碼目前是放在 GitHub 上:

https://github.com/BYVoid/OpenCC

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

由於 Heresy 是在自己寫程式,所以一開始是想用函示庫的版本,但是在 0.4.2 的原始碼…感覺和 Visual Studio 的相容性有些問題,Heresy 始終無法成功編譯,所以就放棄了。後來則是採用呼叫外部程式的形式、來在程式內呼叫 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 這個專案後,建立出來的檔案會在「\src\Debug」或「\src\Release」的目錄下;這邊需要的,只有「opencc.dll」和「opencc.lib」這兩個檔案。(個人建議可以建置 release 版就好)

而其他專案在使用 OpenCC 時,所需要 header 檔,基本上只有兩個:「\src\opencc.h」和「\src\Export.hpp」;所以在建置好之後,其實只要把下面四個檔案撈出來就可以了~

  • opencc.h
  • Export.hpp
  • opencc.lib
  • opencc.dll

之後要使用的時候,在專案設定則是和一般的函示庫一樣,設定對應的 include 路徑、library 路徑,並且設定加入 opencc.lib 就可以了。

而程式的部分,則也相當簡單~只要 include opencc.h 這個檔案後,就可以開始使用了!而他的程式寫法,就是:

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

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

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

而這些設定檔,都可以在 OpenCC 下的「\data\config」目錄裡找到。如果用文字編輯器打開這些設定檔的話,可以發現他們其實都是很簡單的 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.ocdSTCharacters.ocd 這兩個 OpenCC 自定義的 ocd 轉換對應檔。於這些檔案,則可以在「\data\dictionary」找到對應的文字檔,如果要以 OCD 的格式來使用的話,則需要先將有需要的純文字檔,轉換成 OCD 檔。

不過,由於 OpenCC 也可以直接使用純文字檔~所以這邊 Heresy 選擇不要轉換、而是修改 json 的組態檔,讓他直接使用純文字檔~而修改後的 s2t.json 的內容,就變成:

{
  "name": "Simplified Chinese to Traditional Chinese",
  "conversion_chain": [{
    "type": "mmseg",
    "dict": {
      "type": "group",
      "dicts": [{
        "type": "text",
        "file": "STPhrases.txt"
      }, {
        "type": "text",
        "file": "STCharacters.txt"
      }]
    }
  }]
}

之後,只要把 s2t.jsonSTPhrases.ocdSTCharacters.ocd 這三個檔案,放在執行目錄,讓程式在初始化 OpenCC 的時候,可以讀取到就好了!

而如果要反向轉換的話,也只要改用「t2s.json」這類的設定檔來初始化 OpenCC 就可以了。


附註:

  • 理論上,OpenCC 提供的 txt 檔應該是可以用 opencc_dict 這個程式來轉換成 ocd 檔,但是不知道為啥,Heresy 轉換出來後,OpenCC 會無法使用(程式會停住不動),所以只好放棄。
  • OpenCC 如果讀不到設定檔或對應的字典檔案,會沒有任何訊息、直接死當,而且不能在 VisualStudio 裡面 trace code…這點還真的滿討厭的。
廣告

對「OpenCC 簡易使用紀錄」的想法

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.