/**
* @version $Id: Term.java 1839 2014-04-16 02:33:51Z yukihiro-kinjyo $
*
* 2011/11/02 01:03:11
* @author imai-yoshikazu
*
* Copyright 2011-2014 TIDAコンソーシアム All Rights Reserved.
*/
package com.tida_okinawa.corona.correction.frequent;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import com.tida_okinawa.corona.io.model.MorphemeElement;
import com.tida_okinawa.corona.io.model.dic.ITerm;
import com.tida_okinawa.corona.io.model.dic.TermCForm;
import com.tida_okinawa.corona.io.model.dic.TermClass;
import com.tida_okinawa.corona.io.model.dic.TermPart;
/**
* 頻出用語検出用の品詞情報
*
* @author imai
*
*/
public class Term implements ITerm, Comparable<Term> {
int id;
boolean isDirty = false;
final static int GENKEI = 0;
final static int YOMI = 1;
final static int HINSHI = 2;
final static int HINSHI_SAIBUN = 3;
final static int CFORM = 4;
String[] parts = new String[5];
/**
* ファイルの1行からRecordを作る
*
* @param text
* 形態素解析結果形式の文字列
* @return スペースで分割した時、分割数が8より少ない場合、nullを返す
*/
static Term createTerm(String text) {
String[] parts = text.split(" ");
if (parts.length >= 5) {
return new Term(parts);
// TODO: 代表表記の読みを取得
}
return null;
}
public static Term createTerm(MorphemeElement me) {
String[] parts = { me.getGenkei(), me.getYomi(), me.getHinshi(), me.getHinshiSaibunrui(), me.getCform(), };
return new Term(parts);
}
Term(String[] parts) {
this.parts = parts;
}
public String getGenkei() {
return parts[GENKEI];
}
public void setGenkei(String genkei) {
parts[GENKEI] = genkei;
}
public String getYomi() {
return parts[YOMI];
}
public void setYomi(String yomi) {
parts[YOMI] = yomi;
}
public String getHinshi() {
return parts[HINSHI];
}
public void setHinshi(String hinshi) {
parts[HINSHI] = hinshi;
}
public String getHinshiSaibunrui() {
return parts[HINSHI_SAIBUN];
}
public void setHinshiSaibunrui(String saibunrui) {
parts[HINSHI_SAIBUN] = saibunrui;
}
@Override
public TermCForm getCform() {
String s = parts[CFORM];
TermCForm c = TermCForm.valueOfName(s);
return c;
}
@Override
public int compareTo(Term o) {
// note. Morpheme#getText() だと余分な情報もあるので必要な情報だけを比較
int c = getGenkei().compareTo(o.getGenkei());
if (c != 0)
return c;
c = getYomi().compareTo(o.getYomi());
if (c != 0)
return c;
c = getHinshi().compareTo(o.getHinshi());
if (c != 0)
return c;
c = getHinshiSaibunrui().compareTo(o.getHinshiSaibunrui());
if (c != 0)
return c;
c = getCform().compareTo(o.getCform());
return c;
}
@Override
public String toString() {
// note: new MorphemeElement(String) で解析できる形にする
// 余分な情報を出さない
return getGenkei() + " " + getYomi() + " " + getHinshi() + " " + getHinshiSaibunrui() + " " + getCform();
}
@Override
public void setId(int id) {
this.id = id;
isDirty = true;
}
@Override
public int getId() {
return id;
}
@Override
public String getValue() {
return getGenkei();
}
@Override
public void setValue(String value) {
set(GENKEI, value);
}
@Override
public TermPart getTermPart() {
String s = getHinshi();
return TermPart.valueOfName(s);
}
@Override
public void setTermPart(TermPart termPart) {
set(HINSHI, termPart.getName());
}
@Override
public TermClass getTermClass() {
String s = getHinshiSaibunrui();
return TermClass.valueOfName(s);
}
@Override
public void setTermClass(TermClass termClass) {
set(HINSHI, termClass.getName());
}
@Override
public String getReading() {
return getYomi();
}
@Override
public void setReading(String reading) {
set(YOMI, reading);
}
@Override
public void setCform(TermCForm cform) {
set(CFORM, cform.getName());
}
@Override
public boolean isDirty() {
return isDirty;
}
@Override
public String getJumanBase() {
return getGenkei();
}
@Override
public void setJumanBase(String jumanBase) {
// TODO: 代表語にする
set(GENKEI, jumanBase);
}
int dicId = -1; // -1: unset
@Override
public int getComprehensionDicId() {
return dicId;
}
void set(int index, String value) {
parts[index] = value;
isDirty = true;
}
@Override
public String getKeyword() {
return "";
}
@Override
public void setDirty(boolean dirty) {
if (isDirty == dirty) {
return;
}
isDirty = dirty;
}
@Override
public boolean isInActive() {
return false;
}
@Override
public boolean isError() {
// dummy implements
return false;
}
@Override
public Object clone() {
String[] cloneParts = new String[parts.length];
System.arraycopy(parts, 0, cloneParts, 0, parts.length);
Term ret = new Term(cloneParts);
return ret;
}
/*
* プロパティビュー対応でICoronaDicにIPropertySourceをextendsしたので、
* 空のメソッド群を追加
*/
@Override
public Object getEditableValue() {
return null;
}
@Override
public IPropertyDescriptor[] getPropertyDescriptors() {
return null;
}
@Override
public Object getPropertyValue(Object id) {
return null;
}
@Override
public boolean isPropertySet(Object id) {
return false;
}
@Override
public void resetPropertyValue(Object id) {
}
@Override
public void setPropertyValue(Object id, Object value) {
}
}