code: def detailed_tokens(self, text: str) -> Iterator[Dict[str, Any]]:
      # 품사 태그(POS)[0], 의미 부류(semantic class)[1],	종성 유무(jongseong)[2], 읽기(reading)[3],
      # 타입(type)[4], 첫번째 품사(start pos)[5],	마지막 품사(end pos)[6], 표현(expression)[7], *
      for node in self.mecab_tokenizer.parse(text, as_nodes=True):
          if node.is_eos():
              break
          surface = node.surface
          feature = node.feature
          tag, _, expr = feature.partition(",")
          lemma, _, remainder = expr.partition("/")
          if lemma == "*":
              lemma = surface
          yield {"surface": surface, "lemma": lemma, "tag": tag}
  
imports: from typing import Any, Dict, Iterator
  from ...language import BaseDefaults, Language
  from ...scorer import Scorer
  from ...symbols import POS, X
  from ...tokens import Doc
  from ...training import validate_examples
  from ...util import DummyTokenizer, load_config_from_str, registry
  from ...vocab import Vocab
  from .lex_attrs import LEX_ATTRS
  from .punctuation import TOKENIZER_INFIXES
  from .stop_words import STOP_WORDS
  from .tag_map import TAG_MAP
label_desc: Use image node_id 5 for calling the KoreanTokenizer obj's underlying member method code with example usage: obj.detailed_tokens(text) without return types