{"id":25180514,"url":"https://github.com/rsdc2/syntax-treebank-annotator","last_synced_at":"2026-02-28T09:34:09.042Z","repository":{"id":154404422,"uuid":"614103453","full_name":"rsdc2/syntax-treebank-annotator","owner":"rsdc2","description":"Annotation environment for syntactic analysis of natural language","archived":false,"fork":false,"pushed_at":"2026-02-18T08:20:17.000Z","size":1220,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-18T12:53:36.546Z","etag":null,"topics":["annotations","syntax-analysis","typescript"],"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/rsdc2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-03-14T22:37:38.000Z","updated_at":"2026-02-18T08:20:20.000Z","dependencies_parsed_at":"2023-10-10T19:06:05.466Z","dependency_job_id":"4df8901a-845e-492a-96e1-50aad01777b7","html_url":"https://github.com/rsdc2/syntax-treebank-annotator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rsdc2/syntax-treebank-annotator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rsdc2%2Fsyntax-treebank-annotator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rsdc2%2Fsyntax-treebank-annotator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rsdc2%2Fsyntax-treebank-annotator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rsdc2%2Fsyntax-treebank-annotator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rsdc2","download_url":"https://codeload.github.com/rsdc2/syntax-treebank-annotator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rsdc2%2Fsyntax-treebank-annotator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29929351,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T19:37:42.220Z","status":"online","status_checked_at":"2026-02-28T02:00:07.010Z","response_time":90,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["annotations","syntax-analysis","typescript"],"created_at":"2025-02-09T16:18:39.045Z","updated_at":"2026-02-28T09:34:08.991Z","avatar_url":"https://github.com/rsdc2.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv\u003e\n  \u003cimg align=\"left\" valign=\"center\" src=\"assets/ISicily.jpg?raw=true\" alt=\"isicily logo\" height=\"80\" \u003e\n  \u003cimg align=\"left\" valign=\"center\" src=\"assets/oxford.png?raw=true\" alt=\"oxford logo\" height=\"80\"  style=\"padding-top: 80px\" \u003e\n  \u003cimg align=\"left\" valign=\"center\" src=\"assets/EU_ERC.jpg?raw=true\" alt=\"erc logo\" height=\"80\" \u003e\n\u003c/div\u003e\n\u003cbr clear=\"all\"\u003e\n\n# Syntax Treebank Annotator\n\nThe source code for the Syntax Treebank Annotator is written in a combination of JavaScript and [TypeScript](https://www.typescriptlang.org/), transpiled to JavaScript (ECMAScript 2022).\n\nThe annotator provides a UI for annotating dependency treebanks. \nIt has been designed for use, in the first instance, \nwith the [I.Sicily](http://sicily.classics.ox.ac.uk/) corpus, \nalthough it can be applied to texts in any language.\n\n## Getting started\n\n![Alt text](assets/annotator_screenshot.png \"Screenshot of the annotator\")\n\n### Run locally\n\nDownload or clone the repository and open ```index.html``` in a browser.\n\n### Run from a local server\n\nAlthough it isn't necessary, you can also serve the website locally.\nTo do this, from the repository directory:\n\n- Install dependency ([```http-server```](https://www.npmjs.com/package/http-server)):\n\n```\nnpm install\n```\n\n- Run the server locally:\n\n```\nnpx http-server\n```\n\n- Open localhost according to the message provided by ```http-server```:\n\n```\nhttp://localhost:8080/\n```\n\n\n### Build\n\n``` bash\n# Install dev dependencies\nnpm install\n\n# Transpile from TS to JS\nnpx tsc\n```\n\n## Relationship to other annotators\n\nThe annotator is designed to be compatible with \n[Arethusa](https://www.perseids.org/tools/arethusa/app/#/), \ncurrently the annotator of choice for those working \non ancient Greek and Latin texts.\n\nThe annotator has similar aims to Arethusa. \nHowever, it differs in the following ways, and \nis therefore somewhat complementary:\n\n### No backend server needed\nWhereas Arethusa has a backend, \nthis annotator runs entirely in the browser. \nThe advantage of this is that it's easy to\nget up and running.\nThe disadvantage is that there are currently\nno backend services, allowing for \ne.g. collaboration.\n\n\n### Agnostic as to dependency framework\nThere are several depdency grammars out there.\nArethusa is designed for use with the\n[Ancient Greek and Latin dependency Treebank (AGLDT)](http://perseusdl.github.io/treebank_data/).\nThe annotator is agnostic as to\ndependency grammar: \nyou are free to use whichever schema you wish (e.g. PROIEL, Universal Dependencies)\nor you can make up your own.\n\n\n### Secondary dependencies\nAGLDT does not allow for the annotation of secondary dependencies.\nHowever, this is possible both in \n[PROIEL](http://dev.syntacticus.org/annotation-guide/#introduction) dependencies and in\n[Universal Dependencies](https://universaldependencies.org/u/overview/enhanced-syntax.html).\nAccordingly, you may wish to make use of this.\n\n**To create a secondary dependency in this annotator,**\n**simply right click on the nodes you wish to connect,**\n**rather than left click.** \n\n\n### Only syntax\nArethusa allows you to annotate morphology as well\nas syntax. \nCurrently the annotator only allows for the annotation \nof syntax \n(although it should preserve any morphology annotation).\n\n### TEI EpiDoc import\nThe annotator can import tokens directly from [TEI EpiDoc](https://epidoc.stoa.org/gl/latest/)\ntexts, provided that tokens are enclosed in \n```\u003cw\u003e``` or ```\u003cname\u003e``` tags. \n\n## Other points to note\n\n### Token IDs\n\nThe annotator expects:\n- Each token in the treebank to have a unique ID,\n- Token IDs to be sequential integers starting at 1 (with the first token).\n\nOn load, the annotator will assign IDs to each token meeting these criteria.\nDependencies (primary and secondary) should be preserved in this process,\nprovided that at least within each sentence each token has a unique ID.\n\n### Artificial tokens\n\nIt is possible to add artificial tokens using the annotator. \nBy default, these are given the text '0'. At present, the form cannot be \nchanged within the annotator, but can of course be changed by manually\nediting the XML.\n\nAt present the annotator does not read the ```@insertion_id``` attribute\nin an Arethusa XML file; the insertion position is simply the linear order\nin the XML file.\n\n### Sentence, token and filesize limits\n\nAt present the annotator is only able to handle files with:\n\n- a maximum total of 2000 sentences\n- a maximum total of 800 tokens\n- a maximum of 270 tokens per sentence\n- a maximum filesize of 50KB\n\n## Dependencies\nThe syntax treebank annotator was written in [TypeScript](https://www.typescriptlang.org/) ([Apache 2.0](https://github.com/microsoft/TypeScript/blob/main/LICENSE.txt)) and uses:\n\n- the library [D3.js](https://d3js.org/) ([ISC](https://github.com/d3/d3/blob/main/LICENSE)) for representation of the trees (graphs). \n\n- [```http-server```](https://www.npmjs.com/package/http-server) (MIT, see LICENSES folder) to serve locally.\n\nDev dependencies are the D3 types provided by:\n- [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/d3) ([MIT](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE)). \n\nThe licenses for these projects are located in the `LICENSES` directory.\n\n\n## Acknowledgements\n\nThe XML file format is designed to be compatible with that used by [Arethusa](https://www.perseids.org/tools/arethusa/app/#/).\n\nThe software for the Syntax Treebank Annotator was written by Robert Crellin as part of the Crossreads project at the Faculty of Classics, University of Oxford, and is licensed under the MIT license. This project has received funding from the European Research Council (ERC) under the European Union’s Horizon 2020 research and innovation programme (grant agreement No 885040, “Crossreads”).\n\nSample texts from I.Sicily are either directly form, or derived from, the [I.Sicily corpus](https://github.com/ISicily/ISicily), which are made available under the [CC-BY-4.0 licence](https://creativecommons.org/licenses/by/4.0/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frsdc2%2Fsyntax-treebank-annotator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frsdc2%2Fsyntax-treebank-annotator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frsdc2%2Fsyntax-treebank-annotator/lists"}