'The main function that segments an entire sentence that contains
Chinese characters into seperated words.
Parameter:
- sentence: The str(unicode) to be segmented.
- cut_all: Model type. True for full pattern, False for accurate pattern.
- HMM: Whether to use the Hidden Markov Model.'

def cut(self, sentence, cut_all=False, HMM=True):

    sentence = strdecode(sentence)
    if cut_all:
        re_han = re_han_cut_all
        re_skip = re_skip_cut_all
    else:
        re_han = re_han_default
        re_skip = re_skip_default
    if cut_all:
        cut_block = self.__cut_all
    elif HMM:
        cut_block = self.__cut_DAG
    else:
        cut_block = self.__cut_DAG_NO_HMM
    blocks = re_han.split(sentence)
    for blk in blocks:
        if (not blk):
            continue
        if re_han.match(blk):
            for word in cut_block(blk):
                (yield word)
        else:
            tmp = re_skip.split(blk)
            for x in tmp:
                if re_skip.match(x):
                    (yield x)
                elif (not cut_all):
                    for xx in x:
                        (yield xx)
                else:
                    (yield x)
