code: def _read(self) -> Iterator[Dict]:
      ext = Path(self.file_url).suffix
      assert (
          ext in self._LOADER_MAPPING
      ), f"File Format {ext} not supported"
      loader_class, loader_args = self._LOADER_MAPPING[ext]
      loader = loader_class(self.file_url, **loader_args)
  
      # todo: implement out own splitter
      langchain_text_splitter = self._splitter_class(
          chunk_size=self._chunk_size, chunk_overlap=self._chunk_overlap
      )
  
      row_num = 0
      for data in loader.load():
          for chunk_id, row in enumerate(
              langchain_text_splitter.split_documents([data])
          ):
              yield {
                  "chunk_id": chunk_id,
                  "data": row.page_content,
                  ROW_NUM_COLUMN: row_num,
              }
              row_num += 1
  
file_path: evadb/evadb/readers/document/document_reader.py
imports: from pathlib import Path
  from typing import Dict, Iterator
  from evadb.catalog.sql_config import ROW_NUM_COLUMN
  from evadb.configuration.constants import DEFAULT_DOCUMENT_CHUNK_OVERLAP, DEFAULT_DOCUMENT_CHUNK_SIZE
  from evadb.readers.abstract_reader import AbstractReader
  from evadb.readers.document.registry import _lazy_import_loader, _lazy_import_text_splitter
label_desc: Use image node_id 2 for calling the DocumentReader obj's underlying member method code with example usage: obj._read() without return types