2016-03-23 20 views
0

jspで私のクエリにPOSタグをタグ付けしようとしています。私はそれをJavaアプリケーションとして実行するとうまくいきますが、jspとして実行すると、次の例外が発生します。HTTPステータス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 

私の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コードは、私も追加されるクラスパスとタグ付けモデルにスタンフォード・POStagger.jarを追加した

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

以下の通りです。 This is my project structure

答えて

0

ので、Tomcatが彼らに

を見つけることができます/ WEB-INF/libフォルダにあなたのjarファイルを追加してみてください(ここで述べたように:java.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton

+0

Thanks.Thisエラーが解決しましたが、私は別のエラーを取得しています: - (HTTPステータス500 - edu.stanford.nlp.io.RuntimeIOException:タガーモデルをロード中にエラーが発生しました(おそらくモデルファイルがありません)。org.apache.jasper.JasperException:edu.stanford.nlp.io.RuntimeIOException:読み込み中にエラーが発生しましたタガーモデル(おそらくモデルファイルがありません) \t org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:548)または(JspServlet.java:396) –

+0

私はあなたのタグファイルがクラスパスにないと仮定していますが、正しくパッケージ化され、サーバーにデプロイされているかどうかを確認します(すべてのクラスパス参照ファイルは/ WEB-INF/classesになければなりません) –

関連する問題