# How to programmatically classify a protein according to its genbank feature

Say I found an interesting protein in a genbank file, e.g.:

 gene            273792..275552
/locus_tag="ECs_0242"
CDS             273792..275552
/locus_tag="ECs_0242"
/codon_start=1
/transl_table=11
/product="type IV secretion protein Rhs"
/protein_id="NP_308269.1"
/translation="[...]"


I would like to programmatically get a classification of this protein.
The (not new) motivation is that my pipeline finds many proteins, and I want to identify enriched or depleted protein classes (e.g., enrichment for DNA-binding proteins).

By googling for "type IV secretion protein Rhs", I found a UniProt entry which has a link to a QuickGO page, which includes three categories: "transposase activity", "transposition, DNA-mediated" and "DNA binding". From this page I can also get an ancestor chart for each of these categories, e.g.:

Optimally, the code would work quickly (preferably locally), and for a description from a CDS feature (e.g.: "type IV secretion protein Rhs") return the GO categories it belongs to. It would be even better to also have the ancestry of each category in a computer-readable format.

What is the best way to do that?
Is there a specific UniProt subset that fits my need (finding GO categories given a protein description)?
Is there a specific GO subset that fits my need (extracting ancestor GO categories as explained here)?

(I figured that GO categories fit my need of classifying proteins, but if a better option exists, please let me know)

Using the UniProt website API (https://www.uniprot.org/help/api) this could be done with a query like

https://www.uniprot.org/uniprot/?query=name%3A%22type%20IV%20secretion%20protein%20Rhs%22&columns=id%2Centry%20name%2Creviewed%2Cprotein%20names%2Cgenes%2Cgo(biological%20process)%2Cgo(molecular%20function)%2Cgo(cellular%20component)&sort=score

or, in tab-separated format:

https://www.uniprot.org/uniprot/?query=name:%22type%20IV%20secretion%20protein%20Rhs%22&format=tab&limit=10&columns=id,entry%20name,reviewed,protein%20names,genes,go(biological%20process),go(molecular%20function),go(cellular%20component)&sort=score

(Remove the "&limit=10" part from the URL to obtain the full set instead of the first 10 entries.)