melvinalves commited on
Commit
20b7c2a
·
verified ·
1 Parent(s): 1e0b741

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -23
app.py CHANGED
@@ -38,9 +38,7 @@ def load_keras(name):
38
 
39
  @st.cache_resource
40
  def load_hf_encoder(repo_id, subfolder=None, base_tok=None):
41
- """
42
- Carrega tokenizer + encoder HF (converte TF-weights p/ PyTorch on-the-fly).
43
- """
44
  if base_tok is None:
45
  base_tok = repo_id
46
  tok = AutoTokenizer.from_pretrained(base_tok, do_lower_case=False)
@@ -53,14 +51,12 @@ def load_hf_encoder(repo_id, subfolder=None, base_tok=None):
53
  return tok, mdl
54
 
55
  def embed_seq(model_ref, seq, chunk):
56
- """
57
- Devolve embedding CLS médio (divide seq. longa em chunks se necessário).
58
- """
59
- if isinstance(model_ref, tuple): # ProtBERT fine-tuned
60
  repo_id, subf = model_ref
61
  tok, mdl = load_hf_encoder(repo_id, subfolder=subf,
62
  base_tok="Rostlab/prot_bert")
63
- else: # modelo base ESM-2
64
  tok, mdl = load_hf_encoder(model_ref)
65
 
66
  parts = [seq[i:i+chunk] for i in range(0, len(seq), chunk)]
@@ -112,31 +108,34 @@ if os.path.exists("logo.png"):
112
 
113
  st.title("Predição de Funções Moleculares de Proteínas (GO:MF)")
114
 
115
- fasta_input = st.text_area("Insere uma ou mais sequências FASTA:", height=300)
116
- predict_clicked = st.button("Prever GO terms")
117
 
118
  # ——————————————————— UTILITÁRIOS ——————————————————— #
119
  def parse_fasta_multiple(text):
120
  """Extrai [(header, seq)] de texto FASTA (bloco inicial sem '>' suportado)."""
121
- out, blocks = [], text.strip().split(">")
122
- for i, blk in enumerate(blocks):
123
  if not blk.strip():
124
  continue
125
- lines = blk.strip().splitlines()
126
- if i > 0:
127
- header, seq = lines[0].strip(), "".join(lines[1:]).replace(" ", "").upper()
128
- else:
129
- header, seq = f"Seq_{i+1}", "".join(lines).replace(" ", "").upper()
130
  if seq:
131
  out.append((header, seq))
132
  return out
133
 
134
  def clean_definition(defin: str) -> str:
135
- """Remove '\"', blocos [ ... ] e múltiplos espaços."""
136
- defin = re.sub(r"\\[[^\\]]*\\]", "", defin or "") # tira citações [...]
137
- defin = defin.replace('"', "") # tira aspas
138
- defin = re.sub(r"\\s{2,}", " ", defin) # colapsa espaços
139
- return defin.strip()
 
 
 
 
 
140
 
141
  def go_link(go_id, name=""):
142
  url = f"https://www.ebi.ac.uk/QuickGO/term/{go_id}"
@@ -201,7 +200,7 @@ if predict_clicked:
201
 
202
  mostrar(header, y_ens)
203
 
204
- # ——————————————————— LISTA COMPLETA (597) ——————————————————— #
205
  with st.expander("Mostrar lista completa dos 597 GO terms possíveis", expanded=False):
206
  cols = st.columns(3)
207
  for i, go_id in enumerate(GO):
 
38
 
39
  @st.cache_resource
40
  def load_hf_encoder(repo_id, subfolder=None, base_tok=None):
41
+ """Carrega tokenizer + encoder; converte TF-weights → PyTorch on-the-fly."""
 
 
42
  if base_tok is None:
43
  base_tok = repo_id
44
  tok = AutoTokenizer.from_pretrained(base_tok, do_lower_case=False)
 
51
  return tok, mdl
52
 
53
  def embed_seq(model_ref, seq, chunk):
54
+ """Devolve embedding CLS médio; corta seq. longa em chunks se preciso."""
55
+ if isinstance(model_ref, tuple): # ProtBERT fine-tuned
 
 
56
  repo_id, subf = model_ref
57
  tok, mdl = load_hf_encoder(repo_id, subfolder=subf,
58
  base_tok="Rostlab/prot_bert")
59
+ else: # modelo base ESM-2
60
  tok, mdl = load_hf_encoder(model_ref)
61
 
62
  parts = [seq[i:i+chunk] for i in range(0, len(seq), chunk)]
 
108
 
109
  st.title("Predição de Funções Moleculares de Proteínas (GO:MF)")
110
 
111
+ fasta_input = st.text_area("Insere uma ou mais sequências FASTA:", height=300)
112
+ predict_clicked = st.button("Prever GO terms")
113
 
114
  # ——————————————————— UTILITÁRIOS ——————————————————— #
115
  def parse_fasta_multiple(text):
116
  """Extrai [(header, seq)] de texto FASTA (bloco inicial sem '>' suportado)."""
117
+ out = []
118
+ for i, blk in enumerate(text.strip().split(">")):
119
  if not blk.strip():
120
  continue
121
+ lines = blk.strip().splitlines()
122
+ header = lines[0].strip() if i else f"Seq_{i+1}"
123
+ seq = "".join(lines[1:] if i else lines).replace(" ", "").upper()
 
 
124
  if seq:
125
  out.append((header, seq))
126
  return out
127
 
128
  def clean_definition(defin: str) -> str:
129
+ """
130
+ Retorna apenas o texto dentro das primeiras aspas.
131
+ Se não houver aspas, devolve texto antes do primeiro '['.
132
+ """
133
+ if not defin:
134
+ return ""
135
+ m = re.search(r'"([^"]+)"', defin)
136
+ if m:
137
+ return m.group(1).strip()
138
+ return defin.split("[", 1)[0].strip()
139
 
140
  def go_link(go_id, name=""):
141
  url = f"https://www.ebi.ac.uk/QuickGO/term/{go_id}"
 
200
 
201
  mostrar(header, y_ens)
202
 
203
+ # ——————————————————— LISTA COMPLETA ——————————————————— #
204
  with st.expander("Mostrar lista completa dos 597 GO terms possíveis", expanded=False):
205
  cols = st.columns(3)
206
  for i, go_id in enumerate(GO):