code: def main():
      args = get_args()
      data_root = args.data_root
      manifests_root = args.manifests_root
      data_version = args.data_version
  
      dataset_root = data_root / f"ThorstenVoice-Dataset-{data_version}"
      dataset_root.mkdir(parents=True, exist_ok=True)
  
      # download and extract dataset
      dataset_url = THORSTEN_NEUTRAL[data_version]["url"]
      zipped_dataset_path = (
          dataset_root / Path(dataset_url).name.split("?")[0]
      )
      __maybe_download_file(dataset_url, zipped_dataset_path)
      __extract_file(zipped_dataset_path, dataset_root)
  
      # generate train/dev/test splits
      unzipped_dataset_path = (
          dataset_root / THORSTEN_NEUTRAL[data_version]["dir_name"]
      )
      (
          entries_train,
          entries_val,
          entries_test,
          not_found_wavs,
          wrong_duration_wavs,
      ) = __process_data(
          unzipped_dataset_path=unzipped_dataset_path,
          metadata=THORSTEN_NEUTRAL[data_version]["metadata"],
          min_duration=args.min_duration,
          max_duration=args.max_duration,
          val_size=args.val_size,
          test_size=args.test_size,
          seed_for_ds_split=args.seed_for_ds_split,
      )
  
      # save json splits.
      train_json = manifests_root / "train_manifest.json"
      val_json = manifests_root / "val_manifest.json"
      test_json = manifests_root / "test_manifest.json"
      __save_json(train_json, entries_train)
      __save_json(val_json, entries_val)
      __save_json(test_json, entries_test)
  
      # save skipped audios that are not found into a file.
      if len(not_found_wavs) > 0:
          skipped_not_found_file = (
              manifests_root / "skipped_not_found_wavs.list"
          )
          with open(skipped_not_found_file, "w") as f_notfound:
              for line in not_found_wavs:
                  f_notfound.write(f"{line}\n")
  
      # save skipped audios that are too short or too long into a file.
      if len(wrong_duration_wavs) > 0:
          skipped_wrong_duration_file = (
              manifests_root / "skipped_wrong_duration_wavs.list"
          )
          with open(skipped_wrong_duration_file, "w") as f_wrong_dur:
              for line in wrong_duration_wavs:
                  f_wrong_dur.write(f"{line}\n")
  
      # normalize text if requested. New json file, train_manifest_text_normed.json, will be generated.
      if args.normalize_text:
          __text_normalization(train_json, args.num_workers)
          __text_normalization(val_json, args.num_workers)
          __text_normalization(test_json, args.num_workers)
  
file_path: NeMo/scripts/dataset_processing/tts/thorsten_neutral/get_data.py
imports: import argparse
  import json
  import random
  import shutil
  import subprocess
  import urllib.request
  from pathlib import Path
  from joblib import Parallel, delayed
  from tqdm import tqdm
  from nemo.utils import logging
label_desc: Use image node_id 7 for calling a global function with example usage: main() without return types