code: def lookup(keyword, cache=None):
      if cache:
          if cache.contains(keyword):
              return cache.get(keyword)
      logger.info("request " + keyword)
      url = "https://vlsp.hpda.vn/demo/?page=vcl"
      payload = {"word": keyword}
      r = requests.post(url, data=payload)
      soup = BeautifulSoup(r.content, "html.parser")
      senses_data = soup.select("#vcl_content table .sense")
      if len(senses_data) == 0:
          if cache:
              cache.add(keyword, None)
          return None
  
      w = Word(keyword, senses=[])
      for sense_data in senses_data:
          tags = sense_data.select(".word_description li")
          # morpho_tag = tags[0]
          syntax_tag = tags[1]
          semantic_tag = tags[2]
          syntax_tag = syntax_tag.select("font")
          tag, sub_tag = syntax_tag[0].text, syntax_tag[1].text
          description = " / ".join(
              [item.text for item in semantic_tag.select("font")]
          )
          sense = Sense(tag, sub_tag, description)
          w.add_sense(sense)
          if cache:
              cache.add(keyword, w)
      return w
  
imports: from multiprocessing import Pool
  from os.path import join, dirname
  import requests
  from bs4 import BeautifulSoup
  from os.path import exists
  import joblib
  from underthesea.utils import logger
label_desc: Use image node_id 3 for calling the VLSPDictionary obj's underlying member method code with example usage: obj.lookup(keyword, cache) and returns: w, None, cache