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浅谈软件项目管理中的成本效益和收益管理软件项目实施的主要目标就是实现经济效益。在软件项目管理过程中,必须对所要研发的软件开展经济学...
1J公司用户中心系统项目风险管理研究随着社会环境的变化,项目风险管理的重要性日渐凸显,特别是软件项目,这类项目大多迭代快,在这过...
2敏捷软件项目风险管理探析在敏捷实践中敏捷方法有利于降低项目风险,但它们通常不足以应对在某些场景(例如在高度规范的领域...
3B公司A软件项目风险管理近年来,软件产品市场高速发展,信息安全也越来越被大家所关注,SM(国家涉密信息)软件行业更是...
4S公司敏捷开发互联网软件项目的风险管理随着科技的不断进步发展,信息技术发展至今已经非常成熟,其已经被广泛用于各行各业当中。为顺应时...
.........
592长沙软件园有限公司项目管理成熟度评价研究长沙软件园有限公司具体负责长沙国家软件产业基地的专业基础设施、软件开发环境建设及技术创新运营...
593基于3G技术的“移动勘险”项目管理研究随着世界移动互联网及物联网、云计算技术的发展,3G技术的优势得到了充分的发挥。智能手机的普及...
594软件项目风险管理之探索随着IT科技的飞速发展,软件项目的风险管理成为项目实施成功与否的重要环节。该文通过风险计划编...
595软件项目风险管理过程探析软件项目风险管理是一个基于过程的管理。是对整个项目生命周期内可能遇到的风险进行预测、识别、分...
596SG公司人力资源管理信息系统开发项目的进度计划与控制研究随着现代信息技术的发展,信息化管理软件逐渐成为现代企业提高效率、增加效益不可或缺的必要工具与...

597 rows × 2 columns

#Jieba分词函数

def IsChinese(character):
    '''判断是否为中文字符'''
    for cha in character:
        if not '\u0e00' <= cha <= '\u9fa5':
            return False
    else:
        return True
        
jieba.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浅谈软件项目管理中的成本效益和收益管理软件项目实施的主要目标就是实现经济效益。在软件项目管理过程中,必须对所要研发的软件开展经济学...
1J公司用户中心系统项目风险管理研究随着社会环境的变化,项目风险管理的重要性日渐凸显,特别是软件项目,这类项目大多迭代快,在这过...项目风险 项目风险 项目风险 项目风险 项目风险 客户需求不明确 项目风险 沟通风险 项目风险
2敏捷软件项目风险管理探析在敏捷实践中敏捷方法有利于降低项目风险,但它们通常不足以应对在某些场景(例如在高度规范的领域...项目风险 项目风险 项目风险 项目风险 项目风险
3B公司A软件项目风险管理近年来,软件产品市场高速发展,信息安全也越来越被大家所关注,SM(国家涉密信息)软件行业更是...需求风险 技术风险 人员风险 管理风险 需求风险 技术风险 人员风险 管理风险 需求风险 需...
4S公司敏捷开发互联网软件项目的风险管理随着科技的不断进步发展,信息技术发展至今已经非常成熟,其已经被广泛用于各行各业当中。为顺应时...项目风险 开发风险 开发风险
............
592长沙软件园有限公司项目管理成熟度评价研究长沙软件园有限公司具体负责长沙国家软件产业基地的专业基础设施、软件开发环境建设及技术创新运营...
593基于3G技术的“移动勘险”项目管理研究随着世界移动互联网及物联网、云计算技术的发展,3G技术的优势得到了充分的发挥。智能手机的普及...
594软件项目风险管理之探索随着IT科技的飞速发展,软件项目的风险管理成为项目实施成功与否的重要环节。该文通过风险计划编...项目风险
595软件项目风险管理过程探析软件项目风险管理是一个基于过程的管理。是对整个项目生命周期内可能遇到的风险进行预测、识别、分...项目风险 项目风险 项目风险
596SG公司人力资源管理信息系统开发项目的进度计划与控制研究随着现代信息技术的发展,信息化管理软件逐渐成为现代企业提高效率、增加效益不可或缺的必要工具与...

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)
wordtfidf
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.253
 
Topic #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.255
 
Topic #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.252
 
Topic #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()

在这里插入图片描述


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值