def METHOD_NAME(dataset_name, target_dir, cache_path):
    """Download the 20 newsgroups data and stored it as a zipped pickle."""
    corpus_path = join(target_dir, "corpus.tsv")
    metadata_path = join(target_dir, "metadata.json")
    vocabulary_path = join(target_dir, "vocabulary.txt")
    if not exists(target_dir):
        makedirs(target_dir)
    dataset_url = "https://raw.githubusercontent.com/MIND-Lab/OCTIS/master/preprocessed_datasets/" + dataset_name
    corpus = requests.get(dataset_url + "/corpus.tsv")
    metadata = requests.get(dataset_url + "/metadata.json")
    vocabulary = requests.get(dataset_url + "/vocabulary.txt")
    if corpus and metadata and vocabulary:
        with open(corpus_path, 'w', encoding='utf8') as f:
            f.write(corpus.text)
        with open(metadata_path, 'w', encoding='utf8') as f:
            f.write(metadata.text)
        with open(vocabulary_path, 'w', encoding='utf8') as f:
            f.write(vocabulary.text)
        only_docs, labels, partition = [], [], []
        for d in corpus.text.split("\n"):
            if len(d.strip()) > 0:
                dsplit = d.strip().split("\t")
                only_docs.append(dsplit[0])
                if len(dsplit) > 1:
                    partition.append(dsplit[1])
                    if len(dsplit) > 2:
                        labels.append(dsplit[2])
        vocab = [word for word in vocabulary.text.split("\n") if len(word) > 0]
        metadata = json.loads(metadata.text)
        metadata["info"] = {}
        metadata["info"]["name"] = dataset_name
        # Store a zipped pickle
        cache = dict(corpus=only_docs, labels=labels, partitions=partition, metadata=metadata,
                     vocabulary=vocab)
        compressed_content = codecs.encode(pickle.dumps(cache), 'zlib_codec')
        with open(cache_path, 'wb') as f:
            f.write(compressed_content)
        shutil.rmtree(target_dir)
        return cache
    else:
        raise Exception(dataset_name + ' dataset not found')