package edu.stanford.nlp.patterns.dep;
import edu.stanford.nlp.ling.IndexedWord;
import edu.stanford.nlp.patterns.Pattern;
import edu.stanford.nlp.patterns.PatternFactory;
import edu.stanford.nlp.patterns.surface.Token;
import edu.stanford.nlp.semgraph.semgrex.SemgrexPattern;
import edu.stanford.nlp.trees.GrammaticalRelation;
import edu.stanford.nlp.util.CollectionValuedMap;
import edu.stanford.nlp.util.Pair;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* Created by sonalg on 10/31/14.
*/
public class DepPattern extends Pattern {
int hashCode;
List<Pair<Token, GrammaticalRelation>> relations;
public DepPattern(List<Pair<Token, GrammaticalRelation>> relations)
{
super(PatternFactory.PatternType.DEP);
this.relations = relations;
hashCode = this.toString().hashCode();
}
public DepPattern(Token token, GrammaticalRelation relation)
{
super(PatternFactory.PatternType.DEP);
this.relations = new ArrayList<>();
relations.add(new Pair<>(token, relation));
hashCode = this.toString().hashCode();
}
@Override
public CollectionValuedMap<String, String> getRelevantWords() {
CollectionValuedMap<String, String> relwordsThisPat = new CollectionValuedMap<>();
for(Pair<Token, GrammaticalRelation> r: relations)
getRelevantWordsBase(r.first(), relwordsThisPat);
return relwordsThisPat;
}
@Override
public int equalContext(Pattern p) {
return -1;
}
@Override
public String toStringSimple() {
return toString();
}
@Override
public String toString(List<String> notAllowedClasses) {
//TODO: implement this
return toString();
}
@Override
public String toString(){
if(relations.size() > 1)
throw new UnsupportedOperationException();
Pair<Token, GrammaticalRelation> rel = relations.get(0);
//String pattern = "({" + wordType + ":/" + parent + "/}=parent >>" + rel + "=reln {}=node)";
String p = "(" + rel.first().toString() + "=parent >"+rel.second().toString() + "=reln {}=node)";
return p;
}
@Override
public int hashCode(){
return hashCode;
}
@Override
public boolean equals(Object p){
if(! (p instanceof DepPattern))
return false;
return this.toString().equals(((DepPattern)p).toString());
}
//TODO: implement compareTo
//TODO: implement these
public static boolean sameGenre(DepPattern p1, DepPattern p2){
return true;
}
public static boolean subsumes(DepPattern pat, DepPattern p) {
return false;
}
}