Tags by themselves are insufficient to categorize packages. They're more free-form, allowing further specificity and special cases. But they also add ambiguity and variance (see
Trove classifiers add a tree categorization and reduce ambiguity.
Why not have both?
Yes, why not? It's simpler to map Trove classifiers onto tags. And count those as primary tags. Thusly it becomes mostly an UI feature.
On project submission some prominent highlighting indicates Trove-tags, yet allows free-form plain tags.
Trove leaves can map easily onto tag-words. Tree traversal regroups tags into Trove branches.
For JSON/API exporting, a classifiers: (see PyPI) list can be regenerated.
For the search function, it would make sense to allow Trove selections for constraining, yet plain tags for inclusivity.
The freshcode db thus can keep using the tags approach for unification, without missing out on cohesion.
The PyPI Trove list was used as source. It wasn't very current however, and needs further refinement. (Initially a Calc sheet serves as exportable map. Later, and obviously, an UI for elevating tags as categories and tags into Trove leaves made sense.)
Plural forms into singular. (Since FCc is using trove leaves as tags, not as category labels, it's more appropriate to tag a project "Text Editor", not "Text Editors".)
Removed Python versioning. (Makes sense for PyPI to mirror Require- fields, but is a bit too elaborate for general cross-language project listings on FCc.)
References to "Other xy..." removed. (Plain tags can handle fringe languages, features and categories.)
Old languages and Window managers removed.
License and Stability are filtered out from the final Trove tree.
Simplification; a few decorations, double names and notes in parenthesis have been removed.
To retain comparability, an export "trove.pypi-map.json" is kept. Some old PyPI categories are dropped on one end, many new ones weren't in Pythons list; while a few differ in pluralization or detail.