{"adoption": {"forks": 127, "observed_at": "2026-08-28T04:08:34.014147+00:00", "stars": 4060}, "canonical_url": "https://ross.abutalabs.com/products/python-ftfy", "card": {"archived": false, "artifact_type": "library", "description": "Fixes mojibake and other glitches in Unicode text, after the fact.", "domain": ["developer-tools", "text-editors"], "enriched": true, "function": ["nlp", "parser", "developer-tools"], "health_score": 29, "homepage": "http://ftfy.readthedocs.org", "language": "Python", "license": "NOASSERTION", "license_family": "other", "maturity": "stable", "member_repos": ["rspeer/python-ftfy"], "name": "rspeer/python-ftfy", "platform": ["python", "cli", "cross-platform"], "pushed_at": "2024-10-30T21:00:49+00:00", "repo": "rspeer/python-ftfy", "stars": 4060, "tags": ["unicode", "mojibake", "text-cleaning", "encoding-fixes", "data-cleaning", "natural-language-processing"], "topics": [], "urls": [], "use_cases": ["fix mojibake in scraped text", "clean up garbled unicode characters in a dataset", "repair text that was decoded with the wrong encoding", "fix broken utf-8 strings in python", "clean text before training a language model", "undo double-encoded unicode"], "what_it_is": "ftfy is a Python library that fixes mojibake (encoding mix-ups) and other Unicode text glitches after the fact, recovering original text from mis-decoded UTF-8. It also provides a command-line interface for fixing text files.", "when_to_avoid": ["you need general encoding detection for unknown files rather than fixing known mojibake", "you need to normalize or transliterate text rather than repair encoding errors", "you're not working in Python and can't use the CLI"], "when_to_choose": ["you have text with visible mojibake like 'âœ”' or 'Ã©' that needs repair", "you're cleaning web-scraped or user-submitted text for NLP pipelines", "you want a well-tested, heuristic-based fixer rather than writing encoding hacks yourself"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/python-ftfy", "repo": "rspeer/python-ftfy", "role": "main", "score": 34}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:34.014147+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:23:35.825241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5a3c0fefdf296387ce06339451116a85b18eef084cca8fa5a52f749afdd79ebb", "fetched_at": "2026-08-28T04:08:34.014147+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rspeer/python-ftfy"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:34.014147+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:23:35.825241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5a3c0fefdf296387ce06339451116a85b18eef084cca8fa5a52f749afdd79ebb", "fetched_at": "2026-08-28T04:08:34.014147+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rspeer/python-ftfy"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:23:35.825241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5a3c0fefdf296387ce06339451116a85b18eef084cca8fa5a52f749afdd79ebb", "fetched_at": "2026-08-28T04:08:34.014147+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rspeer/python-ftfy"}], "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:08:34.014147+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:34.014147+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:34.014147+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:23:35.825241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5a3c0fefdf296387ce06339451116a85b18eef084cca8fa5a52f749afdd79ebb", "fetched_at": "2026-08-28T04:08:34.014147+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rspeer/python-ftfy"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:34.014147+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:34.014147+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:23:35.825241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5a3c0fefdf296387ce06339451116a85b18eef084cca8fa5a52f749afdd79ebb", "fetched_at": "2026-08-28T04:08:34.014147+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rspeer/python-ftfy"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:34.014147+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:34.014147+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:34.014147+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:23:35.825241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5a3c0fefdf296387ce06339451116a85b18eef084cca8fa5a52f749afdd79ebb", "fetched_at": "2026-08-28T04:08:34.014147+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rspeer/python-ftfy"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:34.014147+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:34.014147+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:23:35.825241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5a3c0fefdf296387ce06339451116a85b18eef084cca8fa5a52f749afdd79ebb", "fetched_at": "2026-08-28T04:08:34.014147+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rspeer/python-ftfy"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:23:35.825241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5a3c0fefdf296387ce06339451116a85b18eef084cca8fa5a52f749afdd79ebb", "fetched_at": "2026-08-28T04:08:34.014147+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rspeer/python-ftfy"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:23:35.825241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5a3c0fefdf296387ce06339451116a85b18eef084cca8fa5a52f749afdd79ebb", "fetched_at": "2026-08-28T04:08:34.014147+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rspeer/python-ftfy"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:23:35.825241+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "5a3c0fefdf296387ce06339451116a85b18eef084cca8fa5a52f749afdd79ebb", "fetched_at": "2026-08-28T04:08:34.014147+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rspeer/python-ftfy"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 40}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 5122, "days_push": 672, "days_rel": 677, "gap_med": 14, "n_releases_24m": 2}, "score": 34, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}