{"id":15520582,"url":"https://github.com/percevalw/metanno","last_synced_at":"2025-04-23T03:51:44.786Z","repository":{"id":57441092,"uuid":"244972164","full_name":"percevalw/metanno","owner":"percevalw","description":"Annotator building tool for Jupyter","archived":false,"fork":false,"pushed_at":"2025-02-27T00:07:17.000Z","size":1343,"stargazers_count":22,"open_issues_count":3,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-12T09:20:02.999Z","etag":null,"topics":["annotator","customizable","jupyter","modular","nlp"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/percevalw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-03-04T18:16:41.000Z","updated_at":"2025-03-28T11:44:55.000Z","dependencies_parsed_at":"2024-11-08T20:01:53.271Z","dependency_job_id":"d5860f0b-6886-40d7-9797-c3f74925b9b4","html_url":"https://github.com/percevalw/metanno","commit_stats":{"total_commits":89,"total_committers":4,"mean_commits":22.25,"dds":0.1685393258426966,"last_synced_commit":"c78ceea70e0a9f1b7721a13f1e92f2bd61b96e6f"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percevalw%2Fmetanno","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percevalw%2Fmetanno/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percevalw%2Fmetanno/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/percevalw%2Fmetanno/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/percevalw","download_url":"https://codeload.github.com/percevalw/metanno/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250366685,"owners_count":21418768,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["annotator","customizable","jupyter","modular","nlp"],"created_at":"2024-10-02T10:28:02.080Z","updated_at":"2025-04-23T03:51:44.764Z","avatar_url":"https://github.com/percevalw.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"https://github.com/percevalw/metanno/raw/master/doc/logo.png\" width=120px /\u003e\n\n[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/percevalw/metanno/HEAD?urlpath=lab%2Ftree%2Fexamples%2FAnnotator.ipynb)\n[![DOI](https://zenodo.org/badge/244972164.svg)](https://zenodo.org/doi/10.5281/zenodo.10689826)\n\n--------------------------------------------------------------------------------\n\n\nMetanno is a JupyterLab extension that allows you build your own annotator. For the moment, it focuses on textual documents with rich structured entities.\nIts main objectives are:\n- modularity: you decide how many views of your data are needed\n- customization: you can easily customize the software behavior in Python and see the changes immediately\n- interactivity: all of your annotations are immediately available as Python objects as soon as you edit something\n\n## Features\n\n- ↵ multiline and nested span annotations\n- 🖇️ nested, relational, complex annotation with table views\n- 🔗 multiple data type: hyperlinks, text, lists\n- 🪟 text view or table view\n- ✨ extensive customization power\n- 🐍 write your app in Python, execute it in the browser (or in the kernel, you decide)\n- 🚀 fast: the client side is written in React, and every action is processed in the browser directly by default\n- 🌐 websocket communication: you do not need to open any port\n- ⏮️ immutable state management, any state mutation is recorded and undoable\n\n## Citation\n\nIf you use Metanno, consider citing this work as below.\n\n```bibtex\n@software{wajsburt_metanno,\n  author       = {Wajsbürt, Perceval},\n  title        = {Metanno: a modular annotator building framework},\n  month        = feb,\n  year         = 2024,\n  publisher    = {Zenodo},\n  version      = {0.0.9},\n  doi          = {10.5281/zenodo.10689827},\n  url          = {https://doi.org/10.5281/zenodo.10689827}\n}\n```\n\n## Installation\n\nThis project is still under development and is subject to change.\nA simple pip install should be enough if you use Jupyterlab 3. You do not need to open any port.\n```\n# To setup the environment\nconda create --name annotation python=3.9\nconda activate annotation\npip install ipykernel \u0026\u0026 python -m ipykernel install --user --name annotation\n\n# To install the package\npip install metanno\n```\n\nIf **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\n\n```\npip install metanno --user\n```\n\n## Why\n\nThe choice of annotation software must be taken into account in the design of the annotation scheme.\nFor 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.\nThere are many annotation tools available (see [Neves et al.](https://pubmed.ncbi.nlm.nih.gov/31838514/)), but most of them are either proprietary, poorly adapted to document or multi-document annotation,\nrequire a complex installation that is not compatible with existing remote work environments, or are difficult to customize.\nFinally, the standardization of annotation levels (mention / relation / event) is an obstacle to the development of new tasks.\nGiven the limitations of the existing softwares and the difficulty to cover every need with a single static annotator,\nthis project was initiated to provide a modular and fully customizable annotation framework, Metanno, and address these difficulties.  \n\n## Demo\n\nYou can try it with [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/percevalw/metanno/HEAD?urlpath=lab%2Ftree%2Fexamples%2FAnnotator.ipynb). Be patient though, when there is no cached build, it may take a few minutes to start.\n\n![https://github.com/percevalw/metanno/raw/master/doc/screenshot.png](https://github.com/percevalw/metanno/raw/master/doc/screenshot.png)\n\n## How it works\n\n\u003cimg src=\"https://github.com/percevalw/metanno/raw/master/doc/how.png\" width=500px /\u003e\n\nAll the app is controlled by a single state, replicated on both the frontend (the Jupyter client) and the backend (the Python kernel).\nEach 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.\nThis 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\nuser is answered immediately.\nIf 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.\nIf 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\nwith `@frontend_only` or `@kernel_only`, and the call will be transmitted over the Jupyter websocket.\n\n## Todo\n\n- add basic app samples\n- add a documentation\n- add more table column types and renderers (numerical, dates, ...)\n- ~~add customizable column filterers~~\n- add relations visualizations and edition with editable arrows\n- add an image annotation view\n- ~~finish javascript to typescript conversion~~\n- ~~customizable undo / redo logic~~\n- add multi-cell editing (see a [react-data-grid](https://github.com/adazzle/react-data-grid) PR)\n- add a test suite (Cypress ?)\n- make a standalone version (without Jupyter)\n\n## Contribute\n\nAny contribution is welcome, feel free to open a PR.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpercevalw%2Fmetanno","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpercevalw%2Fmetanno","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpercevalw%2Fmetanno/lists"}