2016-12-07 81 views
1

我一直遇到這樣的錯誤:StanfordNLP OpenIE 4錯誤

我跑了OpenIE 4.1二進制,但得到了以下錯誤:

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) 

我擡頭幾個來源,發現評論楊瑞過去也有這個問題。但是沒有解決方案。我檢查了我的openie.4.1.jar文件和com.googlecode.clearnlp.tokenization.EnglishTokenizer.protectEmoticon的存在。

希望有人可以幫助解決這個問題。先謝謝你。

+0

只要指出斯坦福OpenIE和OpenIE 4是不同的項目。它看起來像是ClearNLP的標記器中的根本問題?也許在將文本傳入OpenIE 4之前嘗試預處理表情符號? –

回答

1

我已經設法解決這個錯誤。問題在於編譯從官方網站下載的OpenIE 4.0 JAR和OpenIE 4.1 JAR文件。 (http://knowitall.github.io/openie/)。

如何解決?自己編譯這些類。

  1. 轉到https://github.com/knowitall/openie/releases
  2. 選擇一種釋放。 (我選擇了4.1.3)
  3. 下載壓縮文件並解壓縮文件。
  4. 使用終端並重定向到文件夾目錄。
  5. 運行'sbt包',它將開始編譯。
  6. 您最終的JAR文件將在找到目標文件夾/斯卡拉2.10/{openie具組件VERSION.jar}

注:有可能是你需要對你的代碼的一些變化,如果你正在運行OpenIE作爲依賴項。測試代碼如下:

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()); 
    } 

我希望這將有助於未來的人。