/** 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";
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))