【问题标题】:Save result from nltk.tree.Tree to list in Python将 nltk.tree.Tree 的结果保存到 Python 中的列表
【发布时间】:2021-06-22 03:26:19
【问题描述】:

我有一个问题,我想将 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

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

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

【问题讨论】:

    标签: python list tree nltk


    【解决方案1】:

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

    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')]]]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 2020-08-05
      • 2022-07-01
      相关资源
      最近更新 更多