Python数据挖掘-使用sklearn包,,使用sklearn包
Python数据挖掘-使用sklearn包,,使用sklearn包
使用sklearn包
CountVectorizer是通过fit_transform函数将文本中的词语转换为词频矩阵
get_feature_names()可看到所有文本的关键字vocabulary_可看到所有文本关键字和其位置toarray()可以看到词频矩阵的结果TfidfTransformer是统计CountVectorizer中每个词语的tf-idf权值
TfidfVectorizer可以把CountVectorizer、TfidfTransformer合并起来,直接生成tfidf值
其关键参数:
max_df:这个给定特征可以应用在tf-idf矩阵中,泳衣描述单词在文档中的最高出现率,假设一个词(term)在80%的文档汇总都出现过了,那它也许(在句型简介的语境里)只携带非常少信息min_df:可以是一个整数。意味着单词必须在5个以上的文档中出现才会被纳入考虑。设置为0.2,记单词至少在20%的文档中出现ngram_range:这个参数将用来观察一元模型(unigrams),二元模型(bigrams)和三元模型(trigrams)转载:https://blog.csdn.net/qq_30868235/article/details/80389180
1、首先给定一段内容
contents = [ ‘我 是 中国 人。‘, ‘你 是 美国 人。‘, ‘他 叫 什么 名字?‘, ‘她 是 谁 啊?‘]
2、CountVectorizer类的使用
首先调用CountVectorizer类,然后使用它的fit_transfomr方法对contents转换为一个词频矩阵,也可以说得到一个向量化矩阵;
然后使用对该向量化矩阵使用toarray()方法,获取这个矩阵;
最后通过vocabulary_来获取文本关键字及其位置
from sklearn.feature_extraction.text import CountVectorizercountVectorizer=CountVectorizer()textVector=countVectorizer.fit_transform(contents) #得到一个文档向量化的矩阵textVector.todense() #获取这个矩阵countVectorizer.vocabulary_ #获取每个列对应的属性
设置最小长度和正则表达式
由于通过上述两个步骤只能获取长度为2以上的文字,汉字中单子也具有意义,对CountVectorizer进行设置,因此使用min_df和token_pattren
1 countVectorizer=CountVectorizer(2 min_df=0,3 token_pattern=r"\b\w+\b")4 textVector=countVectorizer.fit_transform(contents)5 6 textVector.todense()7 countVectorizer.vocabulary_
3、TF-IDF运算,调用TfidfTransformer
从sklearn.feature_extraction.text 调用TfidfTransformer类;
传入字符串数组,由于fit_transform 后并不是一个单纯一个矩阵,要提取出关键字,还需要将其变为矩阵形式
1 #调用tf-idf包,运算tfidf 2 3 from sklearn.feature_extraction.text import TfidfTransformer 4 5 transformer=TfidfTransformer() 6 tfidf=transformer.fit_transform(textVector) #传入字符串数组 7 8 import pandas 9 TFIDFDataFrame=pandas.DataFrame(tfidf.toarray())10 TFIDFDataFrame.columns=countVectorizer.get_feature_names() #把列名设置为单词
4、提取关键字
使用numpy中的argsort(a,axis=1):将矩阵a按照axis排序,并返回排序后的下标;
axis=0,沿着行向下(每列)的元素进行排序,axis=1,沿着列向右(每行)的元素进行排序
根据位置索引可以提取对应的分词
import numpyTFIDFSorted=numpy.argsort(tfidf.toarray(),axis=1)[:,-2:]TFIDFDataFrame.columns[TFIDFSorted].values
5、实战演练
1、语料库的搭建
1 import os; 2 import os.path; 3 import codecs; 4 5 filePaths = []; 6 fileContents = []; 7 for root, dirs, files in os.walk( 8 "D:\\PDM\\2.8\\SogouC.mini\\Sample" 9 ):10 for name in files:11 filePath = os.path.join(root, name);12 filePaths.append(filePath);13 f = codecs.open(filePath, ‘r‘, ‘utf-8‘)14 fileContent = f.read()15 f.close()16 fileContents.append(fileContent)17 18 import pandas;19 corpos = pandas.DataFrame({20 ‘filePath‘: filePaths, 21 ‘fileContent‘: fileContents22 });
2、分词(中文分词)
1 import re 2 zhPattern=re.compile(u‘[\u4e00-\u9fa5]+‘) 3 4 import jieba 5 segments=[] 6 filePaths=[] 7 8 for index,row in corpos.iterrows(): 9 segments=[]10 filePath=row["filePath"]11 fileContent=row["fileContent"]12 segs=jieba.cut(fileContent)13 for seg in segs:14 if zhPattern.search(seg):15 segments.append(seg)16 filePaths.append(filePath)17 row["fileContent"]=" ".join(segments) #为了满足sklearn包的使用
3、调用停用词、tfidf计算
1 from sklearn.feature_extraction.text import CountVectorizer 2 from sklearn.feature_extraction.text import TfidfTransformer 3 4 stopwords = pandas.read_csv( 5 "D:\\PDM\\2.8\\StopwordsCN.txt", 6 encoding=‘utf8‘, 7 index_col=False, 8 quoting=3, 9 sep="\t"10 )11 12 countVectorizer = CountVectorizer(13 stop_words=list(stopwords[‘stopword‘].values), #与之前的CountVectorizer不一样,增加了停用词,去除了停用词的统计14 min_df=0, token_pattern=r"\b\w+\b"15 )16 textVector = countVectorizer.fit_transform(17 corpos[‘fileContent‘]18 )19 20 transformer = TfidfTransformer()21 tfidf = transformer.fit_transform(textVector)
4、提取关键字
1 import numpy; 2 sort = numpy.argsort(tfidf.toarray(), axis=1)[:, -5:] 3 names = countVectorizer.get_feature_names(); 4 5 keywords = pandas.Index(names)[sort].values 6 7 tagDF = pandas.DataFrame({ 8 ‘filePath‘:corpos.filePath, 9 ‘fileContent‘:corpos.fileContent, 10 ‘tag1‘:keywords[:, 0], 11 ‘tag2‘:keywords[:, 1], 12 ‘tag3‘:keywords[:, 2], 13 ‘tag4‘:keywords[:, 3], 14 ‘tag5‘:keywords[:, 4]15 })
相关文章推荐
在构建语料库、完成分词等任务后,获得了向量化矩阵textVector
1 from sklearn.metrics import pairwise_distances 2 3 distance_matrix=pairwise_distances( 4 textVector, 5 metric="cosine") #向量化矩阵与计算公式 6 7 m=1-pandas.DataFrame(distance_matrix) 8 m.columns=filePaths 9 m.index=filePaths10 11 sort=numpy.argsort(distance_matrix,axis=1)[:,1:6]12 similarity5=pandas.Index(filePaths)[sort].values13 14 similarityDF=pandas.DataFrame({15 ‘filePath‘:corpos.filePath, 16 ‘s1‘: similarity5[:, 0], 17 ‘s2‘: similarity5[:, 1], 18 ‘s3‘: similarity5[:, 2], 19 ‘s4‘: similarity5[:, 3], 20 ‘s5‘: similarity5[:, 4]})
自动摘要
算法步骤:
获取到需要摘要的文章;
对改文章进行词频统计
对改文章进行分局(根据中文的标点符号,一般我们采用。、?等进行分句)
计算分句与文章之间的余弦相似度
取相似度最高的分句,作为文章的摘要
首先构建语料库、停用词、countVectorizer
建立子语料库及向量化矩阵
1 contents=[] 2 summarys=[] 3 filePahts=[] 4 5 6 for index,row in corpos.iterrows(): 7 filePath=row["filePath"] 8 fileContent=row["fileContent"] 9 #建立子语料库,以该文档和该文档的分组组成10 subCorpos=[fileContent]+re.split(11 r‘[。?!\n]\s*‘,12 fileContent13 )14 15 segments=[]16 suitCorpos=[]17 for content in subCorpos:18 segs=jieba.cut(content)19 segment=" ".join(segs)20 if len(segment.strip())>10:21 segments.append(segment)22 suitCorpos.append(content)23 24 textVector=countVectorizer.fit_transform(segments)25 26 distance_metrix=pairwise_distances(27 textVector,28 metric="cosine")29 30 sort=numpy.argsort(distance_metrix,axis=1)31 32 summary=pandas.Index(suitCorpos)[sort[0]].values[1]33 34 summarys.append(summary)35 filePahts.append(filePath)36 contents.append(fileContent)
Python数据挖掘-使用sklearn包
相关内容
- Python: numpy--函数 shape用法,,shape函数是nu
- python之循环,,循环要计算1+2+3
- Python全栈开发,Day2,,一、Pycharm的
- Python3 open() 函数-用于打开一个文件,并返回文件对象,
- python中dataframe常见操作:取行、列、切片、统计特征值
- python之实现对excel表格数据的修改,,题目:有一个名为
- python【运算符】,,运算符: +
- python re常用操作,,‘.‘ 默认匹配除\
- Python3 freetds.conf odbcinst.ini odbc.ini 之间的关系,,Python3
- pycharm2018.3版 永久激活,,pycharm201
评论关闭