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)))))))) (. .))
4

1 に答える 1

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
}
于 2012-05-24T05:17:40.600 に答える