package edu.fudan.nlp.cn.anaphora;
/**
* 用规则的方法来获取指代对的权重
* @author jszhao
* @version 1.0
* @since FudanNLP 1.5
*/
public class WeightGetter {
private Entity entity;
private Entity pronoun;
public WeightGetter(EntityGroup EntityGroup){
this.entity = EntityGroup.getAhead();
this.pronoun = EntityGroup.getBehind();
}
private Boolean isSub(String str1,String str2){
Boolean bl = true;
for(int i=1;i<str2.length();i++){
bl = bl&&str1.contains(str2.substring(i, i+1));
if(i==1&&!bl){
bl = true;
}
}
return bl;
}
private int roleWeight(){
if(pronoun.getData().equals("他")||pronoun.getData().equals("她")
||pronoun.getData().equals("它")){
if(entity.getGraTag().equals("SUB")
&&pronoun.getGraTag().equals(entity.getGraTag())){
return 4;
}
else if(entity.getDistance()==pronoun.getDistance()&&
entity.getGraTag().equals("OBJ")&&
pronoun.getGraTag().equals("OBJ")){
return 3;
}
else if(entity.getDistance()==pronoun.getDistance()
&&((entity.getGraTag().equals("SUB")
&&pronoun.getGraTag().equals("OBJ"))
||(entity.getGraTag().equals("OBJ")
&&pronoun.getGraTag().equals("SUB")))){
return 1;
}
else if(entity.getDistance()!=pronoun.getDistance()
&&entity.getGraTag().equals("OBJ")
&&pronoun.getGraTag().equals("OBJ")){
return 2;
}
else if(entity.getDistance()!=pronoun.getDistance()
&&((entity.getGraTag().equals("SUB")
&&pronoun.getGraTag().equals("OBJ"))
||(entity.getGraTag().equals("OBJ")
&&pronoun.getGraTag().equals("SUB")))){
return 1;
}
if(entity.getDistance()==pronoun.getDistance()&&
entity.getSubDistance()==pronoun.getSubDistance()&&
!entity.getGraTag().equals("ADJ")&&
!pronoun.getGraTag().equals("ADJ") ){
return -100;
}
return 0;
}
else{
if(this.isSub(entity.getData(), pronoun.getData()))
return 6;
else
return -200;
}
}
private int distanceWeight(){
if(entity.getDistance()==pronoun.getDistance()){
return (pronoun.getSubDistance()-entity.getSubDistance());
}
else
return (pronoun.getDistance()-entity.getDistance())+2;
}
private int sexWeight(){
if(entity.getSex().equals(pronoun.getSex())
&&entity.getSex()!="UNKNOW"){
return 2;
}
else if(entity.getSex()=="UNKNOW"
||pronoun.getSex()=="UNKNOW")
return 0;
else
return -100;
}
private int numWeight(){
if(pronoun.getIsSing().equals("YES")&&
pronoun.getIsSing().equals(entity.getIsSing())){
return 3;
}
else if(pronoun.getIsSing().equals("No")&&
pronoun.getIsSing().equals(entity.getIsSing())){
return 5;
}
else if(entity.getIsSing().equals("UNKONW")||
pronoun.getIsSing().equals("UNKONW"))
return 0;
else
return -100;
}
public int getWeight(){
return (this.numWeight()+this.roleWeight()+this.sexWeight()-this.distanceWeight());
}
}