code: def read_ner_file(filename, sep="\t", proxies=None):
      """
      read file
      return format :
      [ ['EU', 'B-ORG'], ['rejects', 'O'], ['German', 'B-MISC'], ['call', 'O'], ['to', 'O'], ['boycott', 'O'], ['British', 'B-MISC'], ['lamb', 'O'], ['.', 'O'] ]
      """
      # checks for correct separator
      if "conll03-de" in str(filename):
          if sep != " ":
              logger.error(
                  f"Separator {sep} for dataset German CONLL03 does not match the requirements. Setting seperator to whitespace"
              )
              sep = " "
      if "germeval14" in str(filename):
          if sep != "\t":
              logger.error(
                  f"Separator {sep} for dataset GermEval14 de does not match the requirements. Setting seperator to tab"
              )
              sep = "\t"
  
      if not (os.path.exists(filename)):
          logger.info(
              f" Couldn't find {filename} locally. Trying to download ..."
          )
          _download_extract_downstream_data(filename, proxies)
      if "conll03-de" in str(filename):
          f = open(filename, encoding="cp1252")
      else:
          f = open(filename, encoding="utf-8")
  
      data = []
      sentence = []
      label = []
      for line in f:
          if line.startswith("#"):
              continue
          if len(line) == 0 or "-DOCSTART-" in line or line[0] == "\n":
              if len(sentence) > 0:
                  if "conll03" in str(filename):
                      _convertIOB1_to_IOB2(label)
                  if "germeval14" in str(filename):
                      label = _convert_germeval14_labels(label)
                  data.append(
                      {"text": " ".join(sentence), "ner_label": label}
                  )
                  sentence = []
                  label = []
              continue
          splits = line.split(sep)
  
          # adjusting to data format in Germeval14
          # Germeval14 has two levels of annotation. E.g. "Univerität Berlin" is both ORG and LOC. We only take the first level.
          if "germeval14" in str(filename):
              sentence.append(splits[1])
              label.append(splits[-2])
          else:
              sentence.append(splits[0])
              label.append(splits[-1][:-1])
  
      # handling end of file, adding the last sentence to data
      if len(sentence) > 0:
          if label[-1] == "":
              logger.error(
                  f"The last NER label: '{splits[-1]}'  in your dataset might have been converted incorrectly. Please insert a newline at the end of the file."
              )
              label[-1] = "O"
  
          if "conll03-de" in str(filename):
              _convertIOB1_to_IOB2(label)
          if "germeval14" in str(filename):
              label = _convert_germeval14_labels(label)
          data.append({"text": " ".join(sentence), "ner_label": label})
      return data
  
imports: import hashlib
  import json
  import logging
  import os
  import random
  import tarfile
  import tempfile
  import string
  import uuid
  from contextlib import ExitStack
  from itertools import islice
  from pathlib import Path
  import pandas
  from requests import get
  from tqdm import tqdm
  from typing import List
  from farm.file_utils import http_get
  from farm.modeling.tokenization import tokenize_with_metadata
label_desc: Use image node_id 4 for calling a global function with example usage: read_ner_file(filename, sep, proxies) and returns: data