Spaces:
Sleeping
Sleeping
File size: 1,612 Bytes
6e9bb07 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# 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)
|