根据解析描述生成解析树
问题描述:
我想根据英语句子的解析描述(缩写形式的句法解析)生成解析树(Java对象)。我正在使用Java,并且也需要定义一个高效的树。例如。说明:根据解析描述生成解析树
(ROOT (S (NP (PRP I)) (VP (MD would) (VP (VB love) (S (VP (TO to) (VP (VB go) (PRT (RP out)) (PP (IN with) (NP (PRP you)))))))) (. .))
答
我终于摸索出来自己:)
public static Node getParseTree(String[] parseTokens, ArrayList<Node> leafNodeList)
{
Node top = new Node("TOP");
Node rest = getParseTree(parseTokens, 2, top, false, leafNodeList);
return top;
}
public static Node getParseTree(String[] parseTokens, int currIndex, Node lastNode, Boolean closeBrace, ArrayList<Node> leafNodeList)
{
if(currIndex>=parseTokens.length) return lastNode;
else if("(".equals(parseTokens[currIndex]))
{
Node newNode = lastNode.addChild(parseTokens[currIndex+1]);//The next token is the data for the new node constructed
return getParseTree(parseTokens, currIndex+2, newNode, false, leafNodeList);
}
else if(")".equals(parseTokens[currIndex]))
{
if(closeBrace) return getParseTree(parseTokens, currIndex+1, lastNode.getParent(), true, leafNodeList);
else return getParseTree(parseTokens, currIndex+1, lastNode, true, leafNodeList);
}
else //leaf node
{
Node newNode = lastNode.addChild(parseTokens[currIndex]);
leafNodeList.add(newNode);
return getParseTree(parseTokens, currIndex+2, lastNode.getParent(), true, leafNodeList);
}
}
Node test(String parseDesc)
{
parseDesc = parseDesc.replace("(", " (");
parseDesc = parseDesc.replace(")", ") ");
String[] parseDescTokens = parseDesc.trim().split("\\s+");
Node treeReqd = getParseTree(parseDescTokens, leafNodes);// Required Tree
}
我建议你找一个现有的NLP解析器。分析自然语言非常困难。 –
@IraBaxter我已经有了一个句子的解析树,这个句子在语料库中的许多句子中被手动纠正。使用统计NLP解析器只会引入错误。 – damned
您对问题的描述太短,无法得到连贯的答案。在这个问题中,你说“我想生成一个解析器树”;在这个评论中,你说“我已经有一个分析树”。这很混乱。用一种我们不必猜测你的问题的方式来写你的问题。 –