{"adoption": {"forks": 299, "observed_at": "2026-08-28T04:03:28.279171+00:00", "stars": 1071}, "canonical_url": "https://ross.abutalabs.com/products/yedda", "card": {"archived": false, "artifact_type": "application", "description": "YEDDA: A Lightweight Collaborative Text Span Annotation Tool. Code for ACL 2018 Best Demo Paper Nomination.", "domain": ["developer-tools", "text-editors"], "enriched": true, "function": ["nlp", "gui", "developer-tools"], "health_score": 20, "homepage": null, "language": "Python", "license": "Apache-2.0", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["jiesutd/YEDDA"], "name": "jiesutd/YEDDA", "platform": ["python", "windows", "cross-platform"], "pushed_at": "2023-02-19T08:17:40+00:00", "repo": "jiesutd/YEDDA", "stars": 1071, "tags": ["annotation-tool", "named-entity-recognition", "text-span-annotation", "tkinter", "human-annotation", "ner", "natural-language-processing", "linux", "macos", "desktop"], "topics": ["annotations", "entity", "chunk", "python", "tkinter", "event", "manual", "analysis", "ner", "recommender-system", "sutdannotator", "named-entity-recognition", "human-annotation", "annotation-tool"], "urls": [], "use_cases": ["annotate named entities in text for NER training data", "label text spans with custom entity categories using keyboard shortcuts", "create training data for sequence labeling models", "collaboratively annotate text corpora across Windows, Linux, and macOS", "review and analyze annotator productivity and results as an admin", "export annotated text to sequence format for machine learning pipelines"], "what_it_is": "YEDDA is a lightweight desktop GUI tool for manually annotating text spans with entity, chunk, or event labels, built with Python's tkinter. It supports efficient shortcut-key annotation, batch command annotation, intelligent label recommendation, and administrator analysis of annotation results.", "when_to_avoid": ["you need web-based collaborative annotation with real-time multi-user sync", "you require annotation of images, audio, or other non-text media", "you want modern actively maintained tooling with recent updates", "you need integration with cloud annotation pipelines or APIs"], "when_to_choose": ["you need a free, offline desktop tool for manual text span annotation", "you want fast shortcut-driven annotation for NER or chunking datasets", "you work with multiple languages including Chinese and emoji", "you need admin analytics on annotation quality and speed"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/yedda", "repo": "jiesutd/YEDDA", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.279171+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:53:49.852741+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c44f38f4871f2f5467f9c5a9dc607a1cd928e0c16246e25670d94313d82661f", "fetched_at": "2026-08-28T04:03:28.279171+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jiesutd/YEDDA"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.279171+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:53:49.852741+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c44f38f4871f2f5467f9c5a9dc607a1cd928e0c16246e25670d94313d82661f", "fetched_at": "2026-08-28T04:03:28.279171+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jiesutd/YEDDA"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:53:49.852741+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c44f38f4871f2f5467f9c5a9dc607a1cd928e0c16246e25670d94313d82661f", "fetched_at": "2026-08-28T04:03:28.279171+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jiesutd/YEDDA"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.279171+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.279171+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.279171+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:53:49.852741+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c44f38f4871f2f5467f9c5a9dc607a1cd928e0c16246e25670d94313d82661f", "fetched_at": "2026-08-28T04:03:28.279171+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jiesutd/YEDDA"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.279171+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.279171+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:53:49.852741+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c44f38f4871f2f5467f9c5a9dc607a1cd928e0c16246e25670d94313d82661f", "fetched_at": "2026-08-28T04:03:28.279171+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jiesutd/YEDDA"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.279171+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.279171+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.279171+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:53:49.852741+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c44f38f4871f2f5467f9c5a9dc607a1cd928e0c16246e25670d94313d82661f", "fetched_at": "2026-08-28T04:03:28.279171+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jiesutd/YEDDA"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.279171+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:28.279171+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:53:49.852741+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c44f38f4871f2f5467f9c5a9dc607a1cd928e0c16246e25670d94313d82661f", "fetched_at": "2026-08-28T04:03:28.279171+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jiesutd/YEDDA"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:53:49.852741+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c44f38f4871f2f5467f9c5a9dc607a1cd928e0c16246e25670d94313d82661f", "fetched_at": "2026-08-28T04:03:28.279171+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jiesutd/YEDDA"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:53:49.852741+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c44f38f4871f2f5467f9c5a9dc607a1cd928e0c16246e25670d94313d82661f", "fetched_at": "2026-08-28T04:03:28.279171+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jiesutd/YEDDA"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:53:49.852741+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0c44f38f4871f2f5467f9c5a9dc607a1cd928e0c16246e25670d94313d82661f", "fetched_at": "2026-08-28T04:03:28.279171+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jiesutd/YEDDA"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3890, "days_push": 1291, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}