数据挖掘——关键字提取—sklearn的实际应用

前面的步骤都相似

#构建语料库

#使用jieba包进行分词,并将分词结果用空格分隔后再传回分词列表

zh = re.compile(u'[\u4e00-\u9fa5]+')    #中文的正则表达式
for seg in segs:
        if zh.search(seg):  #只匹配中文分词
            segments.append(seg)
    filepath.append(filePath)
 #使用空格将符合要求的分词隔开,然后放回语料库中,而不是得到分词和路径的矩阵
    row['fileContent'] = ' '.join(segments) 

#导入sklearn包中计算TF-IDF的模块,可以将停用词以参数的形式传入CountVectorizer模块

得到numpy类的数据结构,需要进行转换

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
skcount = CountVectorizer(
        stop_words=list(stopwords['stopword'].values),
        min_df=0,
        token_pattern=r'\b\w+\b') #分词的正则表达式

text = skcount.fit_transform(corpos['fileContent'])

trans = TfidfTransformer()
tfidf = trans.fit_transform(text)

#将得到的TF-IDF结构转换成数组的形式,并得到关键字numpy类的数据结构

#按行转换成数组,并排序,取tfidf值前5的元素的位置
sort = np.argsort(tfidf.toarray(),axis=1)[:,-5:] 
#获取该位置所对应的列名,即分词关键字
names = skcount.get_feature_names() 
keywords = pd.Index(names)[sort].values #非数组

#将关键字按数据框的格式进行输出,得到最终结果

tagDF = pd.DataFrame({
        '文件路径':corpos.filePath,
        '文本内容':corpos.fileContent,
        '关键字1':keywords[:,0], 
        '关键字2':keywords[:,1],
        '关键字3':keywords[:,2],
        '关键字4':keywords[:,3],
        '关键字5':keywords[:,4]})

 

posted @ 2018-09-25 23:47  没有神保佑的瓶子  阅读(912)  评论(0编辑  收藏  举报