я наконец работал это сам :)
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
Ваше описание вашей проблемы слишком короткое, чтобы вы могли получить согласованный ответ. В вопросе вы говорите: «Я хочу генерировать дерево парсера»; в этом комментарии вы говорите: «У меня уже есть дерево разбора». Это довольно запутанно. Напишите свой вопрос таким образом, что нам не нужно ничего догадываться о вашей проблеме. –