package edu.stanford.nlp.pipeline; import edu.stanford.nlp.ling.CoreAnnotation; import java.util.*; /** * A set of annotator implementations, backed by the server * ({@link StanfordCoreNLPServer}). * * @author <a href="mailto:gabor@eloquent.ai">Gabor Angeli</a> */ public class ServerAnnotatorImplementations extends AnnotatorImplementations { /** * The hostname of the server to hit */ public final String host; /** * The port to hit on the server */ public final int port; /** * The key to use as the username to authenticate with the server, or null. */ public final String key; /** * The secret key to use as the username to authenticate with the server, or null. */ public final String secret; /** * If false, run many common annotations when we hit the server the first time. */ public final boolean lazy; /** * Create a new annotator implementation backed by {@link StanfordCoreNLPServer}. * * @param host The hostname of the server. * @param port The port of the server. */ public ServerAnnotatorImplementations(String host, int port, String key, String secret, boolean lazy) { this.host = host; this.port = port; this.key = key; this.secret = secret; this.lazy = lazy; } /** * Create a new annotator implementation backed by {@link StanfordCoreNLPServer}. * * @param host The hostname of the server. * @param port The port of the server. */ public ServerAnnotatorImplementations(String host, int port) { this(host, port, null, null, false); } /** * */ private class SingletonAnnotator implements Annotator { private final StanfordCoreNLPClient client; public SingletonAnnotator(String host, int port, Properties properties, String annotator) { Properties forClient = new Properties(); for (Object o : properties.keySet()) { String key = o.toString(); String value = properties.getProperty(key); forClient.setProperty(key, value); forClient.setProperty(annotator + '.' + key, value); } if (lazy) { forClient.setProperty("annotators", annotator); forClient.setProperty("enforceRequirements", "false"); } else { String annotators = "tokenize,ssplit,pos,lemma,ner,parse,mention,coref,natlog,openie,sentiment"; if (!annotators.contains(annotator)) { annotators += "," + annotator; } forClient.setProperty("annotators", annotators); } this.client = new StanfordCoreNLPClient(forClient, host, port, key, secret); } @Override public void annotate(Annotation annotation) { client.annotate(annotation); } @Override public Set<Class<? extends CoreAnnotation>> requirementsSatisfied() { return Collections.emptySet(); } @Override public Set<Class<? extends CoreAnnotation>> requires() { return Collections.emptySet(); } } /** {@inheritDoc} */ @Override public Annotator posTagger(Properties properties) { return new SingletonAnnotator(host, port, properties, Annotator.STANFORD_POS); } /** {@inheritDoc} */ @Override public Annotator ner(Properties properties) { return new SingletonAnnotator(host, port, properties, Annotator.STANFORD_NER); } /** {@inheritDoc} */ @Override public Annotator tokensRegexNER(Properties properties, String name) { return new SingletonAnnotator(host, port, properties, Annotator.STANFORD_REGEXNER); } /** {@inheritDoc} */ @Override public Annotator gender(Properties properties, boolean verbose) { return new SingletonAnnotator(host, port, properties, Annotator.STANFORD_GENDER); } /** {@inheritDoc} */ @Override public Annotator parse(Properties properties) { return new SingletonAnnotator(host, port, properties, Annotator.STANFORD_PARSE); } /** {@inheritDoc} */ @Override public Annotator trueCase(Properties properties) { return new SingletonAnnotator(host, port, properties, Annotator.STANFORD_TRUECASE); } /** {@inheritDoc} */ @Override public Annotator mention(Properties properties) { return new SingletonAnnotator(host, port, properties, Annotator.STANFORD_MENTION); } /** {@inheritDoc} */ @Override public Annotator coref(Properties properties) { return new SingletonAnnotator(host, port, properties, Annotator.STANFORD_COREF); } /** {@inheritDoc} */ @Override public Annotator dcoref(Properties properties) { return new SingletonAnnotator(host, port, properties, Annotator.STANFORD_DETERMINISTIC_COREF); } /** {@inheritDoc} */ @Override public Annotator relations(Properties properties) { return new SingletonAnnotator(host, port, properties, Annotator.STANFORD_RELATION); } /** {@inheritDoc} */ @Override public Annotator sentiment(Properties properties, String name) { return new SingletonAnnotator(host, port, properties, Annotator.STANFORD_SENTIMENT); } /** {@inheritDoc} */ @Override public Annotator dependencies(Properties properties) { return new SingletonAnnotator(host, port, properties, Annotator.STANFORD_DEPENDENCIES); } /** {@inheritDoc} */ @Override public Annotator openie(Properties properties) { return new SingletonAnnotator(host, port, properties, Annotator.STANFORD_OPENIE); } /** {@inheritDoc} */ @Override public Annotator kbp(Properties properties) { return new SingletonAnnotator(host, port, properties, Annotator.STANFORD_KBP); } /** {@inheritDoc} */ @Override public Annotator link(Properties properties) { return new SingletonAnnotator(host, port, properties, Annotator.STANFORD_LINK); } }