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     
        

    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;i0){
    			cs.append(sc2tw(content.substring(length)));
    		}
    	}
    	return cs.toString();
    }

    本文の転載http://www.weare.net.cn/article/62eae88fa673b07361ba57cf79a0ed96.html