Я использую CoreNLP для извлечения именованных сущностей и столкнулся с небольшой проблемой. Проблема заключается в том, что всякий раз, когда именованная сущность состоит из более чем одного токена, например «Хан Соло», аннотатор возвращает «Хан Соло» не как одну именованную сущность, а как две отдельные сущности: «Хан» «Соло». .
Можно ли получить названный объект как один токен? Я знаю, что могу использовать CRFClassifier с classifyWithInlineXML до такой степени, но мое решение требует, чтобы я использовал CoreNLP, поскольку мне также нужно знать номер слова.
Вот код, который у меня есть на данный момент:
Properties props = new Properties();
props.put("annotators", "tokenize,ssplit,pos,lemma,ner,parse");
props.setProperty("ner.model", "edu/stanford/nlp/models/ner/english.conll.4class.distsim.crf.ser.gz");
pipeline = new StanfordCoreNLP(props);
Annotation document = new Annotation(text);
pipeline.annotate(document);
List<CoreMap> sentences = document.get(SentencesAnnotation.class);
for (CoreMap sentence : sentences) {
for (CoreLabel token : sentence.get(TokensAnnotation.class)) {
System.out.println(token.get(NamedEntityTagAnnotation.class));
}
}
Помогите мне, Оби-Ван Кеноби. Ты моя единственная надежда.