假设您使用的是OpenNLP 1.5.3,则应该使用另一种加载资源文件的方式,该方式不通过URI转换使用“硬”路径引用。
给定一个环境,其中
WEB-INF目录中
resources存在另一个包含您的OpenNLP模型文件的目录,您的代码片段应编写如下:
String taggerModelPath = "/WEB-INF/resources/en-pos-maxent.bin";String chunkerModelPath= "/WEB-INF/resources/en-chunker.bin";POSModel model = new POSModelLoader().load(servletContext.getResourceAsStream(taggerModelPath));
有关ServletContext#getResourceAsStream的信息,请参见Javadoc;
重要提示
可悲的是,您的代码还有其他问题。OpenNLP类
POSModelLoader仅供 内部
使用,请参阅POSModelLoader的官方Javadoc :
为命令行工具加载POS Tagger模型。
注意: 请勿使用此类,仅供内部使用!
因此,
POSModel在Web上下文中加载a应该做的不同:通过该类的可用构造函数之一。您可以这样重新编写上面的代码片段:
try { InputStream in = servletContext.getResourceAsStream(taggerModelPath); POSModel posModel; if(in != null) { posModel = new POSModel(in); // from here, <posModel> is initialized and you can start playing with it... // ... } else { // resource file not found - whatever you want to do in this case }}catch (IOException | InvalidFormatException ex) { // proper exception handling here... cause: getResourcesAsStream or OpenNLP...}
这样,您就符合OpenNLP API的要求,同时可以进行适当的异常处理。而且,如果模型文件的资源路径引用仍然不清楚,您现在可以使用调试器。
希望能帮助到你。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)