将 nltk.tree.Tree 的结果保存到 Python 中的列表

Save result from nltk.tree.Tree to list in Python

我有一个问题,我想将 nltk.tree.Tree 类型的结果保存到列表中。这是我的解析结果代码:

for result in range(len(parsing)):
    print(parsing[result])
    Tree.fromstring(str(parsing[result])).pretty_print()
>>>
(S
  (SUB (FNOM (NND seorang) (NP mahasiswa)))
  (PRE (FVERB (MD boleh) (VB meminjam)))
  (OBJ (FNOM (CD beberapa) (NP buku))))
                         S                                    
          _______________|____________________________         
        SUB                   PRE                    OBJ      
         |                     |                      |        
        FNOM                 FVERB                   FNOM     
    _____|_______         _____|______          ______|____    
  NND            NP      MD           VB       CD          NP 
   |             |       |            |        |           |   
seorang      mahasiswa boleh       meminjam beberapa      buku

我期望的是树形式的结果可以像这样以列表的形式存储:

['S', ['SUB', ['FNOM', [('NND', 'seorang'), ('NP', 'mahasiswa')]]], ['PRE', ['FVERB', [('MD', 'boleh'), ('VB', 'meminjam')]]], ['OBJ', ['FNOM', [('CD', 'beberapa'), ('NP', 'buku')]]]]

或者类似的以列表的形式输出。 有关附加信息,以下是变量“解析”结果的输出类型:

print(type(parsing[0]))
>>>
<class 'nltk.tree.Tree'>

我想更改为“列表”的问题是因为我无法从“S”、“SUB”、“PRE”、“OBJ”、“FNOM”等树中检索结果. 我能从树上得到的只有列表中的单词。这是一个例子:

print(str(parsing[0]) + '\n')
print(str(parsing[0][0]) + '\n')
print(str(parsing[0][0][0]) + '\n')
print(str(parsing[0][0][0][0]) + '\n')
print(str(parsing[0][0][0][0][0]) + '\n')
>>>
(S
  (SUB (FNOM (NND seorang) (NP mahasiswa)))
  (PRE (FVERB (MD boleh) (VB meminjam)))
  (OBJ (FNOM (CD beberapa) (NP buku))))  #How to get "S"

(SUB (FNOM (NND seorang) (NP mahasiswa))) #How to get "SUB"

(FNOM (NND seorang) (NP mahasiswa)) #How to get "FNOM"

(NND seorang) #How to get "NND"

seorang #Showing word but not tag

有没有我可以做的解决方法或者我应该如何解决这个问题?如果有我没有提供的信息,请告诉我,以便我可以更正我的问题。

反正我的英语不好所以请理解。
谢谢你。 ^-^

先生,您可以这样做,但是计算不是最好的

list_test = []
for result in range(len(parsing)) :
    temp_list1 = []
    
    temp_list1.append(parsing[0].label())
    for item in parsing[result]:
        temp_list2 = []
        
        for words in item:
            temp_list3 = []
            temp_list3.append(words.label())
            temp_list4 = []
            for word in words:
                
                temp_list4.append((word.label(),word[0]))
                
            temp_list3.append(temp_list4)
            temp_list2.append(item.label())
            temp_list2.append(temp_list3)
        
        
        temp_list1.append(temp_list2)   
    list_test.append(temp_list1)

for result in list_test :
    print(result)
    print("\n")

你会得到这样的东西:

['S', ['SUB', ['FNOM', [('NND', 'seorang'), ('NP', 'mahasiswa')]]], ['PRE', ['FVERB', [('MD', 'boleh'), ('VB', 'meminjam')]]], ['OBJ', ['FNOM', [('CD', 'beberapa'), ('NP', 'buku')]]]]