/** * @version $Id: Synonym.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $ * * 2012/10/05 19:39:36 * @author kousuke-morishima * * Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved. */ package com.tida_okinawa.corona.correction.script; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import com.tida_okinawa.corona.io.model.ClaimWorkDataType; import com.tida_okinawa.corona.io.model.IClaimWorkData; import com.tida_okinawa.corona.io.model.ICoronaProduct; import com.tida_okinawa.corona.io.model.ICoronaProject; import com.tida_okinawa.corona.io.model.dic.ICoronaDic; import com.tida_okinawa.corona.io.model.dic.IFlucDic; import com.tida_okinawa.corona.io.model.dic.ISynonymDic; import com.tida_okinawa.corona.ui.controllers.SynonymController; import com.tida_okinawa.corona.ui.data.MorphemeRecord; import com.tida_okinawa.corona.ui.data.SynonymRecord; /** * ゆらぎ・同義語補正をコンソールから行うためのクラス * * @author kousuke-morishima */ public class Synonym extends Cleansing2<MorphemeRecord, SynonymRecord> { /** * @param args * 前から順に、データベース接続URL、データベースユーザ名、データベースパスワード、 * 対象プロジェクト名、対象ターゲット名、入力データ種別 */ public static void main(String[] args) { try { new Synonym(args).run(); } catch (Exception e) { e.printStackTrace(); System.exit(Cleansing.ERROR_CODE_ANY_EXCEPTION); } System.exit(0); } /** * 自動実行用 * * @param args * 引数 */ public Synonym(String[] args) { super(args); } /** 引数の数がおかしいときのエラーコード */ public static final int ERROR_CODE_ARGS = 7; /** 入力データ種別がおかしいときのエラーコード */ public static final int ERROR_CODE_INVALID_INPUT = 8; private static final int URL = 0; private static final int USER = 1; private static final int PASS = 2; private static final int PROJECT = 3; private static final int TARGET = 4; private static final int INPUT_TYPE = 5; private ICoronaProject project; private ICoronaProduct product; private ClaimWorkDataType inputType; @Override int check(String[] args) { if (args.length != 6) { return ERROR_CODE_ARGS; } service = createService(args[URL], args[USER], args[PASS]); if (service == null) { return ERROR_CODE_NO_DATABASE_CONNECTION; } /* プロジェクトチェック */ project = searchProject(args[PROJECT]); if (project == null) { return ERROR_CODE_NO_PROJECT; } /* ターゲットチェック */ product = searchProduct(project, args[TARGET]); if (product == null) { return ERROR_CODE_NO_TARGET; } String type = args[INPUT_TYPE]; if (TYPE_MOR.equals(type)) { //inputType = ClaimWorkDataType.MORPHOLOGICAL; inputType = ClaimWorkDataType.DEPENDENCY_STRUCTURE; } else if (TYPE_DEP.equals(type)) { inputType = ClaimWorkDataType.DEPENDENCY_STRUCTURE; } else if (TYPE_SYN.equals(type)) { inputType = ClaimWorkDataType.CORRECTION_SYNONYM; } else { return ERROR_CODE_INVALID_INPUT; } return CODE_OK; } @Override String getErrorMessage(int errorCode) { switch (errorCode) { case ERROR_CODE_ARGS: return Messages.bind(Messages.ErrorMessage_ArgsNum, new Object[] { Messages.NameSynonym, 6, Messages.Synonym_ErrorMessage_ArgsDetail }); case ERROR_CODE_INVALID_INPUT: return Messages.Synonym_ErrorMessage_InvalidInputType; default: return super.getErrorMessage(errorCode); } } void run() { /* 処理対象の選定 */ List<IClaimWorkData> works = new ArrayList<IClaimWorkData>(); for (IClaimWorkData work : product.getClaimWorkDatas()) { if (inputType.equals(work.getClaimWorkDataType())) { works.add(work); } } /* 使用辞書の準備 */ List<ICoronaDic> dics = new ArrayList<ICoronaDic>(); Set<ICoronaDic> synonyms = new HashSet<ICoronaDic>(); synonyms.addAll(product.getDictionarys(ISynonymDic.class)); synonyms.addAll(project.getDictionarys(ISynonymDic.class)); Set<ICoronaDic> flucs = new HashSet<ICoronaDic>(); flucs.addAll(product.getDictionarys(IFlucDic.class)); flucs.addAll(project.getDictionarys(IFlucDic.class)); dics.addAll(synonyms); dics.addAll(flucs); SynonymController controller = new SynonymController(product, works, null, dics); run(controller); } }