Spaces:
Running
Running
""" | |
To use Google Web Search API, | |
follow the instructions [here](https://developers.google.com/custom-search/v1/overview) | |
to get your Google search api key. | |
To use Bing Web Search API, | |
follow the instructions [here](https://www.microsoft.com/en-us/bing/apis/bing-web-search-api) | |
and obtain your Bing subscription key. | |
""" | |
import os | |
from graphgen.utils import logger | |
async def search_all( | |
search_types: dict, search_entities: set[str] | |
) -> dict[str, dict[str, str]]: | |
""" | |
:param search_types | |
:param search_entities: list of entities to search | |
:return: nodes with search results | |
""" | |
results = {} | |
for search_type in search_types: | |
if search_type == "wikipedia": | |
from graphgen.models import WikiSearch | |
from graphgen.operators.search.kg.search_wikipedia import search_wikipedia | |
wiki_search_client = WikiSearch() | |
wiki_results = await search_wikipedia(wiki_search_client, search_entities) | |
for entity_name, description in wiki_results.items(): | |
if description: | |
results[entity_name] = {"wikipedia": description} | |
elif search_type == "google": | |
from graphgen.models import GoogleSearch | |
from graphgen.operators.search.web.search_google import search_google | |
google_search_client = GoogleSearch( | |
subscription_key=os.environ["GOOGLE_SEARCH_API_KEY"], | |
cx=os.environ["GOOGLE_SEARCH_CX"], | |
) | |
google_results = await search_google(google_search_client, search_entities) | |
for entity_name, description in google_results.items(): | |
if description: | |
results[entity_name] = results.get(entity_name, {}) | |
results[entity_name]["google"] = description | |
elif search_type == "bing": | |
from graphgen.models import BingSearch | |
from graphgen.operators.search.web.search_bing import search_bing | |
bing_search_client = BingSearch( | |
subscription_key=os.environ["BING_SEARCH_API_KEY"] | |
) | |
bing_results = await search_bing(bing_search_client, search_entities) | |
for entity_name, description in bing_results.items(): | |
if description: | |
results[entity_name] = results.get(entity_name, {}) | |
results[entity_name]["bing"] = description | |
elif search_type == "uniprot": | |
# from graphgen.models import UniProtSearch | |
# from graphgen.operators.search.db.search_uniprot import search_uniprot | |
# | |
# uniprot_search_client = UniProtSearch() | |
# | |
# uniprot_results = await search_uniprot( | |
# uniprot_search_client, search_entities | |
# ) | |
raise NotImplementedError( | |
"Processing of UniProt search results is not implemented yet." | |
) | |
else: | |
logger.error("Search type %s is not supported yet.", search_type) | |
continue | |
return results | |