metanno

Annotator building tool for Jupyter

https://github.com/percevalw/metanno

Science Score: 77.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 4 DOI reference(s) in README
  • Academic publication links
    Links to: pubmed.ncbi, ncbi.nlm.nih.gov, zenodo.org
  • Committers with academic emails
    2 of 4 committers (50.0%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.0%) to scientific vocabulary

Keywords

annotator customizable jupyter modular nlp
Last synced: 6 months ago · JSON representation ·

Repository

Annotator building tool for Jupyter

Basic Info
  • Host: GitHub
  • Owner: percevalw
  • License: mit
  • Language: JavaScript
  • Default Branch: master
  • Homepage:
  • Size: 1.33 MB
Statistics
  • Stars: 22
  • Watchers: 3
  • Forks: 2
  • Open Issues: 5
  • Releases: 3
Topics
annotator customizable jupyter modular nlp
Created almost 6 years ago · Last pushed 6 months ago
Metadata Files
Readme License Citation

README.md

Binder DOI


Metanno is a JupyterLab extension that allows you build your own annotator. For the moment, it focuses on textual documents with rich structured entities. Its main objectives are: - modularity: you decide how many views of your data are needed - customization: you can easily customize the software behavior in Python and see the changes immediately - interactivity: all of your annotations are immediately available as Python objects as soon as you edit something

Features

  • ↵ multiline and nested span annotations
  • 🖇️ nested, relational, complex annotation with table views
  • 🔗 multiple data type: hyperlinks, text, lists
  • 🪟 text view or table view
  • ✨ extensive customization power
  • 🐍 write your app in Python, execute it in the browser (or in the kernel, you decide)
  • 🚀 fast: the client side is written in React, and every action is processed in the browser directly by default
  • 🌐 websocket communication: you do not need to open any port
  • ⏮️ immutable state management, any state mutation is recorded and undoable

Citation

If you use Metanno, consider citing this work as below.

