我終於摸索出來自己:)
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
您對問題的描述太短,無法得到連貫的答案。在這個問題中,你說「我想生成一個解析器樹」;在這個評論中,你說「我已經有一個分析樹」。這很混亂。用一種我們不必猜測你的問題的方式來寫你的問題。 –