1. ホーム
  2. java

[解決済み] スレッド "main" での例外 java.lang.IllegalArgumentException: in は null であってはなりません。

2022-02-10 08:48:47

質問

OpenNLPライブラリのsentencedetectorを使おうとして、以下のコードを書いたのですが、このアドレスに関連する例外が発生しました。 ja-sent.bin というファイルがありますが、このファイルのアドレスがわかりません。

import java.io.*;
import java.net.URL;

import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
public class SentenceDetect 
{

       private SentenceDetectorME sentenceDetector;

        public void init()
        {
            /** Load and initialize the sentence detection model */

            InputStream modelIn = null;
            SentenceModel model = null;

            try {

                modelIn = SentenceDetect.class.getClassLoader().getResourceAsStream("Tokenizer/models/en-sent.bin");
                model = new SentenceModel(modelIn); //*<- line 36*
                }
            catch (IOException e) 
                {
                  e.printStackTrace();
                }
            finally {
                  if (modelIn != null) {
                        try {
                          modelIn.close();
                        }
                        catch (IOException e) {}
                      }
                }

            sentenceDetector = new SentenceDetectorME(model);

        }

        public String[] getSentences(String longSentence)
        {
            return sentenceDetector.sentDetect(longSentence);
        }

}

Mainクラスです。

public static void main(String[] args)
    {

       SentenceDetect d = new SentenceDetect();


       d.init();   ///*<- line 10*

       String[] s = d.getSentences("This is sentence #1. This is Sentence #2");

       System.out.println( s[0] );  // Should be the first sentence

       System.out.println( s[1] );  // Should be the second sentence

    }

次の画像は、私のプロジェクトを階層的に示しています(Ubuntuを使用していますが、ここで印刷画面のボタンを使用することを知らないので、画像について申し訳ありません)。

エラーの全体像が

`Exception in thread "main" java.lang.IllegalArgumentException: in must not be null!
at opennlp.tools.util.model.BaseModel.<init>(BaseModel.java:179)
at opennlp.tools.sentdetect.SentenceModel.<init>(SentenceModel.java:95)
at SentenceDetect.init(SentenceDetect.java:36)
at Main.main(Main.java:10)`

これらのパスを試してみましたが、同じエラーが発生しました。

  • /Tokenizer/models/ja-sent.bin
  • /models/ja-sent.bin
  • モデル/ja-sent.bin
  • /home/suri/workspace/2/Tokenizer/models/en-sent.bin

解決方法は?

へのパスを変更する必要があります。

 .getResourceAsStream("en-sent.bin");

getResourceAsStreamはパッケージを読み込むので、これらのファイル(.bin)はソースフォルダ内にあります。