PENMAN notation for graphs (e.g., AMR)
Project description
Penman — a Python library for PENMAN graph notation
This package models graphs encoded in PENMAN notation (e.g., AMR), such as the following for the boy wants to go:
(w / want-01
:ARG0 (b / boy)
:ARG1 (g / go
:ARG0 b))
The Penman package may be used as a Python library or as a script.
Features
- Read and write PENMAN-serialized graphs or triple conjunctions
- Read metadata in comments (e.g.,
# ::id 1234
) - Read surface alignments (e.g.,
foo~e.1,2
) - Inspect and manipulate the graph or tree structures
- Customize graphs for writing:
- Adjust indentation and compactness
- Select a new top node
- Rearrange edges
- Restructure the tree shape
- Relabel node variables
- Transform the graph
- Canonicalize roles
- Reify and dereify edges
- Reify attributes
- Embed the tree structure with additional
TOP
triples
- AMR model: role inventory and transformations
- Check graphs for model compliance
- Tested (but not yet 100% coverage)
- Documented (see the documentation)
Library Usage
>>> import penman
>>> g = penman.decode('(b / bark-01 :ARG0 (d / dog))')
>>> g.triples
[('b', ':instance', 'bark-01'), ('b', ':ARG0', 'd'), ('d', ':instance', 'dog')]
>>> g.edges()
[Edge(source='b', role=':ARG0', target='d')]
>>> print(penman.encode(g, indent=3))
(b / bark-01
:ARG0 (d / dog))
>>> print(penman.encode(g, indent=None))
(b / bark-01 :ARG0 (d / dog))
Script Usage
$ echo "(w / want-01 :ARG0 (b / boy) :ARG1 (g / go :ARG0 b))" | penman
(w / want-01
:ARG0 (b / boy)
:ARG1 (g / go
:ARG0 b))
$ echo "(w / want-01 :ARG0 (b / boy) :ARG1 (g / go :ARG0 b))" | penman --make-variables="a{i}"
(a0 / want-01
:ARG0 (a1 / boy)
:ARG1 (a2 / go
:ARG0 a1))
Demo
For a demonstration of the API usage, see the included Jupyter notebook:
-
View it on GitHub: docs/api-demo.ipynb
-
Run it on mybinder.org:
(Note: clear the output before running: Cell > All Output > Clear):
PENMAN Notation
A description of the PENMAN notation can be found in the
documentation.
This module expands the original notation slightly to allow for
untyped nodes (e.g., (x)
) and anonymous relations (e.g., (x : (y))
). It also accommodates slightly malformed graphs as well as
surface alignments.
Citation
The canonical citation for the Penman library will soon be a system demo paper for ACL 2020. Until the proceedings are published, simply putting https://github.com/goodmami/penman in a footnote is sufficient. If you are referring to the graph transformation/normalization work or prefer an academic citation, please use the following:
@inproceedings{Goodman:2019,
title = "{AMR} Normalization for Fairer Evaluation",
author = "Goodman, Michael Wayne",
booktitle = "Proceedings of the 33rd Pacific Asia Conference on Language, Information, and Computation",
year = "2019",
pages = "47--56",
address = "Hakodate"
}
Disclaimer
This project is not affiliated with ISI, the PENMAN project, or the AMR project.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file Penman-1.0.0.tar.gz
.
File metadata
- Download URL: Penman-1.0.0.tar.gz
- Upload date:
- Size: 35.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a584988dd388505598f368816b53c46bb6b5040fcdec21a61bc24826fcaf912f |
|
MD5 | 23cba4b9170843d87f1595f13f324e98 |
|
BLAKE2b-256 | 929bbfe6277ebf291760b83cada9e874ac04d368f85cf0a6711c849c1486d04d |
File details
Details for the file Penman-1.0.0-py3-none-any.whl
.
File metadata
- Download URL: Penman-1.0.0-py3-none-any.whl
- Upload date:
- Size: 42.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2721926094bf8b0c9e149512aaf978cfa6b24b9a85e9463705db0eb9b0ddccbb |
|
MD5 | 8df4eb7522807da62d96ade863097a26 |
|
BLAKE2b-256 | 7afeeca5c5bfdf84ce2f975cf0fbf2918fc3280865e3a38c730a6a3029649e58 |