UMLS Downloader
Don't worry about UMLS Terminology Services (UTS)
licensing and distribution rules - just use
umls_downloader
to write code that knows how to download content and use it
automatically from the following (non-exhaustive) list of resources:
or any content that can be downloaded through
the UTS ticket granting
system. There's no centralized list of content available through the UTS so
suggestions for additional resources are welcome through
the issue tracker.
Full documentation are available at umls-downloader.readthedocs.io.
Installation
$ pip install umls_downloader
Download A Specific Version of UMLS
import os
from umls_downloader import download_umls
api_key = ...
path = download_umls(version="2021AB", api_key=api_key)
expected_path = os.path.join(
os.path.expanduser("~"), ".data", "umls", "2021AB",
"umls-2021AB-mrconso.zip",
)
assert expected_path == path.as_posix()
After it's been downloaded once, it's smart and doesn't need to download again.
It gets stored using pystow
automatically
in the ~/.data/bio/umls
directory.
A full list of functions is available in the
documentation.
Automating Configuration of UTS Credentials
There are two ways to automatically set the username and password so you don't
have to worry about getting it and passing it around in your python code:
- Set
UMLS_API_KEY
in the environment - Create
~/.config/umls.ini
and set in the [umls]
section a api_key
key.
from umls_downloader import download_umls
path = download_umls(version="2021AB")
Download the Latest Version
First, you'll have to
install bioversions
with pip install bioversions
, whose job it is to look up the latest version of
many databases. Then, you can modify the previous code slightly by omitting
the version
keyword argument:
from umls_downloader import download_umls
path = download_umls()
Download and open the file
The UMLS file is zipped, so it's usually accompanied with the following
boilerplate code:
import zipfile
from umls_downloader import download_umls
path = download_umls()
with zipfile.ZipFile(path) as zip_file:
with zip_file.open("MRCONSO.RRF", mode="r") as file:
for line in file:
...
This exact code is wrapped with the open_umls()
using Python's context manager
so it can more simply be written as:
from umls_downloader import open_umls
with open_umls() as file:
for line in file:
...
The version
and api_key
arguments also apply here.
Why not an API?
The UMLS provides an API
for access to tiny bits of data at a time. There are even two recent (last 5
years) packages umls-api
connect-umls
that provide a wrapper
around them. However, API access is generally rate limited, difficult to use in
bulk, and slow. For working with UMLS (or any other database, for that matter)in
bulk, it's necessary to download full database dumps.
👋 Attribution
⚖️ License
The code in this package is licensed under the MIT License.
🍪 Cookiecutter
This package was created
with @audreyfeldroy's
cookiecutter package
using @cthoyt's
cookiecutter-snekpack
template.