不用main方法执行解析器方法

时间:2017-06-07 12:18:20

标签: java arrays servlets hash nlp

当我尝试在另一个servlet类中调用parserAction()方法时,我得到一个空白数组。我不能打印我的servlet中的名词。但是在这个类中使用MAIN METHOD名词数组正确打印。这是什么原因?

    package com.books.servlet;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashSet;
import java.util.Set;

import com.sun.corba.se.impl.orb.ParserAction;

import opennlp.tools.cmdline.parser.ParserTool;
import opennlp.tools.parser.Parse;
import opennlp.tools.parser.Parser;
import opennlp.tools.parser.ParserFactory;
import opennlp.tools.parser.ParserModel;

public class ParserTest {



    public static Set<String> nounPhrases = new HashSet<>();


    public String line = "I need the java book";



    public void getNounPhrases(Parse p) {
        if (p.getType().equals("NN") || p.getType().equals("NNS") || p.getType().equals("NNP")
                || p.getType().equals("NNPS")) {
            nounPhrases.add(p.getCoveredText());
            // System.out.println(p.getCoveredText());
        }

        for (Parse child : p.getChildren()) {
            getNounPhrases(child);

        }
    }

    public  void parserAction() throws Exception {
        InputStream is = new FileInputStream("en-parser-chunking.bin");
        ParserModel model = new ParserModel(is);
        Parser parser = ParserFactory.create(model);
        Parse topParses[] = ParserTool.parseLine(line, parser, 1);
        for (Parse p : topParses) {
            // p.show();
            getNounPhrases(p);
        }
    }

      public static void main(String[] args) throws Exception {
          new ParserTest().parserAction();
          System.out.println("List of Noun Parse : "+nounPhrases);

         }




    }

下面是我的示例servlet类。它显示了一个带[]

的空白数组
    public class test extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 .......
 .......
 .......
ParserTest pt = new ParserTest();
 pt.parserAction();

 System.out.println("List of Noun Parse : "+pt.nounPhrases);
 System.out.println("List of Noun Parse : "+ParserTest.nounPhrases);
}
}

这里我需要在不执行main方法的情况下提取名词。因为我正在开发一个Web应用程序。我需要在我的一个servlet类中显示这些提取的名词。

1 个答案:

答案 0 :(得分:0)

您需要在响应中写下您想要的内容,例如:

response.getWriter().println("Whatever you want to write in the response");

但首先我建议阅读一些优秀的Java书籍,因为你的代码不是很好,servlet也是一种老式的Java Web应用程序,现在人们使用其他技术,比如使用JSP或JSF的模板,JAX-RS对于REST应用程序,用于SOAP应用程序的JAX-WS,...