code: def pos_tag(
      words: List[str], engine: str = "perceptron", corpus: str = "orchid"
  ) -> List[Tuple[str, str]]:
      
      _corpus = corpus
      _tag = []
      if corpus == "orchid_ud":
          corpus = "orchid"
      if not words:
          return []
  
      if engine == "perceptron":
          from .perceptron import tag as tag_
      elif engine == "artagger":
          tag_ = _artagger_tag
      else:  # default, use "unigram" ("old") engine
          from .unigram import tag as tag_
      _tag = tag_(words, corpus=corpus)
  
      if _corpus == "orchid_ud":
          _tag = _orchid_to_ud(_tag)
  
      return _tag
docs: Part of Speech tagging function.
  
      :param list words: a list of tokenized words
      :param str engine:
          * unigram - unigram tagger
          * perceptron - perceptron tagger (default)
          * artagger - RDR POS tagger
      :param str corpus:
          * orchid - annotated Thai academic articles (default)
          * orchid_ud - annotated Thai academic articles using Universal Dependencies Tags
          * pud - Parallel Universal Dependencies (PUD) treebanks
      :return: returns a list of labels regarding which part of speech it is