资源简介
python实现了知网论文的高频关键词提取,生成高频关键词矩阵,并进行了社会网络分析
代码片段和文件信息
‘‘‘
本文档处理知网以RefWorks格式导出的文献格式
‘‘‘
import numpy as np
import pandas as pd
data=pd.read_excel(‘data/cnki学习干预关键词.xlsx‘)# 读取原式数据,K1列是关键词,以分号分割
keyword_dict=data[‘K1‘].to_dict() #读取关键字列,并由numpy seriers转化为字典格式
keyword_dict={k:v.split(‘;‘) for kv in keyword_dict.items()}#将每行(一篇论文)的关键词分割成关键词列表
# 将所有文章的关键词组成一个大的列表,方便统计每个关键词出现的次数,map比循环的速度更快
keyword_list=[]
for v in keyword_dict.values():
keyword_list.extend(v)
# map(keyword_list.extendkeyword_dict.values())不能使用?
keyword_list=filter(Nonekeyword_list)
#统计关键词列表中每个关键词出现的次数,找到高频词
# keyword_set=set(keyword_list)
# keyword_count1={k:keyword_list.count(k) for k in keyword_set}
from collections import Counter
keyword_count=Counter(keyword_list)
#产生高频词列表,按从大到小排序
keyword_high_filter=1 #设定高频词阈值
keyword_high={k:v for kv in keyword_count.items() if v>keyword_high_filter}#过滤掉低频词,保留高频词
keyword_sort=sorted(keyword_high.items()key=lambda item :item[1]reverse=True) #按照词频从大到小排序
keyword_sort=dict(keyword_sort)
#构建高频词的共现矩阵
keyword_comatrix=pd.Dataframe(index=keyword_sort.keys()columns=keyword_sort.keys())#初始化关键词共现矩阵
keyword_comatrix_like=pd.Dataframe(index=keyword_sort.keys()columns=keyword_sort.keys())#初始化关键词共现矩阵
keyword=list(keyword_sort.keys())
keyword_len=len(keyword) #关键词个数
for i in range(keyword_len):
s1= keyword[i]#关键词1
keyword_comatrix.iloc[i i]=keyword_sort[s1] #设定关键词共现矩阵的的对角线都为0
keyword_comatrix_like.iloc[i i] = 1
for j in range(i+1keyword_len):
s2=keyword[j]#关键词2
s=set([s1s2])
#统计关键词1、2在各个论文里共同出现的次数,即共现次数
keyword_comatrix.iloc[j i]=keyword_comatrix.iloc[ij]=sum([s.issubset(set(v)) for v in keyword_dict.values()])
keyword_comatrix_like.iloc[j i]=keyword_comatrix_like.iloc[ij]=keyword_comatrix.iloc[ij]/np.sqrt(keyword_sort[s1]*keyword_sort[s2])
#将数据输出达到excel
with pd.ExcelWriter(‘solve.xls‘) as wr:
pd.Series(keyword_count).to_excel(wr ‘keyword_all‘)
pd.Series(keyword_sort).to_excel(wr‘keyword‘)
keyword_comatrix.to_excel(wr‘keyword_comatrix‘)
keyword_comatrix_like.to_excel(wr ‘keyword_comatrix_like‘)
‘‘‘
利用关键词共现的相似矩阵,进行谱聚类
‘‘‘
from sklearn.cluster import SpectralClustering
n_clusters=5
clustering = SpectralClustering(n_clusters=n_clustersaffinity=‘precomputed‘assign_labels=“discretize“)
clf=clustering.fit(keyword_comatrix_like.values)
keyword_cluster_labels=clf.labels_ #分类后的各点的类标签
‘‘‘
关键词共现的社会网络分析
‘‘‘
import networkx as nx
import matplotlib.pyplot as plt
plt.rcParams[‘font.sans-serif‘] = [‘SimHei‘] # 步骤一(替换sans-serif字体)
plt.rcParams[‘axes.unicode_minus‘] = False # 步骤二(解决坐标轴负数的负号显示问题)
G=nx.Graph(keyword_comatrix)
#pos = nx.get_node_attributes(G ‘location‘)
colors=[‘r‘‘b‘‘g‘‘y‘‘purple‘]
node_color =[colors[v] for v in keyword_cluster_labels]
node_size=np.array([G.degree(v) for v in G])*150
#pos=nx.spring_layout(G)
#node_size = [0.0005*nx.get_node_attributes(G ‘population‘)[v] for v in G]
edge_width = [2*keyword_comatrix.loc[uv] f
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 180321 2019-04-16 14:33 data\cnki学习干预关键词.xls
文件 105650 2019-04-16 14:40 data\cnki学习干预关键词.xlsx
文件 250 2019-04-18 11:22 data\keywordnetwork.py
文件 3913 2019-04-28 11:05 get_matrix.py
目录 0 2019-04-18 21:28 data\
评论
共有 条评论