servlets - 为什么我在加载 pos tagger 时出错?
问题描述
我正在尝试为 lemma、pos、ner、tokenize 编写代码,但面临许多问题,其中一个问题是这个错误。我该如何解决这个错误?我必须使用 servlet 来完成主要工作,并且我已经在 java 类中编写了管道。请帮助..提前谢谢。
注意-我使用的是斯坦福 corenlp 3.9.2
管道.java
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
import java.util.Properties;
public class Pipeline {
private static Properties properties;
private static String propertiesName = "tokenize, ssplit, pos, lemma, ner, parse, sentiment";
private static StanfordCoreNLP stanfordCoreNLP;
private Pipeline() { }
static {
properties = new Properties();
properties.setProperty("annotators", propertiesName);
}
public static StanfordCoreNLP getPipeline() {
if(stanfordCoreNLP == null) {
stanfordCoreNLP = new StanfordCoreNLP(properties);
}
return stanfordCoreNLP;
}
}
Preprocessing_UserContent.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import edu.stanford.nlp.ling.CoreLabel;
import edu.stanford.nlp.pipeline.CoreDocument;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
import javax.servlet.annotation.WebServlet;
@WebServlet("/Preprocessing_UserContent")
public class Preprocessing_UserContent extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet Preprocessing_UserContent</title>");
out.println("</head>");
out.println("<body>");
StanfordCoreNLP stanfordCoreNLP = Pipeline.getPipeline();
String text = request.getParameter("textblock");
out.println("text");
CoreDocument coreDocument = new CoreDocument(text);
stanfordCoreNLP.annotate(coreDocument);
List<CoreLabel> coreLabelList = coreDocument.tokens();
for(CoreLabel coreLabel : coreLabelList) {
String lemma = coreLabel.lemma();
out.println(coreLabel.originalText() + " = "+ lemma);
}
out.println("</body>");
out.println("</html>");
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
这个错误有什么解决办法吗?
04-Oct-2020 21:10:31.630 SEVERE [http-nio-8080-exec-207] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Preprocessing_UserContent] in context with path [/MultiLabelDataClassification] threw exception
edu.stanford.nlp.io.RuntimeIOException: Error while loading a tagger model (probably missing model file)
at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:799)
at edu.stanford.nlp.tagger.maxent.MaxentTagger.<init>(MaxentTagger.java:320)
at edu.stanford.nlp.tagger.maxent.MaxentTagger.<init>(MaxentTagger.java:273)
at edu.stanford.nlp.pipeline.POSTaggerAnnotator.loadModel(POSTaggerAnnotator.java:85)
at edu.stanford.nlp.pipeline.POSTaggerAnnotator.<init>(POSTaggerAnnotator.java:73)
at edu.stanford.nlp.pipeline.AnnotatorImplementations.posTagger(AnnotatorImplementations.java:53)
at edu.stanford.nlp.pipeline.StanfordCoreNLP.lambda$getNamedAnnotators$3(StanfordCoreNLP.java:521)
at edu.stanford.nlp.pipeline.StanfordCoreNLP.lambda$null$30(StanfordCoreNLP.java:602)
at edu.stanford.nlp.util.Lazy$3.compute(Lazy.java:126)
at edu.stanford.nlp.util.Lazy.get(Lazy.java:31)
at edu.stanford.nlp.pipeline.AnnotatorPool.get(AnnotatorPool.java:149)
at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:251)
at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:192)
at edu.stanford.nlp.pipeline.StanfordCoreNLP.<init>(StanfordCoreNLP.java:188)
at Pipeline.getPipeline(Pipeline.java:32)
at Preprocessing_UserContent.processRequest(Preprocessing_UserContent.java:28)
at Preprocessing_UserContent.doPost(Preprocessing_UserContent.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:835)
Caused by: java.io.IOException: Unable to open "edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger" as class path, filename or URL
at edu.stanford.nlp.io.IOUtils.getInputStreamFromURLOrClasspathOrFileSystem(IOUtils.java:480)
at edu.stanford.nlp.tagger.maxent.MaxentTagger.readModelAndInit(MaxentTagger.java:796)
... 40 more
解决方案
推荐阅读
- r - 如何安排将数据存储在 SQL 中以每周运行的 R 网络爬虫脚本?
- coq - 是否有任何策略可以处理带有“和”的先决条件?
- sas - 在 SAS 中:如何按组合并行中的非零值
- javascript - 使用 jQuery 控制元素高度 - 为什么这不起作用?
- react-native - 运行 expo start 时如何禁用在浏览器中打开 DevTools?
- c++ - OpenGL & Qt:在鼠标悬停时显示标签
- java - 强制某人仅使用工厂来创建对象
- java - 在什么情况下 OS/CPU 在实践中不会产生非易失性 Java 变量的最终一致性?
- c# - 为什么我不能在 .cshtml/razor 页面上显示数据?
- jquery - 显示/隐藏 div 点击链接 jquery