bibtex @software{wajsburt_metanno, author = {Wajsbürt, Perceval}, title = {Metanno: a modular annotator building framework}, month = feb, year = 2024, publisher = {Zenodo}, version = {0.0.9}, doi = {10.5281/zenodo.10689827}, url = {https://doi.org/10.5281/zenodo.10689827} }

Installation

This project is still under development and is subject to change. A simple pip install should be enough if you use Jupyterlab 3. You do not need to open any port. ```

To setup the environment

conda create --name annotation python=3.9 conda activate annotation pip install ipykernel && python -m ipykernel install --user --name annotation

To install the package

pip install metanno ```

If you're a user in a shared Jupyter environment (you did not run the jupyter lab command), you should instead install the extension at the user level

pip install metanno --user

Why

The choice of annotation software must be taken into account in the design of the annotation scheme. For example, it is difficult to annotate implicit/document-level entities in Brat or to annotate relations on multiple lines, and impossible to handle multiple documents at once. There are many annotation tools available (see Neves et al.), but most of them are either proprietary, poorly adapted to document or multi-document annotation, require a complex installation that is not compatible with existing remote work environments, or are difficult to customize. Finally, the standardization of annotation levels (mention / relation / event) is an obstacle to the development of new tasks. Given the limitations of the existing softwares and the difficulty to cover every need with a single static annotator, this project was initiated to provide a modular and fully customizable annotation framework, Metanno, and address these difficulties.

Demo

You can try it with Binder. Be patient though, when there is no cached build, it may take a few minutes to start.

https://github.com/percevalw/metanno/raw/master/doc/screenshot.png

How it works

All the app is controlled by a single state, replicated on both the frontend (the Jupyter client) and the backend (the Python kernel). Each views rendered in Jupyter uses a derivation of this state (think view_data = fn(app_data)) and calls functions in the app class whenever an event occurs. This app class is written in Python (by you), automatically translated into javascript and sent to the front-end such that every action taken by the user is answered immediately. If a given function modifies the state (wrapped by the @produce decorator), the changes are sent to the backend or the frontend to keep the state replicas in sync. If a function needs to be executed exclusively on the frontend or the backend (for example, triggering a database query on the backend), you can wrap it with @frontend_only or @kernel_only, and the call will be transmitted over the Jupyter websocket.

Todo

  • add basic app samples
  • add a documentation
  • add more table column types and renderers (numerical, dates, ...)
  • ~~add customizable column filterers~~
  • add relations visualizations and edition with editable arrows
  • add an image annotation view
  • ~~finish javascript to typescript conversion~~
  • ~~customizable undo / redo logic~~
  • add multi-cell editing (see a react-data-grid PR)
  • add a test suite (Cypress ?)
  • make a standalone version (without Jupyter)

Contribute

Any contribution is welcome, feel free to open a PR.

Owner

  • Name: Perceval Wajsburt
  • Login: percevalw
  • Kind: user
  • Location: Paris
  • Company: APHP

PhD in medical NLP, my main areas of interest are NLP, structured prediction models and UI development

Citation (CITATION.cff)

# This CITATION.cff file was generated with cffinit.
# Visit https://bit.ly/cffinit to generate yours today!

cff-version: 1.2.0
title: >-
  Metanno: a modular annotator building framework
message: If you use Metanno, please cite us as below.
type: software
authors:
  - given-names: Perceval
    family-names: Wajsbürt
repository-code: "https://github.com/percevalw/metanno"
abstract: >-
  Metanno is a Python package designed for creating custom annotation interfaces in JupyterLab.
  Key features include:
  - modularity: configurable number of views of the data
  - customization: easy customization of the software behavior in Python
  - interactivity: live access to the annotations from Python
keywords:
  - nlp
  - framework
  - modular
  - jupyter
  - annotation
  - ner
  - tabular
license: MIT
year: 2023

GitHub Events

Total
  • Release event: 2
  • Watch event: 5
  • Delete event: 2
  • Issue comment event: 2
  • Push event: 54
  • Pull request event: 3
  • Fork event: 1
  • Create event: 5
Last Year
  • Release event: 2
  • Watch event: 5
  • Delete event: 2
  • Issue comment event: 2
  • Push event: 54
  • Pull request event: 3
  • Fork event: 1
  • Create event: 5

Committers

Last synced: almost 3 years ago

All Time
  • Total Commits: 89
  • Total Committers: 4
  • Avg Commits per committer: 22.25
  • Development Distribution Score (DDS): 0.169
Top Committers
Name Email Commits
Perceval Wajsburt p****t@g****m 74
Perceval Wajsburt p****t@s****r 13
Thomas PETIT-JEAN t****t@a****r 1
Adam REMAKI a****0@i****k 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 1
  • Total pull requests: 7
  • Average time to close issues: N/A
  • Average time to close pull requests: about 1 hour
  • Total issue authors: 1
  • Total pull request authors: 3
  • Average comments per issue: 1.0
  • Average comments per pull request: 0.29
  • Merged pull requests: 2
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 1
  • Pull requests: 1
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 1
  • Pull request authors: 1
  • Average comments per issue: 1.0
  • Average comments per pull request: 1.0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • strayMat (1)
Pull Request Authors
  • percevalw (4)
  • Aremaki (4)
  • Thomzoy (1)
  • marconaguib (1)
Top Labels
Issue Labels
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads:
    • pypi 41 last-month
  • Total dependent packages: 0
  • Total dependent repositories: 1
  • Total versions: 8
  • Total maintainers: 1
pypi.org: metanno

Jupyter widgets collection to setup a modular annotation environment

  • Versions: 8
  • Dependent Packages: 0
  • Dependent Repositories: 1
  • Downloads: 41 Last month
Rankings
Dependent packages count: 10.0%
Stargazers count: 13.9%
Average: 21.5%
Dependent repos count: 21.7%
Forks count: 22.6%
Downloads: 39.4%
Maintainers (1)
Last synced: 6 months ago

Dependencies

package.json npm
  • @babel/cli 7.16.0 development
  • @babel/core 7.16.0 development
  • @babel/node 7.16.0 development
  • @babel/parser 7.16.0 development
  • @babel/plugin-proposal-class-properties 7.16.0 development
  • @babel/plugin-proposal-nullish-coalescing-operator ^7.16.0 development
  • @babel/plugin-proposal-optional-chaining ^7.16.0 development
  • @babel/plugin-transform-modules-commonjs 7.16.0 development
  • @babel/preset-env 7.16.0 development
  • @babel/preset-react 7.16.0 development
  • @babel/preset-typescript 7.16.0 development
  • @jupyterlab/builder ^3.4.1 development
  • @svgr/webpack 4.3.3 development
  • @testing-library/jest-dom 4.2.4 development
  • @testing-library/react 9.5.0 development
  • @testing-library/user-event 7.2.1 development
  • @types/node 13.13.52 development
  • @types/react 16.14.20 development
  • @types/react-dom 16.9.14 development
  • @types/webpack-env 1.16.3 development
  • @typescript-eslint/eslint-plugin 2.34.0 development
  • @typescript-eslint/parser 2.34.0 development
  • babel-eslint 10.0.3 development
  • babel-jest 24.9.0 development
  • babel-loader 8.0.6 development
  • babel-plugin-named-asset-import 0.3.7 development
  • babel-preset-react 6.24.1 development
  • babel-preset-react-app 9.1.2 development
  • camelcase 5.3.1 development
  • case-sensitive-paths-webpack-plugin 2.3.0 development
  • css-loader 3.6.0 development
  • dotenv 8.2.0 development
  • dotenv-expand 5.1.0 development
  • eslint 6.8.0 development
  • eslint-config-react-app 5.2.1 development
  • eslint-loader 3.0.3 development
  • eslint-plugin-flowtype 4.6.0 development
  • eslint-plugin-import 2.20.0 development
  • eslint-plugin-jsx-a11y 6.2.3 development
  • eslint-plugin-react 7.18.0 development
  • eslint-plugin-react-hooks 1.7.0 development
  • file-loader 5.1.0 development
  • fs-extra 8.1.0 development
  • html-webpack-plugin 4.0.0-beta.11 development
  • jest 24.9.0 development
  • jest-environment-jsdom-fourteen 1.0.1 development
  • jest-resolve 24.9.0 development
  • jest-watch-typeahead 0.4.2 development
  • mkdirp 0.5.5 development
  • mocha 5.2.0 development
  • npm-run-all 4.1.5 development
  • postcss-flexbugs-fixes 4.1.0 development
  • postcss-loader 3.0.0 development
  • postcss-normalize 8.0.1 development
  • postcss-preset-env 6.7.0 development
  • postcss-safe-parser 4.0.1 development
  • raw-loader ^4.0.2 development
  • sass-loader 8.0.2 development
  • semver 6.3.0 development
  • source-map-loader 0.2.4 development
  • style-loader 0.23.1 development
  • terser-webpack-plugin 2.3.4 development
  • ts-loader 5.4.5 development
  • typescript 4.4.4 development
  • url-loader 2.3.0 development
  • webpack 4.46.0 development
  • webpack-cli 3.3.12 development
  • webpack-dev-server 3.10.2 development
  • webpack-manifest-plugin 2.2.0 development
  • webpack-node-externals 1.7.2 development
  • workbox-webpack-plugin 4.3.1 development
  • @lumino/algorithm 1.9.1
  • @lumino/coreutils 1.11.1
  • @lumino/disposable 1.10.1
  • @lumino/properties 1.8.1
  • @lumino/signaling 1.10.1
  • @lumino/widgets 1.30.0
  • clsx 1.1.1
  • color 3.2.1
  • identity-obj-proxy 3.0.0
  • immer 9.0.6
  • is-arguments 1.1.1
  • is-date-object 1.0.5
  • isarray 2.0.5
  • jupyterlab_toastify ^4.2.1
  • memoize-one 5.2.1
  • mini-css-extract-plugin 0.9.0
  • object-keys 1.1.1
  • optimize-css-assets-webpack-plugin 5.0.3
  • pnp-webpack-plugin 1.6.0
  • prop-types 15.7.2
  • react 17.0.2
  • react-addons-shallow-compare 15.6.3
  • react-app-polyfill 1.0.6
  • react-autosuggest 9.4.3
  • react-data-grid percevalw/react-data-grid#prop_position
  • react-dev-utils 10.2.1
  • react-dnd 10.0.2
  • react-dnd-html5-backend 10.0.2
  • react-dom 17.0.2
  • react-fast-compare 3.2.0
  • react-native-listener 1.1.0
  • react-redux 7.2.6
  • react-resize-detector 4.2.3
  • react-xarrows 2.0.2
  • redux 4.1.2
  • redux-logger 3.0.6
  • redux-optimistic-ui 3.1.0
  • redux-thunk 2.4.0
  • regenerator-runtime 0.13.9
  • resolve 1.20.0
  • resolve-url-loader 3.1.1
  • rimraf ^3.0.2
  • side-channel 1.0.4
  • sourcemap-codec ^1.4.8
  • ts-pnp 1.1.5
  • which-boxed-primitive 1.0.2
requirements.txt pypi
  • ipykernel *
  • transcrypt ==3.7.16
setup.py pypi
  • astunparse *
  • ipykernel *
  • transcrypt ==3.9.0
pyproject.toml pypi