首先python环境已经安装了numpy, scipy, sklearn, jieba
# coding=utf-8 """ @desc: """ from scipy import sparse from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer, TfidfVectorizer from jieba import cut # 用jieba进行中文分词 import jieba ''' corpus是一个列表,每篇文章是该列表的一个字符串类型的元素,word_separator是文章分词后使用该分隔符分割每个单词 ''' def word_cut_chinese(corpus, word_separator): word_cut_results = list() for document in corpus: word_cut_results.append(word_separator.join(jieba.cut(document))) # 可再加一步去停用词 return word_cut_results # ---------------使用以上函数处理---------------------------------------- WORD_SEPARATOR = ' ' corpus = ['我第一次学习自然语言处理,真的有点慌真的好着急', '不要紧张一切都会好的'] train_data = word_cut_chinese(corpus, WORD_SEPARATOR) print('word_cuted_corpus is :', train_data) # word_cuted_corpus is : ['我 第一次 学习 自然语言 处理 , 真的 有点 慌 真的 好 着急', '不要 紧张 一切 都 会 好 的'] print('--------分词结果-------') for doc in train_data: print(doc) # 用sklearn构建bag of words from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer, TfidfVectorizer count_vectorizer = CountVectorizer() # 训练语料库,得到一个scipy的稀疏矩阵count_matrix count_matrix = count_vectorizer.fit_transform(train_data) print(u"矩阵的稀疏表示count_matrix is:", ' ',count_matrix) # count_matrix is: 含义:第0篇文档的编号为7的词在第0篇文档中出现的的频次是1 # (0, 7) 1 # (0, 3) 1 # 得到稠密矩阵 print(u"稠密矩阵count_matrix_todense is:", ' ', count_matrix.todense()) # 查看整个语料库的tokens tokens = count_vectorizer.vocabulary_ print('可以得到token字典,tokens is:', ' ', tokens) # 通过单词查找id print(u'真的这个词的索引是:',count_vectorizer.vocabulary_.get('真的')) # 通过id查找单词 print(tokens.items()) # filter函数过滤字典的每一项 print(u'索引为5的词语是',list(filter(lambda x: x[1] == 5, tokens.items()))[0][0]) '''可以使用训练语料生成的词典为新的语料生成特征矩阵''' # 应用到新的语料 corpus_new=['我真的很喜欢你'] word_cuted_corpus_new=word_cut_chinese(corpus_new,WORD_SEPARATOR) matrix_new = count_vectorizer.transform(word_cuted_corpus_new) print(matrix_new.toarray()) '''使用sklearn计算tf-idf矩阵''' tf_idf_transformer = TfidfTransformer() tf_idf_matrix = tf_idf_transformer.fit_transform(count_matrix) print('-------tf-idf矩阵密集表示----') print(tf_idf_matrix.todense()) print('-------tf-idf矩阵稀疏表示----') print(tf_idf_matrix)
ref: https://blog.csdn.net/chansonzhang/article/details/84023654?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight