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)