基于jieba中文分词进行N-Gram

jieba提供很好的中文分词,但是并没有提供N-Gram;sklearn的CountVectorizer能提供很好的N-Gram分词,但却没有jieba那么对切词灵活,下面就介绍基于jieba分词进行N-Gram。

#coding=utf-8
'''
Created on 2018-2-6

'''
# 这里的_word_ngrams方法其实就是sklearn中CountVectorizer函数中用于N-Gram的方法,位置在D:\Python27\Lib\site-packages\sklearn\feature_extraction\text.py
def _word_ngrams(tokens, stop_words=None,ngram_range=(1,1)):
        """Turn tokens into a sequence of n-grams after stop words filtering"""
        # handle stop words
        if stop_words is not None:
            tokens = [w for w in tokens if w not in stop_words]

        # handle token n-grams
        min_n, max_n = ngram_range
        if max_n != 1:
            original_tokens = tokens
            tokens = []
            n_original_tokens = len(original_tokens)
            for n in xrange(min_n,
                            min(max_n + 1, n_original_tokens + 1)):
                for i in xrange(n_original_tokens - n + 1):
                    tokens.append(" ".join(original_tokens[i: i + n]))

        return tokens

text = "我去云南旅游,不仅去了玉龙雪山,还去丽江古城,很喜欢丽江古城"
import jieba
cut = jieba.cut(text)
listcut = list(cut)
n_gramWords = _word_ngrams(tokens = listcut,ngram_range=(2,2))
print n_gramWords
for n_gramWord in n_gramWords:
    print n_gramWord
# 我 去
# 去 云南旅游
# 云南旅游 ,
# , 不仅
# 不仅 去
# 去 了
# 了 玉龙雪山
# 玉龙雪山 ,
# , 还
# 还 去
# 去 丽江
# 丽江 古城
# 古城 ,
# , 很
# 很 喜欢
# 喜欢 丽江
# 丽江 古城

你可能感兴趣的:(机器学习)