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
Repository
Annotator building tool for Jupyter
Basic Info
Statistics
- Stars: 22
- Watchers: 3
- Forks: 2
- Open Issues: 5
- Releases: 3
Topics
Metadata Files
README.md

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 . Be patient though, when there is no cached build, it may take a few minutes to start.

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
- Repositories: 47
- Profile: https://github.com/percevalw
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 | 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
- Homepage: https://github.com/percevalw/metanno
- Documentation: https://metanno.readthedocs.io/
- License: MIT
-
Latest release: 0.0.9
published over 3 years ago
Rankings
Maintainers (1)
Dependencies
- @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
- ipykernel *
- transcrypt ==3.7.16
- astunparse *
- ipykernel *
- transcrypt ==3.9.0