3 import java.io.IOException;
4 import java.util.ArrayList;
6 import java.util.logging.Logger;
8 import edu.stanford.nlp.ie.crf.CRFClassifier;
9 import edu.stanford.nlp.ling.CoreLabel;
10 import edu.stanford.nlp.util.Triple;
12 /** https://stanfordnlp.github.io/CoreNLP/api.html */
14 private static final String CLASS_NAME = NER.class.getName();
15 private static final Logger LOG = Logger.getLogger(CLASS_NAME);
16 private static final ThreadLocal<CRFClassifier<CoreLabel>> classifier = new ThreadLocal<CRFClassifier<CoreLabel>>() {
18 protected CRFClassifier<CoreLabel> initialValue() {
19 return CRFClassifier.getDefaultClassifier();
23 public static List<String> classify(String str, List<String> entities) throws ClassCastException, ClassNotFoundException, IOException {
25 List<Triple<String, Integer, Integer>> triples;
27 final String FUNCTION_NAME = "classify";
29 LOG.entering(CLASS_NAME, FUNCTION_NAME, str);
31 OpenNLP.classify(str, entities);
33 synchronized (classifier) {
34 triples = classifier.get().classifyToCharacterOffsets(str);
35 for (Triple<String, Integer, Integer> t: triples) {
36 w = str.substring(t.second, t.third);
37 if (!entities.contains(w))
42 entities.remove("CNET");
43 entities.remove("Read More");
44 entities.remove("New");
45 entities.remove("App");
47 LOG.exiting(CLASS_NAME, FUNCTION_NAME, entities);
52 public static void main(String[] args) throws Exception {
55 lst = classify("I live in Washington and New York in United States.", new ArrayList<>());
57 System.out.println(str);