do classification in //
authorJean-Philippe Orsini <orsinije@fr.ibm.com>
Thu, 2 Nov 2017 23:16:05 +0000 (00:16 +0100)
committerJean-Philippe Orsini <orsinije@fr.ibm.com>
Thu, 2 Nov 2017 23:16:05 +0000 (00:16 +0100)
war/src/main/java/pnews/NER.java

index 3a6fc82..bcb8951 100644 (file)
@@ -12,10 +12,16 @@ import edu.stanford.nlp.util.Triple;
 /** https://stanfordnlp.github.io/CoreNLP/api.html */
 public class NER {
         private static final String CLASS_NAME = NER.class.getName();
-        private static final Logger LOG = Logger.getLogger(CLASS_NAME); 
+        private static final Logger LOG = Logger.getLogger(CLASS_NAME);
+        private static final ThreadLocal<CRFClassifier<CoreLabel>> classifier = new ThreadLocal<CRFClassifier<CoreLabel>>() {
+                @Override 
+                protected CRFClassifier<CoreLabel> initialValue() {
+                        return CRFClassifier.getDefaultClassifier();
+                }
+        };
         
         public static List<String> classify(String str, List<String> entities) throws ClassCastException, ClassNotFoundException, IOException {
-                final CRFClassifier<CoreLabel> classifier = CRFClassifier.getDefaultClassifier();
+                
                 List<Triple<String, Integer, Integer>> triples;
                 String w;
                 final String FUNCTION_NAME = "classify";                       
@@ -25,7 +31,7 @@ public class NER {
                 OpenNLP.classify(str, entities);
                                 
                 synchronized (classifier) {
-                        triples = classifier.classifyToCharacterOffsets(str);
+                        triples = classifier.get().classifyToCharacterOffsets(str);
                         for (Triple<String, Integer, Integer> t: triples) {
                                 w = str.substring(t.second, t.third);
                                 if (!entities.contains(w))