class_docstr: Constructs a MarkupLM feature extractor. This can be used to get a list of nodes and corresponding xpaths from HTML
  strings.
  
  This feature extractor inherits from [`~feature_extraction_utils.PreTrainedFeatureExtractor`] which contains most
  of the main methods. Users should refer to this superclass for more information regarding those methods.
code: def get_three_from_single(self, html_string):
      html_code = BeautifulSoup(html_string, "html.parser")
  
      all_doc_strings = []
      string2xtag_seq = []
      string2xsubs_seq = []
  
      for element in html_code.descendants:
          if isinstance(element, bs4.element.NavigableString):
              if type(element.parent) != bs4.element.Tag:
                  continue
  
              text_in_this_tag = html.unescape(element).strip()
              if not text_in_this_tag:
                  continue
  
              all_doc_strings.append(text_in_this_tag)
  
              xpath_tags, xpath_subscripts = self.xpath_soup(element)
              string2xtag_seq.append(xpath_tags)
              string2xsubs_seq.append(xpath_subscripts)
  
      if len(all_doc_strings) != len(string2xtag_seq):
          raise ValueError(
              "Number of doc strings and xtags does not correspond"
          )
      if len(all_doc_strings) != len(string2xsubs_seq):
          raise ValueError(
              "Number of doc strings and xsubs does not correspond"
          )
  
      return all_doc_strings, string2xtag_seq, string2xsubs_seq
  
file_path: transformers/src/transformers/models/markuplm/feature_extraction_markuplm.py
imports: import html
  from ...feature_extraction_utils import BatchFeature, FeatureExtractionMixin
  from ...utils import is_bs4_available, logging, requires_backends
label_desc: Use image node_id 3 for calling the MarkupLMFeatureExtractor obj's underlying member method code with example usage: obj.get_three_from_single(html_string) and returns: all_doc_strings,  string2xtag_seq,  string2xsubs_seq