Spaces:
Sleeping
Sleeping
# genesis/ontology.py | |
import requests | |
from typing import List | |
def expand_terms_with_ontology(query: str, umls_api_key: str, bioportal_api_key: str) -> List[str]: | |
"""Expand query terms using UMLS and BioPortal ontology APIs.""" | |
expanded_terms = set() | |
# Always include original query | |
expanded_terms.add(query) | |
# UMLS expansion | |
if umls_api_key: | |
try: | |
umls_url = "https://uts-ws.nlm.nih.gov/rest/search/current" | |
params = {"string": query, "apiKey": umls_api_key, "pageSize": 5} | |
r = requests.get(umls_url, params=params, timeout=10) | |
r.raise_for_status() | |
data = r.json() | |
for result in data.get("result", {}).get("results", []): | |
name = result.get("name") | |
if name and name.lower() != query.lower(): | |
expanded_terms.add(name) | |
except Exception as e: | |
print(f"[Ontology] UMLS expansion failed: {e}") | |
# BioPortal expansion | |
if bioportal_api_key: | |
try: | |
bp_url = "https://data.bioontology.org/search" | |
params = {"q": query, "apikey": bioportal_api_key} | |
r = requests.get(bp_url, params=params, timeout=10) | |
r.raise_for_status() | |
data = r.json() | |
for coll in data.get("collection", []): | |
label = coll.get("prefLabel") | |
if label and label.lower() != query.lower(): | |
expanded_terms.add(label) | |
except Exception as e: | |
print(f"[Ontology] BioPortal expansion failed: {e}") | |
return list(expanded_terms) | |