added openlp support
[pnews.git] / war / src / main / java / pnews / NER.java
1 package pnews;
2
3 import java.io.IOException;
4 import java.util.ArrayList;
5 import java.util.List;
6 import java.util.logging.Logger;
7
8 import edu.stanford.nlp.ie.crf.CRFClassifier;
9 import edu.stanford.nlp.ling.CoreAnnotations.AnswerAnnotation;
10 import edu.stanford.nlp.ling.CoreLabel;
11
12 /** https://stanfordnlp.github.io/CoreNLP/api.html */
13 public class NER {
14         private static final String CLASS_NAME = NER.class.getName();
15         private static final Logger LOG = Logger.getLogger(CLASS_NAME); 
16         
17         public static List<String> classify(String str, List<String> entities) throws ClassCastException, ClassNotFoundException, IOException {
18                 CRFClassifier<CoreLabel> classifier;
19                 List<List<CoreLabel>> out;
20                 String cat, w;
21                 final String FUNCTION_NAME = "classify";                
22                 
23                 LOG.entering(CLASS_NAME, FUNCTION_NAME, str);
24
25                 OpenNLP.classify(str, entities);
26                 
27                 classifier = CRFClassifier.getDefaultClassifier();
28                 out = classifier.classify(str);
29                 
30                 for (List<CoreLabel> labels: out)
31                         for (CoreLabel l: labels) {
32                                 cat = l.getString(AnswerAnnotation.class);
33                                 w = l.word();
34                                 if (!cat.equals("O") && !entities.contains(w))
35                                         entities.add(w);
36                         }
37                 
38                 entities.remove("CNET");
39                 entities.remove("Read More");
40                 entities.remove("New");
41                 entities.remove("App");
42                 
43                 LOG.exiting(CLASS_NAME, FUNCTION_NAME, entities);
44                 
45                 return entities;
46         }
47         
48         public static void main(String[] args) throws Exception {
49                 classify("I live in Washington.", new ArrayList<>());
50         }
51 }