2012-05-18 6 views
0

영어 문장의 구문 분석 구문 (구문 구문 분석의 압축 된 형식)에서 구문 분석 트리 (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

을 그것을 밖으로했다. 자연어를 파싱하는 것은 매우 어렵습니다. –

+0

@IraBaxter 이미 문장에 대한 구문 분석 트리가 있습니다. 이는 코퍼스의 여러 문장에 대해 수작업으로 수정되었습니다. 통계적인 NLP 파서를 사용하는 것은 단지 오류를 가져올 것입니다. – damned

+0

문제에 대한 설명이 너무 짧아 일관된 답변을 얻을 수 없습니다. 질문에서 "나는 파서 트리를 생성하고 싶다"라고 말합니다. 이 주석에서 "이미 구문 분석 트리가 있습니다"라고 말합니다. 그건 꽤 혼란 스럽네요. 문제에 대해 추측 할 필요가없는 방식으로 질문을 작성하십시오. –

답변

0

나는 마침내 내가 기존 NLP 파서를 찾을 제안 나 자신 :

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 
}