简转繁等中文转换(Golang)

之前项目需要个简体转繁体的功能,工期太紧,就自己撸了一个,效果还行. 在做这个的过程中发现简转繁其实远比想的要复杂.
中间有很多简体字习惯的用法,在繁体中是不同的。且有些字如(後,后,臺灣,台灣) 在繁体中有几种写法和用法
简体字将其简化成了一个字...
然后相同的字,在不同的词组中时,有些用简体那个,有些用繁体那个...
最后,台湾繁体和香港繁体还有不同的差异.
不一一列举,总之是个麻烦事。机械的通过一些编码转换是不行的. 所以通常自己写的话是通过词库去翻译比较好点。
当然也可以调第三方服务API(如有道,维基之类),不过如果业务性能有要求,还是不要调这类第三方服务好点。
后面项目弄完了,我再回过头研究这个问题,发现了个Open CC的项目弄这个还可以.然后Golang的调用

封装在GitHub上也有人实现了,就拿来试了试,确实效果还不错.

例子:

package main

/*
利用OpenCC进行简转繁的例子

   OpenCC库 : https://github.com/BYVoid/OpenCC
   opencc wrapper for Golang : github.com/stevenyao/go-opencc

  Author:XCL
*/

import (
	"fmt"
	opencc "github.com/stevenyao/go-opencc"
)

func main() {

	// mac  local
	config_s2t := "/Users/xcl/langtest/input/OpenCC-master/data/config/s2t.json"
	// linux
	//config_s2t := "/usr/share/opencc/s2t.json"

	// 简体字符串
	ch := "前面有大臣,后面有皇后 游览风景,做游戏,去游园夜游 登上手工造游艇,看维港景色。拿好设备探寻台湾,去游泳,冲浪,别浪费了这次机会. "

	//应用中需要先检查文件是不是存在,
	// 否则报"fatal error: unexpected signal during runtime execution." 造成服务中断
	c := opencc.NewConverter(config_s2t)
	defer c.Close()
	// 转换
	tw := c.Convert(ch)
	fmt.Println("繁体:",tw)
}

/*
运行结果:
➜  src  : go run main.go
繁体: 前面有大臣,後面有皇后 遊覽風景,做遊戲,去遊園夜遊 登上手工造遊艇,看維港景色。拿好設備探尋臺灣,去游泳,衝浪,別浪費了這次機會.
*/

要跑起这个程序,需要有s2t.json这个词库。

配置s2t.json:

本地,解压从github下载的源码,里面有这个文件词库,

Linux 下可以用的yum或rpm之类的命令安装好opencc,其词库在 /usr/share/opencc下。

这个项目转换是很厉害,可以注意下例子中所举的那些字或词,但有些字或词组用法需要定制时,用这个还真不知道怎么加进去或定制一些转换。

时间有限就没研究下去了,反正线上之前写的那个跑得好好的,稳定为主,不折腾这个了。


BLOG: http://blog.csdn.net

相关文章

程序目录结构 简单实现,用户登录后返回一个jwt的token,下次请求带上token请求用户信息接口并返回信息...
本篇博客的主要内容是用go写一个简单的Proof-of-Work共识机制,不涉及到网络通信环节,只是一个本地的简...
简介 默克尔树(MerkleTree)是一种典型的二叉树结构,其主要特点为: 最下面的叶节点包含存储数据或其...
接下来学习并发编程, 并发编程是go语言最有特色的地方, go对并发编程是原生支持. goroutine是go中最近本...
先普及一下, 什么是广度优先搜索 广度优先搜索类似于树的层次遍历。从图中的某一顶点出发,遍历每一个顶...
第一天: 接口的定义和实现 第二天: 一. go语言是面向接口编程. 在学习继承的时候说过, go语言只有封装,...