> 文章列表 > tf-idf+lda分析多篇文章摘要

tf-idf+lda分析多篇文章摘要

tf-idf+lda分析多篇文章摘要

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#import seaborn as sns
plt.rcParams['font.sans-serif'] = ['KaiTi']  #指定默认字体 SimHei黑体
plt.rcParams['axes.unicode_minus'] = False   #解决保存图像是负号'
import jieba
import os
# stop_list  = pd.read_csv("停用词.txt",index_col=False,quoting=3,sep="\\t",names=['stopword'], encoding='utf-8')
df = pd.read_csv('软件项目风险管理论文.csv', encoding='utf-8')
df
主题 摘要
0 浅谈软件项目管理中的成本效益和收益管理 软件项目实施的主要目标就是实现经济效益。在软件项目管理过程中,必须对所要研发的软件开展经济学...
1 J公司用户中心系统项目风险管理研究 随着社会环境的变化,项目风险管理的重要性日渐凸显,特别是软件项目,这类项目大多迭代快,在这过...
2 敏捷软件项目风险管理探析 在敏捷实践中敏捷方法有利于降低项目风险,但它们通常不足以应对在某些场景(例如在高度规范的领域...
3 B公司A软件项目风险管理 近年来,软件产品市场高速发展,信息安全也越来越被大家所关注,SM(国家涉密信息)软件行业更是...
4 S公司敏捷开发互联网软件项目的风险管理 随着科技的不断进步发展,信息技术发展至今已经非常成熟,其已经被广泛用于各行各业当中。为顺应时...
... ... ...
592 长沙软件园有限公司项目管理成熟度评价研究 长沙软件园有限公司具体负责长沙国家软件产业基地的专业基础设施、软件开发环境建设及技术创新运营...
593 基于3G技术的“移动勘险”项目管理研究 随着世界移动互联网及物联网、云计算技术的发展,3G技术的优势得到了充分的发挥。智能手机的普及...
594 软件项目风险管理之探索 随着IT科技的飞速发展,软件项目的风险管理成为项目实施成功与否的重要环节。该文通过风险计划编...
595 软件项目风险管理过程探析 软件项目风险管理是一个基于过程的管理。是对整个项目生命周期内可能遇到的风险进行预测、识别、分...
596 SG公司人力资源管理信息系统开发项目的进度计划与控制研究 随着现代信息技术的发展,信息化管理软件逐渐成为现代企业提高效率、增加效益不可或缺的必要工具与...

597 rows × 2 columns

#Jieba分词函数def IsChinese(character):'''判断是否为中文字符'''for cha in character:if not '\\u0e00' <= cha <= '\\u9fa5':return Falseelse:return Truejieba.load_userdict('no_split.txt')
key_words = set()
with open('no_split.txt', encoding='utf-8') as f:for line in f:l = line.strip()if l:key_words.add(l)
print('key_words', len(key_words))
stop_list = []
def txt_cut(juzi):# lis=[w for w in jieba.cut(juzi) if w not in stop_list]# lis=[w for w in jieba.cut(juzi) if IsChinese(w)]lis=[w for w in jieba.cut(juzi) if w in key_words]return (" ").join(lis)df['cutword']=df['摘要'].astype('str').apply(txt_cut)
df
Building prefix dict from the default dictionary ...
Loading model from cache C:\\Users\\wangkai\\AppData\\Local\\Temp\\jieba.cache
Loading model cost 0.718 seconds.
Prefix dict has been built successfully.key_words 362
主题 摘要 cutword
0 浅谈软件项目管理中的成本效益和收益管理 软件项目实施的主要目标就是实现经济效益。在软件项目管理过程中,必须对所要研发的软件开展经济学...
1 J公司用户中心系统项目风险管理研究 随着社会环境的变化,项目风险管理的重要性日渐凸显,特别是软件项目,这类项目大多迭代快,在这过... 项目风险 项目风险 项目风险 项目风险 项目风险 客户需求不明确 项目风险 沟通风险 项目风险
2 敏捷软件项目风险管理探析 在敏捷实践中敏捷方法有利于降低项目风险,但它们通常不足以应对在某些场景(例如在高度规范的领域... 项目风险 项目风险 项目风险 项目风险 项目风险
3 B公司A软件项目风险管理 近年来,软件产品市场高速发展,信息安全也越来越被大家所关注,SM(国家涉密信息)软件行业更是... 需求风险 技术风险 人员风险 管理风险 需求风险 技术风险 人员风险 管理风险 需求风险 需...
4 S公司敏捷开发互联网软件项目的风险管理 随着科技的不断进步发展,信息技术发展至今已经非常成熟,其已经被广泛用于各行各业当中。为顺应时... 项目风险 开发风险 开发风险
... ... ... ...
592 长沙软件园有限公司项目管理成熟度评价研究 长沙软件园有限公司具体负责长沙国家软件产业基地的专业基础设施、软件开发环境建设及技术创新运营...
593 基于3G技术的“移动勘险”项目管理研究 随着世界移动互联网及物联网、云计算技术的发展,3G技术的优势得到了充分的发挥。智能手机的普及...
594 软件项目风险管理之探索 随着IT科技的飞速发展,软件项目的风险管理成为项目实施成功与否的重要环节。该文通过风险计划编... 项目风险
595 软件项目风险管理过程探析 软件项目风险管理是一个基于过程的管理。是对整个项目生命周期内可能遇到的风险进行预测、识别、分... 项目风险 项目风险 项目风险
596 SG公司人力资源管理信息系统开发项目的进度计划与控制研究 随着现代信息技术的发展,信息化管理软件逐渐成为现代企业提高效率、增加效益不可或缺的必要工具与...

597 rows × 3 columns

import jieba.analyse
text = ''
for i in range(len(df['cutword'])):text += df['cutword'][i]+'\\n'
jieba.analyse.extract_tags(text,topK=20,withWeight=True)
[('项目风险', 8.96327305713358),('需求变更', 0.434584893820764),('需求风险', 0.3314630546090573),('技术风险', 0.32409720895107824),('管理风险', 0.287267980661183),('开发风险', 0.15468275881756008),('人力资源风险', 0.147316913159581),('过程风险', 0.13258522184362292),('人员风险', 0.11048768486968576),('沟通风险', 0.08102430223776956),('项目管理风险', 0.0736584565797905),('成本超支', 0.058926765263832406),('进度延期', 0.05156091960585336),('成本风险', 0.05156091960585336),('组织风险', 0.05156091960585336),('技术复杂', 0.03682922828989525),('团队风险', 0.029463382631916203),('市场变化', 0.029463382631916203),('业务风险', 0.029463382631916203),('项目范围变更', 0.029463382631916203)]
from sklearn.feature_extraction.text import  CountVectorizer,TfidfVectorizer
from sklearn.decomposition import LatentDirichletAllocation
tf_vectorizer = TfidfVectorizer()
#tf_vectorizer = TfidfVectorizer(ngram_range=(2,2)) #2元词袋
X = tf_vectorizer.fit_transform(df.cutword)
#print(tf_vectorizer.get_feature_names_out())
print(X.shape)
(597, 54)
data1 = {'word': tf_vectorizer.get_feature_names(),'tfidf': X.toarray().sum(axis=0).tolist()}
df1 = pd.DataFrame(data1).sort_values(by="tfidf" ,ascending=False,ignore_index=True) 
df1.head(50)
word tfidf
0 项目风险 263.114700
1 技术风险 13.927242
2 管理风险 13.047944
3 需求风险 12.544134
4 需求变更 11.912484
5 开发风险 9.081740
6 过程风险 7.930715
7 人力资源风险 6.603049
8 人员风险 5.521073
9 成本超支 4.871734
10 进度延期 4.674772
11 项目管理风险 4.631457
12 沟通风险 3.740801
13 技术复杂 3.349597
14 组织风险 2.778550
15 业务风险 2.626922
16 市场变化 2.390404
17 市场风险 2.340672
18 成本风险 2.089939
19 团队风险 1.915098
20 沟通不畅 1.903461
21 合同风险 1.551550
22 项目范围变更 1.485818
23 需求变更频繁 1.468582
24 项目范围风险 1.464663
25 开发环境风险 1.295113
26 更新风险 1.288034
27 风险管理风险 1.173554
28 开发效率低 1.000000
29 员工流失 1.000000
30 用户风险 0.988988
31 运营风险 0.970427
32 产品风险 0.892363
33 管理层不支持 0.859065
34 用户需求变化 0.836008
35 范围变更 0.728814
36 设计不合理 0.707107
37 工作效率低 0.707107
38 项目质量风险 0.686501
39 时间风险 0.662809
40 产品性能不足 0.650848
41 需求不明确或不完整 0.640246
42 管理能力不足 0.626602
43 组织管理风险 0.612870
44 需求不明确 0.557005
45 新技术的使用 0.531023
46 使用新技术 0.495843
47 设计和实现风险 0.479658
48 计划编制风险 0.479658
49 客户需求不明确 0.463192
n_topics = 4  #分为10类
lda = LatentDirichletAllocation(n_topics=n_topics, max_iter=100,learning_method='batch',learning_offset=100,
#                                 doc_topic_prior=0.1,
#                                 topic_word_prior=0.01,random_state=0)
lda.fit(X)
LatentDirichletAllocation(batch_size=128, doc_topic_prior=None,evaluate_every=-1, learning_decay=0.7,learning_method='batch', learning_offset=100,max_doc_update_iter=100, max_iter=100, mean_change_tol=0.001,n_jobs=1, n_topics=4, perp_tol=0.1, random_state=0,topic_word_prior=None, total_samples=1000000.0, verbose=0)
def print_top_words(model, feature_names, n_top_words):tword = []tword2 = []tword3=[]for topic_idx, topic in enumerate(model.components_):print("Topic #%d:" % topic_idx)topic_w = [feature_names[i] for i in topic.argsort()[:-n_top_words - 1:-1]]topic_pro=[str(round(topic[i],3)) for i in topic.argsort()[:-n_top_words - 1:-1]]  #(round(topic[i],3))tword.append(topic_w) tword2.append(topic_pro)print(" ".join(topic_w))print(" ".join(topic_pro))print(' ')word_pro=dict(zip(topic_w,topic_pro))tword3.append(word_pro)return tword3
##输出每个主题对应词语和概率
n_top_words = 20
feature_names = tf_vectorizer.get_feature_names()
word_pro = print_top_words(lda, feature_names, n_top_words)
Topic #0:
技术复杂 业务风险 项目范围风险 需求变更频繁 开发效率低 产品性能不足 市场变化 新技术的使用 技术复杂性 项目风险 成本风险 技术风险 开发团队成员缺乏经验 市场风险 成本超支 风险管理风险 开发风险 管理能力不足 需求变更 组织风险
3.597 2.873 1.711 1.709 1.25 0.9 0.819 0.774 0.651 0.262 0.26 0.255 0.254 0.254 0.254 0.253 0.253 0.253 0.253 0.253Topic #1:
人力资源风险 成本超支 进度延期 沟通风险 需求变更 市场变化 合同风险 项目范围变更 员工流失 运营风险 范围变更 工作效率低 设计不合理 需求不明确 客户需求不明确 技术变更 项目管理风险 项目风险 风险管理风险 技术风险
6.841 5.112 4.924 3.985 2.472 2.07 1.793 1.735 1.249 1.219 0.978 0.957 0.957 0.799 0.708 0.598 0.274 0.263 0.261 0.255Topic #2:
项目风险 开发风险 市场风险 组织风险 更新风险 风险管理风险 需求不明确或不完整 管理能力不足 开发团队成员缺乏经验 技术复杂性 项目管理风险 客户需求不明确 技术风险 新技术的使用 成本风险 管理风险 成本超支 用户风险 使用新技术 人员风险
263.321 9.299 2.221 1.816 1.534 1.392 0.886 0.871 0.648 0.256 0.255 0.254 0.253 0.253 0.253 0.253 0.253 0.253 0.252 0.252Topic #3:
技术风险 管理风险 需求风险 需求变更 过程风险 人员风险 项目管理风险 成本风险 团队风险 沟通不畅 开发环境风险 组织风险 用户风险 产品风险 管理层不支持 用户需求变化 项目质量风险 时间风险 组织管理风险 使用新技术
14.164 13.29 12.788 9.937 8.176 5.766 4.851 2.325 2.164 2.151 1.544 1.458 1.235 1.14 1.108 1.084 0.934 0.911 0.86 0.741

#输出每篇文章对应主题
topics=lda.transform(X)
topic=np.argmax(topics,axis=1)
df['topic']=topic
#df.to_excel("data_topic.xlsx",index=False)
print(topics.shape)
print(topics[0])
topic[0]
(597, 4)
[0.25 0.25 0.25 0.25]0
import random   #定义随机生成颜色函数
def randomcolor():colorArr = ['1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']color ="#"+''.join([random.choice(colorArr) for i in range(6)])return color
[randomcolor() for i in range(3)]
['#3149B8', '#A4E22C', '#2BE6D5']
from collections import Counter
from wordcloud import WordCloud
from matplotlib import colors
#from imageio import imread    #形状设置
#mask = imread('爱心.png')  def generate_wordcloud(tup):color_list=[randomcolor() for i in range(10)]  #随机生成10个颜色wordcloud = WordCloud(background_color='white',font_path='simhei.ttf',#mask = mask, #形状设置max_words=20, max_font_size=50,random_state=42,colormap=colors.ListedColormap(color_list)       #颜色).generate(str(tup))return wordcloud
dis_cols = 4                  #一行几个
dis_rows = 3
dis_wordnum=20
plt.figure(figsize=(5 * dis_cols, 5 * dis_rows),dpi=128)
kind=len(df['topic'].unique())for i in range(kind):ax=plt.subplot(dis_rows,dis_cols,i+1)most10 = [ (k,float(v)) for k,v in word_pro[i].items()][:dis_wordnum]  #高频词ax.imshow(generate_wordcloud(most10), interpolation="bilinear")ax.axis('off')ax.set_title("第{}类话题 前{}词汇".format(i,dis_wordnum), fontsize=30)
plt.tight_layout()
plt.show()

在这里插入图片描述