基于svg+python语言风格(成分)树的绘制

svgling的Python项目详细描述


svgling:python+svg中的语法树

author:凯尔·罗林斯,kgr@jhu.edu

依赖项^{},python 3

repositoryhttps://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图像:

example sentence

树绘图代码接受两种主要的树格式:由 列表列表(或元组的元组),节点标签为字符串,或来自 ^{}包,即实例化 ^{}原料药。这个 下面的nltk代码,只要svgling已经导入,就会产生 与上述示例相同的树关系图,但路径完全不同:

import svgling
nltk.Tree.fromstring("(S (NP (D the) (N elephant)) (VP (V saw) (NP (D the) (N rhinoceros))))")

(也就是说,svglingmonkey补丁nltk使用基于svg的树绘制代码。你 可能还想调用svgling.disable_nltk_png()来完全禁用 默认NLTK PNG呈现程序,尤其是在Mac或Windows 64上,或 在无头设备上运行nltk;请参阅nltk问题 #1887用于用例)。

除了基本的树形图外,该包还支持许多类似于 移动箭头。有关文档和示例,请参见中的三个.ipynb文件 此存储库的根目录:(下面链接到nbviewer静态呈现版本):

核心设计原则和目标

  1. 非常适合于编程树图的生成(不仅仅是 手工定制图表)。
  2. 同样适用于理论语言学和计算 语言学/自然语言处理,至少对于后者以成分为目标的情况 树。(此包不针对依赖树/图。)
  3. 尽可能使用纯python(与python+javascript相反,或者 python+tk,或者python+dot,或者……。

优势和局限性

svgling包在一个过程中完成它的呈现——它接受一个树 结构作为输入,生成SVG输出,就这样。因为这个,它 在jupyter中使用非常简单,而且不需要干扰插件或jupyter 必须进行设置。因为它是基于svg的,所以可以扩展和嵌入 任何web上下文都应该能够顺利工作。它也有最小的依赖性,只是 在生成svg时提供抽象层的一个包。(如果你是 对jupyter的svg编程图表感兴趣,我建议您 ^{},正在积极开发中 并且有一个非常令人愉快的api+良好的文档。)

单程渲染也会对可以执行的操作设置限制。其中一个 挑战在于它大多使用绝对位置,而准确的位置和 文本元素的宽度不能在没有实际呈现给 看看会发生什么。此外,渲染的确切细节是 以各种方式在渲染设备的摆布下。这都意味着 svgling使用一系列技巧来估计节点的大小和宽度,而不会 在所有设备上始终保持完美。这种情况也给 在不添加javascript或 其他多道渲染技术。例如,我最终想 允许节点中使用mathjax,并允许具有复杂/多线形状的节点,但是 在纯svg中,如果没有上的javascript 客户端。该包确实为混合html/svg树提供了基本支持 允许复杂节点(包括mathjax)的关系图 限制。

有很多东西可以添加到这个包中;如果您发现 svgling有用,有任何请求,或发现任何错误,请告诉我。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在IE10中重新加载另一个帧时,internet explorer Java小程序失败/消失   ThreadLocal变量的java性能   java系统。出来println不是打印输出   java从JAXB类获取元素属性   java组织。天啊。科尔巴。包裹。InvalidName:IDL:omg。org/CORBA/ORB/InvalidName:1.0   java有没有办法让非事务连接抛出异常?   java是否有任何方法可以使用JdbcTemplate和查询/条件Fluent API   javajpa级联类型。刷新不工作?   未考虑java Maven依赖关系管理   java MySQL MBR包含抛出MySQLExceptionError的语句   java验证整数并将其设为5位数   java发现了循环依赖的问题   java Hibernate left join fetch到使用@ManyToMany关联映射的softdeleted实体生成无效查询?   JavaH:commandButton多个操作:下载文件并呈现ajax表   Google Contacts API在Java、C#、Python或Ruby中是否有一个Hello World示例?