package ruc.irm.similarity.sentence.editdistance; import ruc.irm.similarity.sentence.SegmentProxy.Word; import ruc.irm.similarity.word.hownet2.concept.XiaConceptParser; public class WordEditUnit extends EditUnit { private Word word = null; public WordEditUnit(Word word){ this.word = word; } public String getUnitString() { return word.getWord(); } /** * 根据此语的相似度获取替换代价 */ @Override public double getSubstitutionCost(EditUnit otherUnit){ if(!(otherUnit instanceof WordEditUnit)) return 1.0; if(equals(otherUnit)) return 0.0; WordEditUnit other = (WordEditUnit)otherUnit; //词性不同,直接返回1.0 if(word.getPos()!=other.word.getPos()){ return 1.0; } return 1 - XiaConceptParser.getInstance().getSimilarity(getUnitString(), other.getUnitString()); } @Override public boolean equals(Object other){ if(!(other instanceof WordEditUnit)) return false; WordEditUnit otherUnit = (WordEditUnit)other; Word otherWord = otherUnit.word; //词性不同,直接返回1.0 if(word.getPos()!=otherWord.getPos()){ return false; } double sim = XiaConceptParser.getInstance().getSimilarity(getUnitString(), otherUnit.getUnitString()); return sim>0.85; } }