Получить строку токена из tokenID с помощью Stanford Parser в GATE - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь использовать Java RHS, чтобы получить строковое значение зависимых токенов, используя анализатор зависимостей Stanford в GATE, и добавить их как функции новой аннотации.

У меня проблемы с таргетингом только на функцию «зависимостей» токена и получение строкового значения из tokenID.

Использование ниже указания только «depdencies» также приводит к ошибке нулевого указателя java:

for(Annotation lookupAnn : tokens.inDocumentOrder())
  {
   FeatureMap lookupFeatures  = lookupAnn.getFeatures();
   token = lookupFeatures.get("dependencies").toString();  
  }

Я могу использовать ниже, чтобы получить все функции токена,

gate.Utils.inDocumentOrder

, но он возвращает все функции, включая зависимые идентификаторы tokenID;т.е.:

dependencies = [nsubj(8390), dobj(8394)]

Я бы хотел получить только строковое значение зависимого токена из этих идентификаторов токена.

Есть ли способ получить доступ к зависимому строковому значению токена и добавить их в качестве функции каннотация?

Большое спасибо за помощь

1 Ответ

0 голосов
/ 07 июня 2018

Вот рабочий пример JAPE.Он только печатает в окне сообщений GATE (стандартный вывод), он не создает никаких новых аннотаций с функциями, которые вы просили.Пожалуйста, закончите сами ... Плагин

Stanford_CoreNLP должен быть загружен в GATE, чтобы сделать этот файл JAPE загружаемым.В противном случае вы получите исключение «класс не найден» для класса DependencyRelation.

Imports: {
  import gate.stanford.DependencyRelation;
}

Phase: GetTokenDepsPhase
Input: Token
Options: control = all
Rule: GetTokenDepsRule
(
  {Token}
): token
--> 
:token {
  //note that tokenAnnots contains only a single annotation so the loop could be avoided...
  for (Annotation token : tokenAnnots) {
    Object deps = token.getFeatures().get("dependencies");

    //sometimes the dependencies feature is missing - skip it
    if (deps == null) continue;

    //token.getFeatures().get("string") could be used instead of gate.Utils.stringFor(doc,token)...
    System.out.println("Dependencies for token " + gate.Utils.stringFor(doc, token));

    //the dependencies feature has to be typed to List<DependencyRelation>
    List<DependencyRelation> typedDeps = (List<DependencyRelation>) deps;
    for (DependencyRelation r : typedDeps) {

      //use DependencyRelation.getTargetId() to get the id of the target token
      //use inputAS.get(id) to get the annotation for its id
      Annotation targetToken = inputAS.get(r.getTargetId());

      //use DependencyRelation.getType() to get the dependency type
      System.out.println("  " +r.getType()+ ": " +gate.Utils.stringFor(doc, targetToken));
    }
  }
}
...