/*
* 文件名:Target2Label.java
* 版权:Copyright 2008-20012 复旦大学 All Rights Reserved.
* 修改人:xpqiu
* 修改时间:2009 Sep 2, 2009 6:54:46 PM
* 修改内容:新增
*
* 修改人:〈修改人〉
* 修改时间:YYYY-MM-DD
* 修改内容:〈修改内容〉
*/
package edu.fudan.nlp.pipe;
import java.io.Serializable;
import java.util.List;
import edu.fudan.ml.types.Instance;
import edu.fudan.ml.types.alphabet.LabelAlphabet;
import edu.fudan.util.exception.UnsupportedDataTypeException;
/**
* 将目标值对应的索引号作为类别
*
* @author xpqiu
* @version 1.0 Target2Label
*/
public class Target2Label extends Pipe implements Serializable {
private static final long serialVersionUID = -4270981148181730985L;
private LabelAlphabet labelAlphabet;
public Target2Label(LabelAlphabet labelAlphabet) {
this.labelAlphabet = labelAlphabet;
useTarget = true;
}
@Override
public void addThruPipe(Instance instance) throws UnsupportedDataTypeException {
// 处理类别
// instance.setTempData(instance.getTarget());
Object t = instance.getTarget();
if (t == null)
return;
if (t instanceof String) {
instance.setTarget(labelAlphabet.lookupIndex((String) t));
} else if (t instanceof Object[]) {
Object[] l = (Object[]) t;
int[] newTarget = new int[l.length];
for (int i = 0; i < l.length; ++i)
newTarget[i] = labelAlphabet.lookupIndex((String) l[i]);
instance.setTarget(newTarget);
} else if (t instanceof List) {
List l = (List) t;
int[] newTarget = new int[l.size()];
for (int i = 0; i < l.size(); ++i)
newTarget[i] = labelAlphabet.lookupIndex((String) l.get(i));
instance.setTarget(newTarget);
}else{
throw new UnsupportedDataTypeException(t.getClass().toString());
}
}
}