-2

ツリーを解析しようとしていますが、次のエラーが発生します。型エラー: タプル インデックスは str ではなく整数でなければなりませんか?

def parseExpression(expression):
    nodeMap = dict()
    counter = 1
    node = ""
    retExp =""
    for char in expression:
        if char == '(' or char == ')' :
            if (len(node) > 0):
                nodeMap[str(counter)] = node;
                retExp += str(counter)
                counter +=1
            retExp += char
            node =""
        elif char == ' ': continue
        else :
            node += char
    return retExp,nodeMap

def printTree(tree, node, nodeMap):
    if node not in tree:
        return 
    print ('%s -> %s' % (nodeMap[node], ' '.join(nodeMap[child] for child in tree[node])) )
    for child in tree[node]:
        printTree(tree, child, nodeMap)

expression = " ( Root( SQ ( VBZ ) ( NP ( DT ) ( NN ) ) ( VP ( VB ) ( NP ( NN ) ) ) ))"
expression, nodeMap = parseExpression(expression)
tree = parseExpression(expression)
printTree(tree, tree[''][0], nodeMap)

出力:

Root -> SQ
SQ -> VBZ NP VP
NP -> DT NN
VP -> VB NP
NP -> NN

誰かがこのプログラムのデバッグを手伝ってくれますか?

Traceback (most recent call last):
  File "C:/Python33/refd.py", line 29, in <module>
    printTree(tree, tree[''][0], nodeMap)
TypeError: tuple indices must be integers, not str
4

2 に答える 2

0

retExp、nodeMap の 2 つの値を返しています。したがって、tree はタプル (retExp,nodeMap) を保持します。

辞書から内容を出力したいと思っていると思います。これは、タプルの 2 番目の要素です。あなたができることは次のとおりです。

t,tree = parseExpression(expression)
printTree(tree, tree[''][0], nodeMap)

しかし、待ってください。その辞書には keye '' で何も格納されていないため、別のエラーが発生します。そこで、辞書を印刷することにしました。これが私が見たものです。

{'10': '10', '1': '1', '3': '3', '2': '2', '5': '5', '4': '4', '7': '7', '6': '6', '9': '9', '8': '8'}

キー '' がないだけでなく、すべてのエントリに値として自身が含まれています。これはあなたがここに持っている木ではありません。

于 2013-11-09T00:29:24.380 に答える