java调用opencc将中文简体繁体转换

 Open Chinese Convert(OpenCC)是一个开源的中文简繁转换项目,致力于制作高质量的基于统计预料的简繁转换词库。还提供函数库(libopencc)、命令行简繁转换工具、人工校对工具、词典生成程序、在线转换服务及图形用户界面。

opencc的特点:

  • 严格区分「一简对多繁」、「一简对多异」和「地域用词差别」。

  • 支持异体字转换,兼容陆港澳台等不同地区用字差别。

  • 严格审校一简对多繁词条,原则为「能分则不合」,用户可自定义合并。

  • 支持中国大陆、台湾、香港异体字和地区习惯用词转换,如「裏」「裡」、「鼠標」「滑鼠」。

  • 词库和函数库完全分离,可以自由修改、导入、扩展。

  • 支持C、C++、Python、PHP、Java、Ruby、Node.js and Android等多种语言API,提供命令行直接调用,以及图形界面。

  • 兼容Windows、Linux、Mac等多种平台。

项目使用java编写,官网说支持java语言,但是没有找到java的api,所以使用曲折的方式实现:linux下安装opencc,编写shell脚本,然后使用java调用shell脚本来进行简繁转换。

opencc安装请点击 ubuntu安装opencc,简体转繁体

opencc安装后编写shell脚本

#!/bin/sh
#echo $1
echo $1 |opencc -c s2tw

 

测试:

ubuntu@ubuntu-vm:/usr/local$ ./s2tw.sh 微儿博客www.weare.net.cn
微兒博客www.weare.net.cn

 

java调用shell

public static Object sc2tw(String content){
	try {
		StringBuffer sb = new StringBuffer("");
		Process ps = Runtime.getRuntime().exec("/usr/local/s2tw.sh \""+content+"\"");
		BufferedReader in = new BufferedReader(new InputStreamReader(ps.getInputStream()));
		String line = null;
		ps.waitFor();
		while((line = in.readLine())!=null){
			sb.append(line);
		}
		in.close();
		if(sb.indexOf("\"")==0){
			sb = sb.deleteCharAt(0);
		}
		if(sb.lastIndexOf("\"")==sb.length()-1){
			sb = sb.deleteCharAt(sb.length()-1);
		}
		ps.destroy();
		line = null;
		return sb;
	} catch (IOException e) {
		logger.error("shell执行出错");
	} catch (InterruptedException e) {
		logger.error("shell执行出错");
	}
	return content;
}

 

但是具体执行过程中发现java程序运行一段时间后会卡死,经过排查发现当shell脚本传入的参数特别大时,java会一直等待shell脚本执行完成,所以对于长度特别长的文本采用分段转换

public static String simple2tw(String content){
	StringBuffer cs = new StringBuffer("");
	int length = content.length();
	int count = length/words;
	int ys = length%words;
	if (count==0) {
		cs.append(sc2tw(content));
	}else{
		for(int i=0;i<count;i++){
			cs.append(sc2tw(content.substring(i*words, (i+1)*words)));
			length = (i+1)*words;
		}
		if(ys>0){
			cs.append(sc2tw(content.substring(length)));
		}
	}
	return cs.toString();
}

 更多内容请访问 微儿博客

猜你喜欢

转载自weareweier.iteye.com/blog/2348957
今日推荐