欢迎来到山村网

C++ OpenCC 简易使用纪录

2019-03-02 14:28:51浏览:260 来源:山村网   
核心摘要:OpenCC 除了有函数库外,也有提供命令提示字符形式、以及图形介面的执行档可以使用。而他预先编译好的程序,则是放在 Google Cod

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 这个文件后,就可以开始使用了!而他的程序写法,就是:

    std::stringsInput="....."; Opencc::SimpleConvertermOpenCC("s2t.json"); std::stringsResult=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 的内容,就变成:

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

之后,只要把 s2t.json、STPhrases.ocd 和 STCharacters.ocd 这三个文件,放在执行目录,让程序在初始化 OpenCC 的时候,可以读取到就好了!
而如果要反向转换的话,也只要改用‘t2s.json’这类的设置档来初始化 OpenCC 就可以了。
附注:
理论上,OpenCC 提供的 txt 档应该是可以用 opencc_dict 这个程序来转换成 ocd 档,但是不知道为啥,Heresy 转换出来后,OpenCC 会无法使用(程序会停住不动),所以只好放弃。
OpenCC 如果读不到设置档或对应的字典文件,会没有任何信息、直接死当,而且不能在 VisualStudio 里面 trace code…这点还真的满讨厌的。

(责任编辑:豆豆)
下一篇:

数字签名添加器源码

上一篇:

编写Python CGI脚本的教程

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com