有几种资源可用于训练和执行语法依赖解析器,MaltParser;最值得注意的是该项目的主页:http://www.maltparser.org/userguide.html#startusing)。看看使用MaltParser的NLTK代码,我看到如何编写等效的Java代码来启动一个单独的子进程来运行MaltParser:http://nltk.org/_modules/nltk/parse/malt.html。但是,我所要求的,或者更确切地说,是代码清楚而干净地展示了如何将MaltParser作为库集成到Java程序中。
具体来说,我想编写Java代码来执行以下操作:
训练解析模型。
加载经过训练的模型并以在线方式解析句子(即流句和使用MaltParser对象解析每个句子)。
对任何有知识,耐心和意愿的人:请帮助我回答1和2!
答案 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());
}
}