Статус HTTP 500 - javax.servlet.ServletException: java.lang.NoClassDefFoundError: edu / stanford / nlp / tagger / maxent / MaxentTagger

Я пытаюсь пометить свой запрос POS в jsp. когда я запускаю его как java-приложение, он работает нормально, но когда я запускаю его как jsp, я получаю следующее исключение.

org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: edu/stanford/nlp/tagger/maxent/MaxentTagger
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:548)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:454)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52

Мой код jsp приведен ниже.

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>welcome</h1>
<%@ page import="Search.SearchMain" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<% 
    List<String> res =new ArrayList<String>();
    String q = request.getParameter("sqry");
    res = SearchMain.search(q,1);
    for(String r : res){%>
        <%=r%>
    <%}
%>
</body>
</html>

Мой код Java приведен ниже

package taggerPOS;

import java.util.ArrayList;
import java.util.List;

import edu.stanford.nlp.ling.HasWord;
import edu.stanford.nlp.ling.Sentence;
import edu.stanford.nlp.ling.TaggedWord;
import edu.stanford.nlp.tagger.maxent.MaxentTagger;

public class Tagger {
    public static List<String> getTag(String query){
        List<String> nouns = new ArrayList<String>();
        MaxentTagger tagger = new MaxentTagger("tagger/english-left3words-distsim.tagger");
        String[] tokens = query.split("\\s+");
        List<HasWord> sent = Sentence.toWordList(tokens);
        List<TaggedWord> taggedSent = tagger.tagSentence(sent);
        //System.out.println(taggedSent);
        for (TaggedWord tw : taggedSent) {
              if (tw.tag().startsWith("NN")) {
                //System.out.println(tw.word());
                nouns.add(tw.word());
              }
            } 
        return nouns;
    }
    public static void main(String args[]){
        List<String> n = getTag("This sentence contains two noun phrases");
        for(String a:n){
            System.out.println(a);
        }
    }
}

Я добавил Stanford-POStagger.jar в путь к классу, также добавлена ​​модель tagger. Это структура моего проекта


person Nishanth Jayaram    schedule 23.03.2016    source источник


Ответы (1)


Попробуйте добавить свои банки в папку / WEB-INF / lib, чтобы tomcat мог их найти

(как упоминалось здесь: java.lang.NoClassDefFoundError: org / apache / commons / discovery / tools / DiscoverSingleton)

person Marko Jurisic    schedule 23.03.2016
comment
Спасибо. Эта ошибка решена, но я получаю еще одну ошибку :-( HTTP Status 500 - edu.stanford.nlp.io.RuntimeIOException: Ошибка при загрузке модели tagger (возможно, отсутствует файл модели). Org.apache.jasper.JasperException: edu.stanford.nlp.io.RuntimeIOException: ошибка при загрузке модели tagger (возможно, отсутствует файл модели) org.apache.jasper.servlet.JspServletWrapper.handleJspException (JspServletWrapper.java:548) org.apche.jasper.servlet.JspServlet. служба (JspServletWrapper.java:469) org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet.java:396) - person Nishanth Jayaram; 23.03.2016
comment
Я предполагаю, что ваш файл tagger не находится в пути к классам, проверьте, правильно ли он упакован и развернут на сервере (все файлы, на которые ссылаются пути к классам, должны находиться в / WEB-INF / classes) - person Marko Jurisic; 24.03.2016