线程 "main" java.lang.IllegalArgumentException 中的异常:in 不能为 null
Exception in thread "main" java.lang.IllegalArgumentException: in must not be null
我尝试使用 OpenNLP 库来使用它的 sentencedetector 我尝试编写以下代码但是我遇到了与此地址相关的异常 en-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);
}
}
主要class:
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/en-sent.bin
- /models/en-sent.bin
- models/en-sent.bin
- /home/suri/workspace/2/Tokenizer/models/en-sent.bin
改变
.getResourceAsStream("Tokenizer/models/en-sent.bin");
到
.getResourceAsStream("models/en-sent.bin");
你的路径中有"Tokenizer"是你项目的名字,这是无关紧要的,所以你把那位去掉! :)
由于您使用的是 getClassLoader().getResourceAsStream()
,该文件必须位于您的类路径中。右击eclipse中的"models"文件夹"build path" -> "use as source folder"。然后确保您的路径与文件夹结构匹配。如果您保留照片中的内容,那就是 "models/en-sent.bin"。
如果您希望这些 .bin
文件通常驻留在您构建的 .jar
文件之外,您应该使用构造一个 FileInputStream
而不是它可以采用绝对文件系统路径。
您需要将路径更改为
.getResourceAsStream("en-sent.bin");
由于 getResourceAsStream 读取了一个包,并且这些文件 (.bin) 在您的源文件夹中。
我尝试使用 OpenNLP 库来使用它的 sentencedetector 我尝试编写以下代码但是我遇到了与此地址相关的异常 en-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);
}
}
主要class:
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/en-sent.bin
- /models/en-sent.bin
- models/en-sent.bin
- /home/suri/workspace/2/Tokenizer/models/en-sent.bin
改变
.getResourceAsStream("Tokenizer/models/en-sent.bin");
到
.getResourceAsStream("models/en-sent.bin");
你的路径中有"Tokenizer"是你项目的名字,这是无关紧要的,所以你把那位去掉! :)
由于您使用的是 getClassLoader().getResourceAsStream()
,该文件必须位于您的类路径中。右击eclipse中的"models"文件夹"build path" -> "use as source folder"。然后确保您的路径与文件夹结构匹配。如果您保留照片中的内容,那就是 "models/en-sent.bin"。
如果您希望这些 .bin
文件通常驻留在您构建的 .jar
文件之外,您应该使用构造一个 FileInputStream
而不是它可以采用绝对文件系统路径。
您需要将路径更改为
.getResourceAsStream("en-sent.bin");
由于 getResourceAsStream 读取了一个包,并且这些文件 (.bin) 在您的源文件夹中。