2012-05-18 2 views
0

Я хочу сгенерировать дерево синтаксического анализа (объект 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

Ваше описание вашей проблемы слишком короткое, чтобы вы могли получить согласованный ответ. В вопросе вы говорите: «Я хочу генерировать дерево парсера»; в этом комментарии вы говорите: «У меня уже есть дерево разбора». Это довольно запутанно. Напишите свой вопрос таким образом, что нам не нужно ничего догадываться о вашей проблеме. –

ответ

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 
} 
Смежные вопросы