2015-02-23 23 views
5

Tôi có một tập hợp các câu đã được xử lý trước bởi các hệ thống CoreNLP của Stanford. Một trong những điều mà nó cung cấp là cây Parse Tree của câu (dựa trên bầu cử). Trong khi tôi có thể hiểu được một cây phân tích cú pháp khi nó rút ra (giống như một cây), tôi không chắc chắn làm thế nào để đọc nó ở định dạng này:Cách đọc cây phân tích dựa trên bầu cử

Ví dụ:

  (ROOT 
      (FRAG 
      (NP (NN sent28)) 
      (: :) 
      (S 
      (NP (NNP Rome)) 
      (VP (VBZ is) 
      (PP (IN in) 
      (NP 
      (NP (NNP Lazio) (NN province)) 
      (CC and) 
      (NP 
      (NP (NNP Naples)) 
      (PP (IN in) 
      (NP (NNP Campania)))))))) 
      (. .))) 

Câu gốc là:

sent28: Rome is in Lazio province and Naples in Campania . 

Làm cách nào để đọc cây này, hoặc cách khác, có mã (trăn) thực hiện đúng không? Cảm ơn.

Trả lời

10

NLTK có một lớp học để đọc phân tích cây: nltk.tree.Tree. Phương thức liên quan được gọi là fromstring. Sau đó, bạn có thể lặp lại các subtrees, lá, v.v ...

Ngoài ra: bạn có thể muốn xóa bit nói sent28: vì nó gây nhầm lẫn cho trình phân tích cú pháp (nó cũng không phải là một phần của câu). Bạn không nhận được một cây phân tích đầy đủ, nhưng chỉ là một đoạn câu.

+5

Cảm ơn bạn! và tôi đã thêm 'từ nltk.draw.tree import_trees >>> draw_trees (cây)' để hình dung nó như một cây thật :-) [Oh và tôi không thể cất cánh 'sent28', nó là một phần của bài tập. ..] – Cheshie

+2

Quên để nói: 'Tree.pprint' cũng rất tiện dụng – mbatchkarov

-3

Bạn chỉ có thể sử dụng stanford phân tích cú pháp như sau:

sentences = parser.raw_parse_sents(["Hello, My name is Melroy.", "What is your name?"]) #probably raw_parse(just a string) or parse_sents(list but has been splited) 
for line in sentences: 
    for sentence in line: 
     ***sentence.draw()*** 
Các vấn đề liên quan