根据解析描述生成解析树

问题描述:

我想根据英语句子的解析描述(缩写形式的句法解析)生成解析树(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)))))))) (. .)) 
+0

我建议你找一个现有的NLP解析器。分析自然语言非常困难。 –

+0

@IraBaxter我已经有了一个句子的解析树,这个句子在语料库中的许多句子中被手动纠正。使用统计NLP解析器只会引入错误。 – damned

+0

您对问题的描述太短,无法得到连贯的答案。在这个问题中,你说“我想生成一个解析器树”;在这个评论中,你说“我已经有一个分析树”。这很混乱。用一种我们不必猜测你的问题的方式来写你的问题。 –

我终于摸索出来自己:)

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 
}