code: def build_and_gather_multiple_arrays(self, save_path):
      print(f"🌋 Extracting mentions features with {self.n_jobs} job(s)")
      parallel_process(self.docs, set_feats, n_jobs=self.n_jobs)
  
      print(f"🌋 Building and gathering array with {self.n_jobs} job(s)")
      arr = [{"doc": doc, "i": i} for i, doc in enumerate(self.docs)]
      arrays_dicts = parallel_process(
          arr, get_feats, use_kwargs=True, n_jobs=self.n_jobs
      )
      gathering_dict = dict((feat, None) for feat in FEATURES_NAMES)
      n_mentions_list = []
      pairs_ant_index = 0
      pairs_start_index = 0
      for npaidx in tqdm(range(len(arrays_dicts))):
          try:
              n, p, arrays_dict = arrays_dicts[npaidx]
          except:
              # empty array dict, cannot extract the dict values for this doc
              continue
  
          for f in FEATURES_NAMES:
              if gathering_dict[f] is None:
                  gathering_dict[f] = arrays_dict[f]
              else:
                  if f == FEATURES_NAMES[6]:
                      array = [
                          a + pairs_ant_index for a in arrays_dict[f]
                      ]
                  elif f == FEATURES_NAMES[3]:
                      array = [
                          a + pairs_start_index for a in arrays_dict[f]
                      ]
                  else:
                      array = arrays_dict[f]
                  gathering_dict[f] += array
          pairs_ant_index += n
          pairs_start_index += p
          n_mentions_list.append(n)
  
      for feature in FEATURES_NAMES[:9]:
          feature_data = gathering_dict[feature]
          if not feature_data:
              print("No data for", feature)
              continue
          print(
              "Building numpy array for",
              feature,
              "length",
              len(feature_data),
          )
          if feature != "mentions_spans":
              array = np.array(feature_data)
              if array.ndim == 1:
                  array = np.expand_dims(array, axis=1)
          else:
              array = np.stack(feature_data)
          # check_numpy_array(feature, array, n_mentions_list)
          print("Saving numpy", feature, "size", array.shape)
          np.save(save_path + feature, array)
      for feature in FEATURES_NAMES[9:]:
          feature_data = gathering_dict[feature]
          if feature_data:
              print("Saving pickle", feature, "size", len(feature_data))
              with open(save_path + feature + ".bin", "wb") as fp:
                  pickle.dump(feature_data, fp)
  
imports: import re
  import argparse
  import time
  import os
  import io
  import pickle
  import spacy
  import numpy
  from tqdm import tqdm
  from neuralcoref.train.compat import unicode_
  from neuralcoref.train.document import Mention, Document, Speaker, EmbeddingExtractor, MISSING_WORD, extract_mentions_spans
  from neuralcoref.train.utils import parallel_process
label_desc: Use image node_id 8 for calling the ConllCorpus obj's underlying member method code with example usage: obj.build_and_gather_multiple_arrays(save_path) without return types