Beispiel #1
0
def find_snomedct_server(term):
    apikey = "ca310f05-53e6-4984-82fd-8691dc30174e"
    AuthClient = Authentication(apikey)
    version = "2017AB"
    tgt = AuthClient.gettgt()
    query = {'ticket': AuthClient.getst(tgt), 'targetSource': 'SNOMEDCT_US'}
    base_uri = "https://uts-ws.nlm.nih.gov/rest"
    search_uri = "/search/current?string="
    content_uri = "/content/current/CUI/"
    source = "&sabs=SNOMEDCT_US"
    search_type = '&searchType=words'
    path = base_uri + search_uri + term + search_type + source
    r = requests.get(path, params=query)
    code, name, semantic = "", "", ""
    try:
        items = json.loads(r.text)
        pprint(items['result']['results'])
        code, name = select_code(items['result']['results'], term)
        if code != "":
            path2 = base_uri + content_uri + code
            tgt2 = AuthClient.gettgt()
            query2 = {
                'ticket': AuthClient.getst(tgt2),
                'targetSource': 'SNOMEDCT_US'
            }
            r2 = requests.get(path2, params=query2)
            try:
                items2 = json.loads(r2.text)
                semantic = items2['result']['semanticTypes'][0]['name']
            except json.decoder.JSONDecodeError:
                semantic = "UNKNOWN"
    except json.decoder.JSONDecodeError:
        code, name = "", ""
    return code, name, semantic
Beispiel #2
0
class DirectQuery:
    """
    For piping queries to MSH and building pools of stems from related concepts.

    """
    def __init__(self, identifier):
        """
        :param identifier: (str) search term

        Other attributes are all defaults by design.

        """
        #authorize
        self.AuthClient = Authentication()
        self.AuthClient.gettgt()

        #set attributes
        self.identifier = identifier
        self.version = "current"
        self.source = "MSH"
        self.returntype = "concept"

        #send the query and return dataframe
        self.get_query_result()
        self.df = self.parse_query_result()

    def get_query_result(self):
        """
        Search by human-readable string.

        :return: concepts
        """
        uri = "https://uts-ws.nlm.nih.gov"
        content_endpoint = "/rest/search/{0}?string={1}&sabs={2}&returnIdType={3}".format(
                           self.version, self.identifier, self.source, self.returntype)

        self.query = {'ticket':self.AuthClient.getst()}

        r = requests.get(uri+content_endpoint, params=self.query)

        items = json.loads(r.text)
        self.jsonData = items["result"]

    def parse_query_result(self):
        """
        Extract name and unique id from results.

        :return: pandas dataframe
        """
        results = self.jsonData['results']

        df = pd.DataFrame(results)
        df.drop(['rootSource', 'uri'], axis=1, inplace=True)

        return df
Beispiel #3
0
def get_umls_ticket2(tgt=tgt, AuthClient=AuthClient, apikey=umls_api):
    """
    Get a single use ticket for the UMLS REST services.
    It is supposed that an Author Client and a Ticket
    Granting Service have already been set-up in case
    the apikey = None. If an api-key is given, create the
    above needed instances and generate a new ticket.
    Input:
        - apikey: str,
        UMLS REST services api-key. Default is None and
        the already establised service is used
    Output:
        - string of the generated ticket
    """

    # Get ticket from the already establised service
    if not (tgt) and not (AuthClient):
        AuthClient = Authentication(umls_api)
        tgt = AuthClient.gettgt()
    return AuthClient.getst(tgt)
Beispiel #4
0
class CLI:
    """
    Command-line interface for querying single terms.
    More flexible, keeping around for potential future use/historical reasons.
    """

    def __init__(self, argv=None):
        """
        :param argv: for testing purposes only

        """
        self.parser = argparse.ArgumentParser(description='process user given parameters')
        #parser.add_argument("-u", "--username", required =  True, dest="username", help = "enter username")
        #parser.add_argument("-p", "--password", required =  True, dest="password", help = "enter passowrd")
        self.parser.add_argument("-k", "--apikey", required = False, dest = "apikey",
                                 default = os.environ.get("APIKEY"),
                                 help = "enter api key from your UTS Profile")
        self.parser.add_argument("-v", "--version", required = False, dest="version",
                                 default = "current", help = "enter version example-2015AA")
        self.parser.add_argument("-i", "--identifier", required = True, dest="identifier",
                                 help = "enter identifier example-C0018787")
        self.parser.add_argument("-s", "--source", required = False, dest="source",
                                 default = 'MSH', help = "enter source name if known")
        self.parser.add_argument("-r", "--returntype", required = False, dest='returntype',
                                 default = "concept",
                                 help = "choose return type (‘aui’,‘concept’,‘code’,\
                                        ‘sourceConcept’,‘sourceDescriptor’, ‘sourceUi’)")

        if argv is not None:
            self.args = self.parser.parse_args(argv)
        else:
            self.args = self.parser.parse_args()

    def cli_authenticate(self):

        #username = args.username
        #password = args.password

        self.AuthClient = Authentication()

    def construct_query(self):

        self.version = self.args.version
        self.identifier = self.args.identifier
        self.source = self.args.source
        self.returntype = self.args.returntype
        self.AuthClient.gettgt()

    def get_query_result(self):
        """
        Search by human-readable string.

        :return: concepts
        """

        self.construct_query()

        uri = "https://uts-ws.nlm.nih.gov"
        content_endpoint = "/rest/search/{0}?string={1}&sabs={2}&returnIdType={3}".format(
                           self.version, self.identifier, self.source, self.returntype)

        self.query = {'ticket':self.AuthClient.getst()}

        r = requests.get(uri+content_endpoint, params=self.query)

        items = json.loads(r.text)
        self.jsonData = items["result"]

        #print(self.jsonData)

        ##uncomment the print statment if you want the raw json output, or you can just look at the documentation :=)
        #https://documentation.uts.nlm.nih.gov/rest/concept/index.html#sample-output
        #https://documentation.uts.nlm.nih.gov/rest/source-asserted-identifiers/index.html#sample-output
        #print (json.dumps(items, indent = 4))

    def parse_query_result(self):
        """
        Extract name and unique id from results.

        :return: pandas dataframe
        """
        results = self.jsonData['results']

        df = pd.DataFrame(results)
        df.drop(['rootSource', 'uri'], axis=1, inplace=True)

        return df