2016-03-23 3 views
0

Ich versuche POS meine Abfrage in JSP zu kennzeichnen. Wenn ich es als eine Java-Anwendung ausführen, funktioniert es gut, aber wenn ich es als JSP ausführen, erhalte ich die folgende Ausnahme.HTTP-Status 500 - javax.servlet.ServletException: java.lang.NoClassDefFoundError: edu/stanford/nlp/tagger/maxent/MaxentTagger

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 

Mein Jsp-Code ist wie folgt.

<%@ 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> 

Mein Java-Code wird unter

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); 
     } 
    } 
} 

gegeben Ich habe Pfad zur Klasse der Stanford-POStagger.jar hinzugefügt und Tagger-Modell wird ebenfalls hinzugefügt. This is my project structure

Antwort

0

Versuchen geben Sie Ihre Gläser zu/WEB-INF/lib Ordner, so können tomcat finden sie

(wie hier erwähnt: java.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton)

+0

Thanks.This Fehler behoben wurde, aber ich bin immer einen anderen Fehler: - (HTTP Status 500 - edu.stanford.nlp.io.RuntimeIOException: Fehler beim Laden eines Tagger-Modells (wahrscheinlich fehlende Modelldatei). Org.apache.jasper.JasperException: edu.stanford.nlp.io.RuntimeIOException: Fehler beim Laden ein Tagger-Modell (wahrscheinlich fehlende Modelldatei) \t org.apache.jasper.servlet.JspServletWrapper.handleJspException (JspServletWrapper.java:548) oder g.apche.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:469) org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet.java:396) –

+0

Ich nehme an, dass Ihre Tagger-Datei nicht im Klassenpfad ist, Überprüfen Sie, ob es korrekt verpackt und auf dem Server bereitgestellt ist (alle Dateien, auf die sich der Klassenpfad bezieht, sollten sich in/WEB-INF/classes befinden) –