Python3 文章标题关键字提取的例子
思路:
1.读取所有文章标题;
2.用“结巴分词”的工具包进行文章标题的词语分割;
3.用“sklearn”的工具包计算Tf-idf(词频-逆文档率);
4.得到满足关键词权重阈值的词
结巴分词详见:结巴分词Github
sklearn详见:文本特征提取――4.2.3.4 Tf-idf项加权
import os import jieba import sys from sklearn.feature_extraction.text import TfidfVectorizer sys.path.append("../") jieba.load_userdict('userdictTest.txt') STOP_WORDS = set(( "基于", "面向", "研究", "系统", "设计", "综述", "应用", "进展", "技术", "框架", "txt" )) def getFileList(path): filelist = [] files = os.listdir(path) for f in files: if f[0] == '.': pass else: filelist.append(f) return filelist, path def fenci(filename, path, segPath): # 保存分词结果的文件夹 if not os.path.exists(segPath): os.mkdir(segPath) seg_list = jieba.cut(filename) result = [] for seg in seg_list: seg = ''.join(seg.split()) if len(seg.strip()) >= 2 and seg.lower() not in STOP_WORDS: result.append(seg) # 将分词后的结果用空格隔开,保存至本地 f = open(segPath + "/" + filename + "-seg.txt", "w+") f.write(' '.join(result)) f.close() def Tfidf(filelist, sFilePath, path, tfidfw): corpus = [] for ff in filelist: fname = path + ff f = open(fname + "-seg.txt", 'r+') content = f.read() f.close() corpus.append(content) vectorizer = TfidfVectorizer() # 该类实现词向量化和Tf-idf权重计算 tfidf = vectorizer.fit_transform(corpus) word = vectorizer.get_feature_names() weight = tfidf.toarray() if not os.path.exists(sFilePath): os.mkdir(sFilePath) for i in range(len(weight)): print('----------writing all the tf-idf in the ', i, 'file into ', sFilePath + '/', i, ".txt----------") f = open(sFilePath + "/" + str(i) + ".txt", 'w+') result = {} for j in range(len(word)): if weight[i][j] >= tfidfw: result[word[j]] = weight[i][j] resultsort = sorted(result.items(), key=lambda item: item[1], reverse=True) for z in range(len(resultsort)): f.write(resultsort[z][0] + " " + str(resultsort[z][1]) + '\r\n') print(resultsort[z][0] + " " + str(resultsort[z][1])) f.close()
TfidfVectorizer( ) 类 实现了词向量化和Tf-idf权重的计算
词向量化:vectorizer.fit_transform是将corpus中保存的切分后的单词转为词频矩阵,其过程为先将所有标题切分的单词形成feature特征和列索引,并在dictionary中保存了{‘特征':索引,……},如{‘农业':0,‘大数据':1,……},在csc_matric中为每个标题保存了 (标题下标,特征索引) 词频tf……,然后对dictionary中的单词进行排序重新编号,并对应更改csc_matric中的特征索引,以便形成一个特征向量词频矩阵,接着计算每个feature的idf权重,其计算公式为 其中是所有文档数量,是包含该单词的文档数。最后计算tf*idf并进行正则化,得到关键词权重。
以下面六个文章标题为例进行关键词提取
Using jieba on 农业大数据研究与应用进展综述.txt
Using jieba on 基于Hadoop的分布式并行增量爬虫技术研究.txt
Using jieba on 基于RPA的财务共享服务中心账表核对流程优化.txt
Using jieba on 基于大数据的特征趋势统计系统设计.txt
Using jieba on 网络大数据平台异常风险监测系统设计.txt
Using jieba on 面向数据中心的多源异构数据统一访问框架.txt
----------writing all the tf-idf in the 0 file into ./keywords/ 0 .txt----------
农业 0.773262366783
大数据 0.634086202434
----------writing all the tf-idf in the 1 file into ./keywords/ 1 .txt----------
hadoop 0.5
分布式 0.5
并行增量 0.5
爬虫 0.5
----------writing all the tf-idf in the 2 file into ./keywords/ 2 .txt----------
rpa 0.408248290464
优化 0.408248290464
服务中心 0.408248290464
流程 0.408248290464
财务共享 0.408248290464
账表核对 0.408248290464
----------writing all the tf-idf in the 3 file into ./keywords/ 3 .txt----------
特征 0.521823488025
统计 0.521823488025
趋势 0.521823488025
大数据 0.427902724969
----------writing all the tf-idf in the 4 file into ./keywords/ 4 .txt----------
大数据平台 0.4472135955
异常 0.4472135955
监测 0.4472135955
网络 0.4472135955
风险 0.4472135955
----------writing all the tf-idf in the 5 file into ./keywords/ 5 .txt----------
多源异构数据 0.57735026919
数据中心 0.57735026919
统一访问 0.57735026919