我尝试使用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);
}
}
主要课程:
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)`
我试过这些路径,但我得到了同样的错误:
答案 0 :(得分:1)
您需要将路径更改为
.getResourceAsStream("en-sent.bin");
由于getResourceAsStream读取包,因此这些文件(.bin)位于源文件夹中。
答案 1 :(得分:0)
更改
.getResourceAsStream("Tokenizer/models/en-sent.bin");
到
.getResourceAsStream("models/en-sent.bin");
你有&#34; Tokenizer&#34;在路径中,这是你的项目的名称,这是无关紧要的,所以你只需删除那一点! :)
答案 2 :(得分:0)
由于您正在使用getClassLoader().getResourceAsStream()
,因此该文件必须位于您的类路径中。右键单击&#34;模型&#34; eclipse中的文件夹&#34;构建路径&#34; - &GT; &#34;用作源文件夹&#34;。然后确保您的路径与文件夹结构匹配。如果你保留照片中的内容,那就是&#34; models / en-sent.bin&#34;。
如果您希望这些.bin
文件通常位于构建的.jar
文件之外,则应使用构造FileInputStream
代替可以采用绝对文件系统路径的文件。