Saving NLTK rút ra phân tích cây để file ảnh
Có cách nào để lưu hình ảnh bốc thăm từ tree.draw() thành một file image lập trình? Tôi đã thử xem qua tài liệu, nhưng tôi không thể tìm thấy gì cả.
Saving NLTK rút ra phân tích cây để file ảnh
Có cách nào để lưu hình ảnh bốc thăm từ tree.draw() thành một file image lập trình? Tôi đã thử xem qua tài liệu, nhưng tôi không thể tìm thấy gì cả.
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.
Để 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):
Đ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
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. –
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]:
lẽ 'print_to_file', cho 'CanvasFrame's. – keyser