All Projects → goodmami → Penman

goodmami / Penman

Licence: mit
PENMAN notation (e.g. AMR) in Python

Programming Languages

python
139335 projects - #7 most used programming language

Labels

Projects that are alternatives of or similar to Penman

Pyrwr
Python Implementation for Random Walk with Restart (RWR)
Stars: ✭ 48 (-23.81%)
Mutual labels:  graph
Rtpdump
Extract audio file from RTP streams in pcap format
Stars: ✭ 54 (-14.29%)
Mutual labels:  amr
Neuralamr
Sequence-to-sequence models for AMR parsing and generation
Stars: ✭ 60 (-4.76%)
Mutual labels:  amr
Scaffold Eth
🏗 forkable Ethereum dev stack focused on fast product iterations
Stars: ✭ 1,017 (+1514.29%)
Mutual labels:  graph
Geeksforgeeks Dsa 2
This repository contains all the assignments and practice questions solved during the Data Structures and Algorithms course in C++ taught by the Geeks For Geeks team.
Stars: ✭ 53 (-15.87%)
Mutual labels:  graph
Rainbarf
it's like Rainmeter, but for CLI!
Stars: ✭ 1,087 (+1625.4%)
Mutual labels:  graph
Videocontext
An experimental HTML5 & WebGL video composition and rendering API.
Stars: ✭ 1,035 (+1542.86%)
Mutual labels:  graph
Pyflowgraph
Python Module for displaying flowgraphs using Pyside or PyQt.
Stars: ✭ 61 (-3.17%)
Mutual labels:  graph
English2cypher
A model to transform english into Cypher queries, based off the CLEVR-graph dataset
Stars: ✭ 54 (-14.29%)
Mutual labels:  graph
Calendar Graph
Calendar graph like github using jsx support SVG, Canvas and SSR
Stars: ✭ 58 (-7.94%)
Mutual labels:  graph
Pure Vue Chart
Simple and lightweight vue chart component without using chart library dependencies
Stars: ✭ 50 (-20.63%)
Mutual labels:  graph
Home Assistant Z Wave Graph
Graph your Z-Wave mesh automatically from within Home Assistant.
Stars: ✭ 51 (-19.05%)
Mutual labels:  graph
Cacti
Cacti ™
Stars: ✭ 1,090 (+1630.16%)
Mutual labels:  graph
Gat2vec
representation learning on attributed graphs
Stars: ✭ 48 (-23.81%)
Mutual labels:  graph
Embedded gcnn
Embedded Graph Convolutional Neural Networks (EGCNN) in TensorFlow
Stars: ✭ 60 (-4.76%)
Mutual labels:  graph
Indradb
A graph database written in rust
Stars: ✭ 1,035 (+1542.86%)
Mutual labels:  graph
Interview Guide
Coding/technical interview guide: data structures, algorithms, complexity analyses, interview questions
Stars: ✭ 54 (-14.29%)
Mutual labels:  graph
Dmgi
Unsupervised Attributed Multiplex Network Embedding (AAAI 2020)
Stars: ✭ 62 (-1.59%)
Mutual labels:  graph
Asciichart
Nice-looking lightweight console ASCII line charts ╭┈╯ for NodeJS, browsers and terminal, no dependencies
Stars: ✭ 1,107 (+1657.14%)
Mutual labels:  graph
Stardog.js
Stardog JavaScript Framework for node.js and the browser
Stars: ✭ 57 (-9.52%)
Mutual labels:  graph

Penman — a Python library for PENMAN graph notation

PyPI Version Python Support .github/workflows/checks.yml Documentation Status

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

  • [x] Read and write PENMAN-serialized graphs or triple conjunctions
  • [x] Read metadata in comments (e.g., # ::id 1234)
  • [x] Read surface alignments (e.g., foo~e.1,2)
  • [x] Inspect and manipulate the graph or tree structures
  • [x] Customize graphs for writing:
    • Adjust indentation and compactness
    • Select a new top node
    • Rearrange edges
    • Restructure the tree shape
    • Relabel node variables
  • [x] Transform the graph
    • Canonicalize roles
    • Reify and dereify edges
    • Reify attributes
    • Embed the tree structure with additional TOP triples
  • [x] AMR model: role inventory and transformations
  • [x] Check graphs for model compliance
  • [x] Tested (but not yet 100% coverage)
  • [x] 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))

(more information)

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))

(more information)

Demo

For a demonstration of the API usage, see the included Jupyter notebook:

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

If you make use of Penman in your work, please cite Goodman, 2020. The BibTeX is below:

@inproceedings{goodman-2020-penman,
    title = "{P}enman: An Open-Source Library and Tool for {AMR} Graphs",
    author = "Goodman, Michael Wayne",
    booktitle = "Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics: System Demonstrations",
    month = jul,
    year = "2020",
    address = "Online",
    publisher = "Association for Computational Linguistics",
    url = "https://www.aclweb.org/anthology/2020.acl-demos.35",
    pages = "312--319",
    abstract = "Abstract Meaning Representation (AMR) (Banarescu et al., 2013) is a framework for semantic dependencies that encodes its rooted and directed acyclic graphs in a format called PENMAN notation. The format is simple enough that users of AMR data often write small scripts or libraries for parsing it into an internal graph representation, but there is enough complexity that these users could benefit from a more sophisticated and well-tested solution. The open-source Python library Penman provides a robust parser, functions for graph inspection and manipulation, and functions for formatting graphs into PENMAN notation. Many functions are also available in a command-line tool, thus extending its utility to non-Python setups.",
}

For the graph transformation/normalization work, 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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].