package edu.stanford.nlp.patterns;
import edu.stanford.nlp.ling.CoreLabel;
import edu.stanford.nlp.patterns.dep.DepPattern;
import edu.stanford.nlp.patterns.dep.DepPatternFactory;
import edu.stanford.nlp.patterns.surface.SurfacePattern;
import edu.stanford.nlp.patterns.surface.SurfacePatternFactory;
import edu.stanford.nlp.patterns.surface.Token;
import edu.stanford.nlp.util.CollectionValuedMap;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* An abstract class to represent a Pattern. Currently only surface patterns are implemented.
* In future, dependency patterns shd be implemented too.
*
* @Author Sonal Gupta @sonalg.
*/
public abstract class Pattern implements Serializable{
public PatternFactory.PatternType type;
public Pattern(PatternFactory.PatternType type){
this.type = type;
}
public static boolean sameGenre(PatternFactory.PatternType patternClass, Pattern p1, Pattern p2){
if(patternClass.equals(PatternFactory.PatternType.SURFACE))
return SurfacePattern.sameGenre((SurfacePattern) p1, (SurfacePattern) p2);
else if(patternClass.equals(PatternFactory.PatternType.DEP))
return DepPattern.sameGenre((DepPattern) p1, (DepPattern) p2);
else
throw new UnsupportedOperationException();
}
public abstract edu.stanford.nlp.util.CollectionValuedMap<String, String> getRelevantWords();
public static boolean subsumes(PatternFactory.PatternType patternClass, Pattern pat, Pattern p) {
if(patternClass.equals(PatternFactory.PatternType.SURFACE))
return SurfacePattern.subsumes((SurfacePattern)pat, (SurfacePattern)p);
else if(patternClass.equals(PatternFactory.PatternType.DEP))
return DepPattern.subsumes((DepPattern)pat, (DepPattern)p);
else
throw new UnsupportedOperationException();
}
public abstract int equalContext(Pattern p);
public abstract String toStringSimple();
/** Get set of patterns around this token.*/
public static Set getContext(PatternFactory.PatternType patternClass, DataInstance sent, int i, Set<CandidatePhrase> stopWords) {
if(patternClass.equals(PatternFactory.PatternType.SURFACE))
return SurfacePatternFactory.getContext(sent.getTokens(), i, stopWords);
else
return DepPatternFactory.getContext(sent, i, stopWords);
}
public abstract String toString(List<String> notAllowedClasses);
static protected void getRelevantWordsBase(Token[] t, CollectionValuedMap<String, String> relWords){
if (t != null)
for (Token s : t) {
Map<String, String> str = s.classORRestrictionsAsString();
if (str != null){
relWords.addAll(str);
}
}
}
static protected void getRelevantWordsBase(Token t, CollectionValuedMap<String, String> relWords){
if (t != null) {
Map<String, String> str = t.classORRestrictionsAsString();
if (str != null) {
relWords.addAll(str);
}
}
}
}