基于svg+python语言风格(成分)树的绘制
svgling的Python项目详细描述
svgling
:python+svg中的语法树
author:凯尔·罗林斯,kgr@jhu.edu
依赖项:^{
repository:https://github.com/rawlins/svgling/
安装:下载并使用setuptools,或pip install svgling
许可证:MIT许可证
概述
svgling
包是一个纯python包,用于执行单通道呈现
将语言学风格的构成树转化为svg。它主要用于
与Jupyter笔记本集成,但可用于生成SVG图
为了其他各种目的。它不涉及javascript,因此可以工作
在Jupyter中没有任何插件。
基本接口非常简单:将描述对象的树传递给
svgling.draw_tree
(例如,由一个标签和一系列
子节点,它们本身就是树)。
import svgling
svgling.draw_tree(("S", ("NP", ("D", "the"), ("N", "elephant")), ("VP", ("V", "saw"), ("NP", ("D", "the"), ("N", "rhinoceros")))))
这将生成如下SVG图像:
树绘图代码接受两种主要的树格式:由
列表列表(或元组的元组),节点标签为字符串,或来自
^{svgling
已经导入,就会产生
与上述示例相同的树关系图,但路径完全不同:
import svgling
nltk.Tree.fromstring("(S (NP (D the) (N elephant)) (VP (V saw) (NP (D the) (N rhinoceros))))")
(也就是说,svgling
monkey补丁nltk使用基于svg的树绘制代码。你
可能还想调用svgling.disable_nltk_png()
来完全禁用
默认NLTK PNG呈现程序,尤其是在Mac或Windows 64上,或
在无头设备上运行nltk;请参阅nltk问题
#1887用于用例)。
除了基本的树形图外,该包还支持许多类似于 移动箭头。有关文档和示例,请参见中的三个.ipynb文件 此存储库的根目录:(下面链接到nbviewer静态呈现版本):
核心设计原则和目标
- 非常适合于编程树图的生成(不仅仅是 手工定制图表)。
- 同样适用于理论语言学和计算 语言学/自然语言处理,至少对于后者以成分为目标的情况 树。(此包不针对依赖树/图。)
- 尽可能使用纯python(与python+javascript相反,或者 python+tk,或者python+dot,或者……。
优势和局限性
svgling
包在一个过程中完成它的呈现——它接受一个树
结构作为输入,生成SVG输出,就这样。因为这个,它
在jupyter中使用非常简单,而且不需要干扰插件或jupyter
必须进行设置。因为它是基于svg的,所以可以扩展和嵌入
任何web上下文都应该能够顺利工作。它也有最小的依赖性,只是
在生成svg时提供抽象层的一个包。(如果你是
对jupyter的svg编程图表感兴趣,我建议您
^{
单程渲染也会对可以执行的操作设置限制。其中一个
挑战在于它大多使用绝对位置,而准确的位置和
文本元素的宽度不能在没有实际呈现给
看看会发生什么。此外,渲染的确切细节是
以各种方式在渲染设备的摆布下。这都意味着
svgling
使用一系列技巧来估计节点的大小和宽度,而不会
在所有设备上始终保持完美。这种情况也给
在不添加javascript或
其他多道渲染技术。例如,我最终想
允许节点中使用mathjax,并允许具有复杂/多线形状的节点,但是
在纯svg中,如果没有上的javascript
客户端。该包确实为混合html/svg树提供了基本支持
允许复杂节点(包括mathjax)的关系图
限制。
有很多东西可以添加到这个包中;如果您发现
svgling
有用,有任何请求,或发现任何错误,请告诉我。