/**
*
*/
package edu.berkeley.nlp.PCFGLA;
/**
* @author petrov
*
*/
public class HyperEdge{
int parentState, lChildState, rChildState, childState;
boolean isUnary;
double score, ruleScore;
int start, split, end;
int parentBest, lChildBest, rChildBest, childBest;
boolean alreadyExpanded;
public HyperEdge(int pState, int lState, int rState, int pBest, int lBest,
int rBest, int begin, int mid, int finale, double cost, double ruleCost){
this.parentState = pState;
this.lChildState = lState;
this.rChildState = rState;
this.parentBest = pBest;
this.lChildBest = lBest;
this.rChildBest = rBest;
this.childState = -1;
this.start = begin;
this.split = mid;
this.end = finale;
this.score = cost;
this.isUnary = false;
this.ruleScore = ruleCost;
}
public HyperEdge(int pState, int cState, int pBest, int cBest,
int begin, int finale, double cost, double ruleCost){
this.parentState = pState;
this.childState = cState;
this.lChildState = -1;
this.rChildState = -1;
this.parentBest = pBest;
this.childBest = cBest;
this.start = begin;
this.end = finale;
this.score = cost;
this.isUnary = true;
this.ruleScore = ruleCost;
}
public boolean differsInPOSatMost(HyperEdge other, boolean[] grammarTags){
// assume the edges go over the same span and have the same head
if (this.split!=other.split) return false;
// if (this.score==other.score)
// return true;
if (this.isUnary){
if (/*this.score==other.score*/this.childBest==other.childBest&&other.childState==this.childState) return true;
} else {
if (this.end-this.split==1 && this.lChildState==other.lChildState&& /*this.score==other.score*/this.lChildBest==other.lChildBest&&!grammarTags[this.rChildState]&&!grammarTags[other.rChildState]) return true;
if (this.split-this.start==1&& this.rChildState==other.rChildState&& /*this.score==other.score*/this.rChildBest==other.rChildBest) return true;
if (this.lChildState==other.lChildState&& this.rChildState==other.rChildState&& /*this.score==other.score*/this.rChildBest==other.rChildBest&&this.lChildBest==other.lChildBest&&!grammarTags[this.lChildState]&&!grammarTags[other.lChildState]) return true;
}
return false;
}
}