1

已经有多种资源可用于训练和执行语法依赖解析器 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 对象来解析每个句子)。

有知识、有耐心、有意愿的人:请帮我回答1和2!

4

1 回答 1

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());
    }
}
于 2013-06-20T04:04:01.887 回答