code: def prepare_data(zip_path, size_mb):
      expected_extension = ".xml.bz2"
      assert zip_path.endswith(expected_extension)
      base_path = Path(zip_path).parent
  
      unzip_path = base_path / "wiki.xml"
      full_text_path = base_path / "wiki.txt"
      cutted_text_path = base_path / f"wiki_{size_mb}MB.txt"
  
      if not Path(unzip_path).exists():
          print(f"unziping file {zip_path} ...")
          assert os.system(f"bzip2 -kdc {zip_path} > {unzip_path}") == 0
  
      if not Path(full_text_path).exists():
          print(f"converting xml to text {unzip_path} ...")
          download_xml2txt()
          preprocess_command = f"perl xml2txt.pl "
          preprocess_command += f" -nomath -notables "
          preprocess_command += f" {unzip_path} {full_text_path}"
          assert os.system(preprocess_command) == 0
  
      if not Path(cutted_text_path).exists():
          byte_processed = 0
          with open(cutted_text_path, "w") as fout:
              with open(full_text_path, "r") as fin:
                  while byte_processed < size_mb * 1_000_000:
                      s = fin.readline()
                      byte_processed += len(s.encode())
                      fout.write(s)
  
      return cutted_text_path
  
imports: import argparse
  import os
  from pathlib import Path
  from time import time
  from tabulate import tabulate
  from tokenizers import pre_tokenizers
  from tokenizers import Tokenizer
  from tokenizers.models import BPE
  from tokenizers.trainers import BpeTrainer
label_desc: Use image node_id 5 for calling a global function with example usage: prepare_data(zip_path, size_mb) and returns: cutted_text_path