code: def extract_tags(self, sentence, topK=20, withWeight=False, allowPOS=(), withFlag=False):
          
          if allowPOS:
              allowPOS = frozenset(allowPOS)
              words = self.postokenizer.cut(sentence)
          else:
              words = self.tokenizer.cut(sentence)
          freq = {}
          for w in words:
              if allowPOS:
                  if w.flag not in allowPOS:
                      continue
                  elif not withFlag:
                      w = w.word
              wc = w.word if allowPOS and withFlag else w
              if len(wc.strip()) < 2 or wc.lower() in self.stop_words:
                  continue
              freq[w] = freq.get(w, 0.0) + 1.0
          total = sum(freq.values())
          for k in freq:
              kw = k.word if allowPOS and withFlag else k
              freq[k] *= self.idf_freq.get(kw, self.median_idf) / total
  
          if withWeight:
              tags = sorted(freq.items(), key=itemgetter(1), reverse=True)
          else:
              tags = sorted(freq, key=freq.__getitem__, reverse=True)
          if topK:
              return tags[:topK]
          else:
              return tags
docs: Extract keywords from sentence using TF-IDF algorithm.
          Parameter:
              - topK: return how many top keywords. `None` for all possible words.
              - withWeight: if True, return a list of (word, weight);
                            if False, return a list of words.
              - allowPOS: the allowed POS list eg. ['ns', 'n', 'vn', 'v','nr'].
                          if the POS of w is not in this list,it will be filtered.
              - withFlag: only work with allowPOS is not empty.
                          if True, return a list of pair(word, weight) like posseg.cut
                          if False, return a list of words