ことえりユーザ辞書からGoogle辞書への変換

ことえりのユーザ辞書からGoogle日本語入力の辞書フォーマットに変換するプログラムを作ってみた.使い方は以下の通り.

% javac DicConverter.java
% java DicConverter ことえりの辞書.txt Googleの辞書.txt

注意点は以下の通り.

  • ことえりのユーザ辞書は,ことえり単語登録を起動して,「テキストに書き出す…」メニューを選んでほしい.このときにテキスト形式はUnicodeにすること.
  • Google日本語入力では,「辞書ツール…」メニューで辞書ツールを起動して,「新規辞書にインポート…」または「選択した辞書にインポート…」を選んで欲しい.この時に,フォーマットはGoogleエンコードUTF-8にすること.
  • 品詞のマッピングは完全ではない.たとえば,「名詞」は「固有名詞」,「人名」は「姓」,「名」という指定もできるので,あとから適時変更して欲しい.

以下がソースコードだ.

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class DicConverter {
	Map<String, String> map;
	
	public DicConverter() {
		map = new HashMap<String, String>();
		map.put("普通名詞", "名詞");
		map.put("サ変名詞", "名詞サ変");
		map.put("人名", "人名");
		map.put("地名", "地名");
		map.put("形容詞", "名詞");
		map.put("形容動詞", "名詞形動");
		map.put("数字列接尾語", "助数詞");
		map.put("無品詞", "記号");
	}
	
	public void convert(String file1, String file2) throws IOException {
		Scanner scanner = new Scanner(new File(file1), "UTF-16").useDelimiter("\\s*,\\s*|\\r");
		PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file2), "UTF-8"));
		while (scanner.hasNext())
			writer.format("%s\t%s\t%s\n", strip(scanner.next()), strip(scanner.next()), map.get(strip(scanner.next())));
		scanner.close();
		writer.close();
	}
	
	String strip(String s) {
		if (s.charAt(0) == '"' && s.charAt(s.length() - 1) == '"')
			return s.substring(1, s.length() - 1);
		return s;
	}
	
	public static void main(String[] args) throws IOException {
		new DicConverter().convert(args[0], args[1]);
	}
}