【发布时间】:2015-05-17 09:15:59
【问题描述】:
我正在尝试在 Java servlet 中使用 Stanford POS Tagger。我按照本教程在 J2EE 中创建了动态网页项目,并包含了 jar 文件的构建路径。 http://www.galalaly.me/index.php/2011/05/tagging-text-with-stanford-pos-tagger-in-java-applications/
如果我创建一个单独的 java 文件,我可以让 POS Tagger 工作,如下所示。
public static String tagger(String sample) throws IOException, ClassNotFoundException {
// Initialize the tagger
MaxentTagger tagger = new MaxentTagger("models/english-left3words-distsim.tagger");
// The tagged string
String tagged = tagger.tagString(sample);
// Output the result
return tagged;
}
public static void main(String[] args){
try {
System.out.println(tagger("This is a sample."));
} catch (ClassNotFoundException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这意味着 POS 标记器在我命名为 Taggers.java 的简单 Java 类的主要方法中工作。但是当我尝试在 servlet 中实例化 Tagger.java 类的对象时,我无法让它工作。下面的代码是一个 servlet,我试图在其中实例化 Tagger.java 的对象。
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
try {
out.println(Tagger.tagger("This is a sample sentence."));
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
当我在 tomcat-8 上运行上述 servlet 时,它显示以下异常。
严重:servlet [com.exp.pkg.ExpServlet] 在路径 [/webProj1] 的上下文中的 Servlet.service() 引发异常 [Servlet 执行引发异常],根本原因 java.lang.ClassNotFoundException:edu.stanford.nlp.tagger.maxent.MaxentTagger 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305) 在 org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157) 在 com.exp.pkg.Tagger.tagger(Tagger.java:17) 在 com.exp.pkg.ExpServlet.service(ExpServlet.java:34) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659) 在 org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Unknown Source)
在我设置 classpath=".;..;C:\Users\Faisal\workspace_EE\webProj1\tagger\english-left3words-distim.tagger;C:\stanford-postagger-2015-01-29\ stanford-postagger-2015-01-30\stanford-postagger;C:\apache-tomcat-8\apache-tomcat-8.0.20\lib\servlet-api"
堆栈跟踪如下:
严重:servlet [com.exp.pkg.ExpServlet] 在路径 [/webProj1] 的上下文中的 Servlet.service() 抛出异常 edu.stanford.nlp.io.RuntimeIOException:在 edu 加载标记器模型时出现不可恢复的错误.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:769) 在 edu.stanford.nlp.tagger.maxent.MaxentTagger.(MaxentTagger.java:297) 在 edu.stanford.nlp.tagger.maxent。 MaxentTagger.(MaxentTagger.java:262) 在 com.exp.pkg.Tagger.tagger(Tagger.java:17) 在 com.exp.pkg.ExpServlet.service(ExpServlet.java:34) 在 javax.servlet.http。 HttpServlet.service(HttpServlet.java:725) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org .apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 在 org.apache.catalina.core.Applica org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 上的tionFilterChain.doFilter(ApplicationFilterChain.java:206) .apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve .java:79) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 在 org.apache.catalina.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 在 org.apache.catalina。 connector.CoyoteAdapter.service(CoyoteAdapter.java:516) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659)在 org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandl er.process(Http11NioProtocol.java:223) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run( NioEndpoint.java:1515) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable .run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source) Caused by: java.io.IOException: Unable to resolve "tagger/english-bidirectional-distsim.tagger" as either class path, filename或 edu.stanford.nlp.io.IOUtils.getInputStreamFromURLOrClasspathOrFileSystem(IOUtils.java:463) 上的 URL edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:764) ... 27 更多
【问题讨论】:
-
CoreNLP 类似乎不在您的类路径中。是这样吗?
-
classpath 在 stanford 的网站 nlp.stanford.edu/software/pos-tagger-faq.shtml#api 上进行了解释。按照此链接上的信息,我更新了我的类路径环境。变量看起来像 ".;..;C:\Users\Faisal\workspace_EE\webProj1\tagger\english-left3words-distim.tagger;C:\stanford-postagger-2015-01-29\stanford-postagger-2015- 01-30\stanford-postagger;C:\apache-tomcat-8\apache-tomcat-8.0.20\lib\servlet-api”。这次的错误有点不同,例如“edu.stanford.nlp.io.RuntimeIOException: Unrecoverable error while loading a tagger model”
-
请在您的问题中发布完整的堆栈跟踪。
-
我刚刚在设置类路径后发布了整个堆栈跟踪。
标签: servlets stanford-nlp tomcat8 pos-tagger