将MaltParser集成到Java代码中,而不使用单独的进程

时间:2013-06-18 18:36:48

标签: java parsing nlp

有几种资源可用于训练和执行语法依赖解析器,MaltParser;最值得注意的是该项目的主页:http://www.maltparser.org/userguide.html#startusing)。看看使用MaltParser的NLTK代码,我看到如何编写等效的Java代码来启动一个单独的子进程来运行MaltParser:http://nltk.org/_modules/nltk/parse/malt.html。但是,我所要求的,或者更确切地说,是代码清楚而干净地展示了如何将MaltParser作为库集成到Java程序中。

具体来说,我想编写Java代码来执行以下操作:

  1. 训练解析模型。

  2. 加载经过训练的模型并以在线方式解析句子(即流句和使用MaltParser对象解析每个句子)。

  3. 对任何有知识,耐心和意愿的人:请帮助我回答1和2!

1 个答案:

答案 0 :(得分:1)

我找到了一个基本的解决方案2.我注意到在http://www.maltparser.org/userguide.html#api上,它将一个指向示例文件的列表。我从其中一个文件中取出了这个片段:

/**
* @author Johan Hall
 */
public static void main(String[] args) {
    try {
        MaltParserService service =  new MaltParserService();
        // Inititalize the parser model 'model0' and sets the working directory to '.' and sets the logging file to 'parser.log'
        service.initializeParserModel("-c model0 -m parse -w . -lfi parser.log");

        // Creates an array of tokens, which contains the Swedish sentence 'Grundavdraget upphör alltså vid en taxerad inkomst på 52500 kr.'
        // in the CoNLL data format.
        String[] tokens = new String[11];
        tokens[0] = "1\tGrundavdraget\t_\tN\tNN\tDD|SS";
        tokens[1] = "2\tupphör\t_\tV\tVV\tPS|SM";
        tokens[2] = "3\talltså\t_\tAB\tAB\tKS";
        tokens[3] = "4\tvid\t_\tPR\tPR\t_";
        tokens[4] = "5\ten\t_\tN\tEN\t_";
        tokens[5] = "6\ttaxerad\t_\tP\tTP\tPA";
        tokens[6] = "7\tinkomst\t_\tN\tNN\t_";
        tokens[7] = "8\tpå\t_\tPR\tPR\t_";
        tokens[8] = "9\t52500\t_\tR\tRO\t_";
        tokens[9] = "10\tkr\t_\tN\tNN\t_";
        tokens[10] = "11\t.\t_\tP\tIP\t_";
        // Parses the Swedish sentence above
        DependencyStructure graph = service.parse(tokens);
        // Outputs the dependency graph created by MaltParser.
        System.out.println(graph);
        // Terminates the parser model
        service.terminateParserModel();
    } catch (MaltChainedException e) {
        System.err.println("MaltParser exception: " + e.getMessage());
    }
}