docstr: Load the file or string into the CoNLL-U format data.
  Input: file or string reader, where the data is in CoNLL-U format.
  Output: a tuple whose first element is a list of list of list for each token in each sentence in the data,
  where the innermost list represents all fields of a token; and whose second element is a list of lists for each
  comment in each sentence in the data.
docstr_tok: ["Load","the","file","or","string","into","the","CoNLL-U","format","data",".","Input",":","file","or","string","reader",",","where","the","data","is","in","CoNLL-U","format",".","Output",":","a","tuple","whose","first","element","is","a","list","of","list","of","list","for","each","token","in","each","sentence","in","the","data",",","where","the","innermost","list","represents","all","fields","of","a","token",";","and","whose","second","element","is","a","list","of","lists","for","each","comment","in","each","sentence","in","the","data","."]
code: def load_conll(f, ignore_gapping=True):
      """Load the file or string into the CoNLL-U format data.
      Input: file or string reader, where the data is in CoNLL-U format.
      Output: a tuple whose first element is a list of list of list for each token in each sentence in the data,
      where the innermost list represents all fields of a token; and whose second element is a list of lists for each
      comment in each sentence in the data.
      """
      # f is open() or io.StringIO()
      doc, sent = [], []
      doc_comments, sent_comments = [], []
      for line_idx, line in enumerate(f):
          # leave whitespace such as NBSP, in case it is meaningful in the conll-u doc
          line = line.lstrip().rstrip(" \n\r\t")
          if len(line) == 0:
              if len(sent) > 0:
                  doc.append(sent)
                  sent = []
                  doc_comments.append(sent_comments)
                  sent_comments = []
          else:
              if line.startswith("#"):  # read comment line
                  sent_comments.append(line)
                  continue
              array = line.split("\t")
              if ignore_gapping and "." in array[0]:
                  continue
              if len(array) != FIELD_NUM:
                  raise ValueError(
                      f"Cannot parse CoNLL line {line_idx+1}: expecting {FIELD_NUM} fields, {len(array)} found at line {line_idx}\n  {array}"
                  )
              sent += [array]
      if len(sent) > 0:
          doc.append(sent)
          doc_comments.append(sent_comments)
      return doc, doc_comments
  
file_path: stanza/stanza/utils/conll.py
imports: import os
  import io
  from zipfile import ZipFile
  from stanza.models.common.doc import Document
  from stanza.models.common.doc import ID, TEXT, LEMMA, UPOS, XPOS, FEATS, HEAD, DEPREL, DEPS, MISC, NER, START_CHAR, END_CHAR
  from stanza.models.common.doc import FIELD_TO_IDX, FIELD_NUM
label_desc: Use image node_id 1 for calling the CoNLL obj's underlying member method code with example usage: obj.load_conll(f, ignore_gapping) and returns: doc,  doc_comments