class_docstr: Builder for constructing preprocessing part of pipeline during the preparation of an initial assumption.
  If data is multimodal, builder makes preprocessing pipeline for each data source iteratively.
code: def builder_for_data(
      cls,
      task_type: TaskTypesEnum,
      data: Union[InputData, MultiModalData],
      *initial_nodes: Optional[PipelineNode],
      use_input_preprocessing: bool = True,
  ) -> PipelineBuilder:
      if isinstance(data, MultiModalData):
          # if the data is unimodal, initial_nodes = tuple of None
          # if the data is multimodal, initial_nodes = tuple of 1 element (current data_source node)
          # so the whole data is reduced to the current data_source for an easier preprocessing
          data = data[str(initial_nodes[0])]
      preprocessing_builder = cls(
          task_type,
          data.data_type,
          *initial_nodes,
          use_input_preprocessing=use_input_preprocessing,
      )
      if data_has_text_features(data):
          preprocessing_builder = (
              preprocessing_builder.with_text_vectorizer()
          )
      return preprocessing_builder.to_builder()
  
file_path: FEDOT/fedot/api/api_utils/assumptions/preprocessing_builder.py
imports: from typing import Optional, Union
  from fedot.core.data.data import InputData
  from fedot.core.data.data_preprocessing import data_has_text_features
  from fedot.core.data.multi_modal import MultiModalData
  from fedot.core.pipelines.node import PipelineNode
  from fedot.core.pipelines.pipeline import Pipeline
  from fedot.core.pipelines.pipeline_builder import PipelineBuilder
  from fedot.core.repository.dataset_types import DataTypesEnum
  from fedot.core.repository.tasks import TaskTypesEnum
label_desc: Use image node_id 2 for calling the PreprocessingBuilder obj's underlying member method code with example usage: obj.builder_for_data(cls, task_type, data) and returns: preprocessing_builder