2014-05-02 55 views

Trả lời

9

tôi đã chính xác nhu cầu tương tự, và nhìn vào mã nguồn của nltk.draw.tree Tôi tìm thấy một giải pháp:

from nltk import Tree 
from nltk.draw.util import CanvasFrame 
from nltk.draw import TreeWidget 

cf = CanvasFrame() 
t = Tree.fromstring('(S (NP this tree) (VP (V is) (AdjP pretty)))') 
tc = TreeWidget(cf.canvas(),t) 
cf.add_widget(tc,10,10) # (10,10) offsets 
cf.print_to_file('tree.ps') 
cf.destroy() 

Các tập tin đầu ra là một postscript, và bạn có thể chuyển nó sang một file image sử dụng ImageMagick trên terminal:

$ convert tree.ps tree.png 

Tôi nghĩ đây là giải pháp nhanh chóng và bẩn; nó có thể không hiệu quả ở chỗ nó hiển thị canvas và hủy nó sau này (có lẽ có một tùy chọn để vô hiệu hóa màn hình hiển thị mà tôi không thể tìm thấy). Xin vui lòng cho tôi biết nếu có cách nào tốt hơn.

+3

Tuyệt. Tôi nghĩ bạn cần sử dụng Tree.fromstring() để xây dựng cây từ một chuỗi. – Colin

+0

Có: Trong NLTK 3, hàm tạo 'Tree' không còn chấp nhận một cây ở dạng chuỗi. Đã cập nhật. – alexis

3

Để thêm vào câu trả lời Minjoon, bạn có thể thay đổi phông chữ và màu sắc của cây để trông giống như phiên bản NLTK .draw() như sau:

tc['node_font'] = 'arial 14 bold' 
tc['leaf_font'] = 'arial 14' 
tc['node_color'] = '#005990' 
tc['leaf_color'] = '#3F8F57' 
tc['line_color'] = '#175252' 

Trước (trái) và sau (phải):

before after

+0

Điều này rất hữu ích, không chỉ để thiết lập kiểu phù hợp với phiên bản 'draw()' mà còn để hiển thị cách nó có thể được tùy chỉnh nói chung. – alexis

+0

Vâng, tài liệu rất mỏng và bạn cần phải nhìn thật kỹ thông qua mã nguồn để tìm ra các tùy chọn có sẵn. Tôi đã rất ngạc nhiên khi nó thực sự làm việc. –

8

Sử dụng các đối tượng nltk.draw.tree.TreeView để tạo ra các khung vải tự động:

>>> from nltk.tree import Tree 
>>> from nltk.draw.tree import TreeView 
>>> t = Tree.fromstring('(S (NP this tree) (VP (V is) (AdjP pretty)))') 
>>> TreeView(t)._cframe.print_to_file('output.ps') 

Sau đó:

>>> import os 
>>> os.system('convert output.ps output.png') 

[output.png]:

enter image description here

Các vấn đề liên quan