ことえりユーザ辞書から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]); } }