2016-12-07 1 views
1

Ich habe Begegnung mit diesen Fehler:StanfordNLP OpenIE 4 Fehler

lief ich die OpenIE 4.1 binäre bekam aber den folgenden Fehler:

Exception in thread "main" java.lang.NullPointerException at 
com.googlecode.clearnlp.tokenization.EnglishTokenizer.protec‌​tEmoticons 
(EnglishTokenizer.java:335) at 
com.googlecode.clearnlp.tokenization.EnglishTokenizer.getTok‌​enList(En 
glishTokenizer.java:109) at 
com.googlecode.clearnlp.tokenization.AbstractTokenizer.getTo‌​kens(AbstractTokenizer.java:58) at 
edu.knowitall.tool.tokenize.ClearTokenizer.tokenize(ClearTok‌​enizer.sc ala:22) 

Ich habe ein paar Quellen nachgeschlagen und fand einen Kommentar von Yangrui, der dieses Problem in der Vergangenheit hatte. Aber es gibt keine Lösungen. Ich habe meine openie.4.1.jar-Datei überprüft und das com.googlecode.clearnlp.tokenization.EnglishTokenizer.protectEmoticon existiert.

Hoffe jemand kann helfen, etwas Licht auf dieses zu werfen. Vielen Dank im Voraus.

+0

Nur darauf hingewiesen, dass Stanford OpenIE und OpenIE 4 verschiedene Projekte sind. Es scheint, dass das zugrunde liegende Problem in ClearNLP Tokenizer ist? Vielleicht versuchen Sie Emoticons vorverarbeiten, bevor Sie den Text in OpenIE 4 übergeben? –

Antwort

1

Ich habe es geschafft, diesen Fehler zu lösen. Das Problem liegt in der Erstellung der JAR-Dateien OpenIE 4.0 JAR und OpenIE 4.1, die ich von der offiziellen Website heruntergeladen habe. (http://knowitall.github.io/openie/).

Wie lösen? Kompilieren Sie die Klassen selbst.

  1. Zum https://github.com/knowitall/openie/releases
  2. Release wählen. (Ich wählte 4.1.3)
  3. Laden Sie die ZIP-Datei herunter und entpacken Sie die Datei.
  4. Verwenden Sie Terminal und Redirect zum Ordnerverzeichnis.
  5. Run 'sbt-Paket' und es beginnt mit der Kompilierung.
  6. Ihre letzte JAR-Datei gefunden wird in den Zielordner/scala-2.10/{openie-Montage-VERSION.jar}

Hinweis: Es könnte einige Änderungen geben Sie brauchen, um Ihren Code zu machen, wenn Sie betreiben OpenIE als Abhängigkeit. Der Code für den Test ist wie folgt:

OpenIE openIE = new OpenIE(new ClearParser(new ClearPostagger(new ClearTokenizer())), new ClearSrl(), false, false); 

    Seq<Instance> extractions = openIE.extract("Obama is the president of the United States"); 
    Iterator<Instance> iterator = extractions.iterator(); 
    while (iterator.hasNext()) { 
     Instance inst = iterator.next(); 
     StringBuilder sb = new StringBuilder(); 
     sb.append(inst.confidence()).append("\t\t") 
     .append(inst.extr().arg1().text()).append("\t\t") 
     .append(inst.extr().rel().text()).append("\t\t"); 

     Iterator<Argument> argIter = inst.extr().arg2s().iterator(); 
     while (argIter.hasNext()) { 
      Part arg = argIter.next(); 
      sb.append(arg.text()).append("; "); 
     } 
     System.out.println(sb.toString()); 
    } 

Ich hoffe, dass dies jemand in der Zukunft helfen wird.