Stanford NLP: получение обновленной аннотации для действий в SequenceMatchRules

Я использую правила сопоставления последовательности как часть TokenRegex в библиотеке Stanfords CoreNLP, и у меня возникают некоторые проблемы с получением обновленной аннотации на основе оценки действия в правилах сопоставления.

rule = { type: "CLASS" , value: "edu.stanford.nlp.ling.CoreAnnotations$TokensAnnotation" 

{  
   "ruleType":"tokens",
   "pattern": ( /This/ /should/ /match/ ) ,
   "action": (  Annotate($0, rule, "RetrieveThisValue" ) ),
   "result":"This is the result"
}

Как мне получить значение "RetrieveThisValue" из аннотированной карты ядра. Согласно документам здесь, я бы подумал, что могу получить значение из согласованного выражения CoreMap. Когда я использую что-то вроде matchedexpression.get(0).getAnnotation().get(CoreAnnotations.TokensAnnotation.class).toString(), я получаю поле результатов «Это результат», и я также не получаю «RetrieveThisValue».

Я могу найти «RetrieveThisValue» глубоко в функции извлечения MatchedExpression.

Как мне получить RetrieveThisValue после сопоставления выражения?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
121
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Файл правил: this-should-match.rules

ruleClass = { type: "CLASS", value: "edu.stanford.nlp.ling.CoreAnnotations$GoldAnswerAnnotation" }

{
   "pattern": ( /This/ /should/ /match/ ),
   "action": ( Annotate($0, ruleClass, "this should match!") ),
   "result": "This is the result!"
}

Код:

package edu.stanford.nlp.examples;

import edu.stanford.nlp.util.*;
import edu.stanford.nlp.ling.*;
import edu.stanford.nlp.pipeline.*;

import java.util.*;


public class TokensRegexExampleTwo {

  public static void main(String[] args) {

    // set up properties
    Properties props = new Properties();
    props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner,tokensregex");
    props.setProperty("tokensregex.rules", "this-should-match.rules");
    props.setProperty("tokensregex.caseInsensitive", "true");

    // set up pipeline
    StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

    // set up text to annotate
    Annotation annotation = new Annotation("This should match.");

    // annotate text
    pipeline.annotate(annotation);

    // print out found entities
    for (CoreMap sentence : annotation.get(CoreAnnotations.SentencesAnnotation.class)) {
      for (CoreLabel token : sentence.get(CoreAnnotations.TokensAnnotation.class)) {
        System.out.println(token.word() + "\t" +
            token.get(edu.stanford.nlp.ling.CoreAnnotations.GoldAnswerAnnotation.class));
      }
    }
  }
}

ПРИМЕЧАНИЕ. Я не думаю, что вам следует использовать аннотацию GoldAnswer, вам, вероятно, следует создать новый класс аннотаций для обработки вашего варианта использования. Но я просто использовал это как пример.

Спасибо. Я рассмотрю и при наличии достаточного вознаграждения с ответом.

andor kesselman 09.05.2018 11:01

Другие вопросы по теме