Estoy tratando de usar el kit de herramientas de Stanford Corenlp para anotar un texto. Intenté usar el código proporcionado aquí: http://stanfordnlp.github.io/CoreNLP/ y funciona bien. El problema es cuando quiero utilizar la herramienta de resolución de co-referencia incluida en el kit de herramientas coreNLP . No funciona. Usé el código que fue publicado por Stanford nlp group. el código está aquí abajo:

public class CorefExample {

  public static void main(String[] args) throws Exception {

  Annotation document = new Annotation("Barack Obama was born in Hawaii. He is the president. Obama was elected in 2008.");

  Properties props = new Properties();
  props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner,parse,mention,coref");
  StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
  pipeline.annotate(document);
  System.out.println("---");
  System.out.println("coref chains");
  for (CorefChain cc : document.get(CorefCoreAnnotations.CorefChainAnnotation.class).values())          {     
     System.out.println("\t"+cc);
  }
  for (CoreMap sentence : document.get(CoreAnnotations.SentencesAnnotation.class))
  {
    System.out.println("---");
    System.out.println("mentions");
    for (Mention m : sentence.get(CorefCoreAnnotations.CorefMentionsAnnotation.class)) {
      System.out.println("\t"+m);
     }
   }
  }
}

Pero cuando quiero ejecutar estos códigos, obtengo un valor nulo, esta línea: " frase.get (CorefCoreAnnotations.CorefMentionsAnnotation.class) " siempre devuelve nulo , aunque estoy seguro de que el kit de herramientas tiene menciones de referencia anotadas. Realmente me confundí. ¿cuál es la solución? ¿Cómo puedo recibir la anotación de Coref en código Java?

2
Elmira Khodaee 27 ene. 2016 a las 19:28

2 respuestas

La mejor respuesta

Si ejecuto el código de muestra en la página de coref con el último stanford-corenlp-3.6.0.jar, se ejecuta hasta su finalización, por lo que no veo el problema nulo del que está hablando.

Asegúrese de utilizar el último jar disponible en el sitio web, versión 3.6.0

Actualizar:

Si corta y pega el código en esta página:

http://stanfordnlp.github.io/CoreNLP/coref.html

Y poner en un archivo llamado CorefExample.java y luego hacer:

javac -cp "stanford-corenlp-full-2015-12-09/*" CorefExample.java
java -cp "stanford-corenlp-full-2015-12-09/*:." CorefExample

Debería ver las menciones impresas.

Hemos actualizado la distribución, así que también asegúrese de haberla descargado recientemente.

Si todavía tiene problemas, tendremos que averiguar qué es diferente de lo que acabo de describir y su configuración. Simplemente corté y pegué el código y lo ejecuté como se describe arriba y veo las menciones impresas (incluso agregué una oración sin menciones al texto de muestra) y obtengo una lista con las menciones (o lista vacía). Por lo tanto, no debería obtener un valor nulo si está usando ese código exacto con el último jar.

Sería útil saber cómo está ejecutando el código para que podamos ver cuál es la diferencia.

1
StanfordNLPHelp 28 ene. 2016 a las 08:53

Tuve el mismo problema con la versión 3.7.0, mientras usaba la resolución de correferencia con el parámetro " dcoref " (enfoque determinista) en lugar de " coref ". No estoy seguro de qué paquetes estaba importando mientras realizaba la resolución de correferencia y experimentaba el error (no mencionado en el fragmento de código anterior), pero supongo que los mencionados en este código de ejemplo.

En mi caso, incluí los paquetes manualmente y no los copié del ejemplo. Por lo tanto, Intellij propuso que use

import edu.stanford.nlp.coref.CorefCoreAnnotations;
import edu.stanford.nlp.coref.data.CorefChain;

Como en el ejemplo,

O:

import edu.stanford.nlp.dcoref.CorefChain;
import edu.stanford.nlp.dcoref.CorefCoreAnnotations;

Elegí la segunda opción y esto creó el error nulo para mí. En realidad, no solo sentence.get(CorefCoreAnnotations.CorefMentionsAnnotation.class) fue nulo, sino document.get(CorefCoreAnnotations.CorefChainAnnotation.class) también.

0
KLaz 7 abr. 2017 a las 16:35