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=&quot;ECs_0242&quot;
 CDS             273792..275552
                 /locus_tag=&quot;ECs_0242&quot;
                 /codon_start=1
                 /transl_table=11
                 /product=&quot;type IV secretion protein Rhs&quot;
                 /protein_id=&quot;NP_308269.1&quot;
                 /translation=&quot;[...]&quot;

(from https://www.ncbi.nlm.nih.gov/nuccore/NC_002695.2)
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 &quot;type IV secretion protein Rhs&quot;, I found a UniProt entry which has a link to a QuickGO page, which includes three categories: &quot;transposase activity&quot;, &quot;transposition, DNA-mediated&quot; and &quot;DNA binding&quot;. 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.: &quot;type IV secretion protein Rhs&quot;) 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&amp;columns=id%2Centry%20name%2Creviewed%2Cprotein%20names%2Cgenes%2Cgo(biological%20process)%2Cgo(molecular%20function)%2Cgo(cellular%20component)&amp;sort=score
or, in tab-separated format:
https://www.uniprot.org/uniprot/?query=name:%22type%20IV%20secretion%20protein%20Rhs%22&amp;format=tab&amp;limit=10&amp;columns=id,entry%20name,reviewed,protein%20names,genes,go(biological%20process),go(molecular%20function),go(cellular%20component)&amp;sort=score
(Remove the &quot;&amp;limit=10&quot; part from the URL to obtain the full set instead of the first 10 entries.)
You can add colums as described here:
https://www.uniprot.org/help/customize,
https://www.youtube.com/watch?v=ado1r8IDm3U (video, at about 1min25)
or
https://insideuniprot.blogspot.com/2015/03
Note that while UniProt tries to improve protein name annotation, the unreviewed section of UniProtKB (i.e. UniProtKB/TrEMBL) is often far from perfect and its accuracy relies on the information provided by the submitter of the nucleotide entry, unless an automatic annotation rule is available to assign a more suitable name (see https://www.uniprot.org/help/protein_names).
Please don't hesitate to contact the UniProt helpdesk if you have any additional questions.