package edu.stanford.nlp.semgraph.semgrex;
import edu.stanford.nlp.ling.CoreAnnotations;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
import edu.stanford.nlp.semgraph.SemanticGraph;
import edu.stanford.nlp.semgraph.SemanticGraphCoreAnnotations;
import edu.stanford.nlp.util.CoreMap;
import junit.framework.TestCase;
import org.junit.Test;
import java.util.Properties;
/**
* Created by sonalg on 7/15/14.
*/
public class SemgrexPatternITest extends TestCase {
@Test
public void testNERStanfordDependencies() throws Exception{
String sentence = "John lives in Washington.";
Properties props = new Properties();
props.setProperty("annotators","tokenize, ssplit, pos, lemma, ner, parse");
props.setProperty("parse.originalDependencies", "true");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
Annotation doc = new Annotation(sentence);
pipeline.annotate(doc);
CoreMap sent = doc.get(CoreAnnotations.SentencesAnnotation.class).get(0);
SemanticGraph graph = sent.get(SemanticGraphCoreAnnotations.CollapsedCCProcessedDependenciesAnnotation.class);
graph.prettyPrint();
String patStr = "({word:/lives/} >/prep_in/ {word:/\\QCalifornia\\E|\\QWashington\\E/} >nsubj {ner:PERSON})";
SemgrexPattern pat = SemgrexPattern.compile(patStr);
SemgrexMatcher mat = pat.matcher(graph, true);
assertTrue(mat.find());
}
@Test
public void testNERUniversalDependencies() throws Exception{
String sentence = "John lives in Washington.";
Properties props = new Properties();
props.setProperty("annotators","tokenize, ssplit, pos, lemma, ner, parse");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
props.setProperty("parse.originalDependencies", "false");
Annotation doc = new Annotation(sentence);
pipeline.annotate(doc);
CoreMap sent = doc.get(CoreAnnotations.SentencesAnnotation.class).get(0);
SemanticGraph graph = sent.get(SemanticGraphCoreAnnotations.CollapsedCCProcessedDependenciesAnnotation.class);
graph.prettyPrint();
String patStr = "({word:/lives/} >/nmod:in/ {word:/\\QCalifornia\\E|\\QWashington\\E/} >nsubj {ner:PERSON})";
SemgrexPattern pat = SemgrexPattern.compile(patStr);
SemgrexMatcher mat = pat.matcher(graph, true);
assertTrue(mat.find());
}
}