code: def _download_and_preprocess_data(data_dir):
      # Conditionally download data to data_dir
      if not path.isdir(data_dir):
          makedirs(data_dir)
  
      archive_dir = data_dir + "/archive"
      if not path.isdir(archive_dir):
          makedirs(archive_dir)
  
      print(
          "Downloading Voxforge data set into {} if not already present...".format(
              archive_dir
          )
      )
  
      voxforge_url = "http://www.repository.voxforge1.org/downloads/SpeechCorpus/Trunk/Audio/Main/16kHz_16bit"
      html_page = urllib.request.urlopen(voxforge_url)
      soup = BeautifulSoup(html_page, "html.parser")
  
      # list all links
      refs = [
          l["href"] for l in soup.find_all("a") if ".tgz" in l["href"]
      ]
  
      # download files in parallel
      print("{} files to download".format(len(refs)))
      downloader = _parallel_downloader(
          voxforge_url, archive_dir, len(refs), AtomicCounter()
      )
      p = ThreadPool(NUM_PARALLEL)
      p.map(downloader, enumerate(refs))
  
      # Conditionally extract data to dataset_dir
      if not path.isdir(os.path.join(data_dir, "test")):
          makedirs(os.path.join(data_dir, "test"))
      if not path.isdir(os.path.join(data_dir, "dev")):
          makedirs(os.path.join(data_dir, "dev"))
      if not path.isdir(os.path.join(data_dir, "train")):
          makedirs(os.path.join(data_dir, "train"))
  
      tarfiles = glob(os.path.join(archive_dir, "*.tgz"))
      number_of_files = len(tarfiles)
      number_of_test = number_of_files // 100
      number_of_dev = number_of_files // 100
  
      # extract tars in parallel
      print(
          "Extracting Voxforge data set into {} if not already present...".format(
              data_dir
          )
      )
      extracter = _parallel_extracter(
          data_dir,
          number_of_test,
          number_of_dev,
          len(tarfiles),
          AtomicCounter(),
      )
      p.map(extracter, enumerate(tarfiles))
  
      # Generate data set
      print("Generating Voxforge data set into {}".format(data_dir))
      test_files = _generate_dataset(data_dir, "test")
      dev_files = _generate_dataset(data_dir, "dev")
      train_files = _generate_dataset(data_dir, "train")
  
      # Write sets to disk as CSV files
      train_files.to_csv(
          os.path.join(data_dir, "voxforge-train.csv"), index=False
      )
      dev_files.to_csv(
          os.path.join(data_dir, "voxforge-dev.csv"), index=False
      )
      test_files.to_csv(
          os.path.join(data_dir, "voxforge-test.csv"), index=False
      )
  
imports: import codecs
  import os
  import re
  import sys
  import tarfile
  import threading
  import unicodedata
  import urllib
  from glob import glob
  from multiprocessing.pool import ThreadPool
  from os import makedirs, path
  import pandas
  from bs4 import BeautifulSoup
  from tensorflow.python.platform import gfile
  from deepspeech_training.util.downloader import maybe_download
label_desc: Use image node_id 3 for calling a global function with example usage: _download_and_preprocess_data(data_dir) without return types