1.前言

最近在学习python词库的可视化,其中有一个依据共现矩阵制作的可视化,感觉十分炫酷,便以此复刻。

2.项目背景

本人利用爬虫获取各大博客网站的文章,在进行jieba分词,得到每篇文章的关键词,对这些关键词进行共现矩阵的可视化。

3.什么是共现矩阵

比如我们有两句话:

ls = ['我永远喜欢三上悠亚', '三上悠亚又出新作了']

在jieba分词下我们可以得到如下效果:

我们就可以构建一个以关键词的共现矩阵:

['', '我', '永远', '喜欢', '三上', '悠亚', '又', '出', '新作', '了']

['我', 0, 1, 1, 1, 1, 0, 0, 0, 0]

['永远', 1, 0, 1, 1, 1, 0, 0, 0, 0]

['喜欢' 1, 1, 0, 1, 1, 0, 0, 0, 0]

['三上', 1, 1, 1, 0, 1, 1, 1, 1, 1]

['悠亚', 1, 1, 1, 1, 0, 1, 1, 1, 1]

['又', 0, 0, 0, 1, 1, 0, 1, 1, 1]

['出', 0, 0, 0, 1, 1, 1, 0, 1, 1]

['新作', 0, 0, 0, 1, 1, 1, 1, 0, 1]

['了', 0, 0, 0, 1, 1, 1, 1, 1, 0]]

解释一下,“我永远喜欢三上悠亚”,这一句话中,“我”和“永远”共同出现了一次,在共现矩阵对应的[ i ] [ j ]和[ j ][ i ]上+1,并依次类推。

基于这个原因,我们可以发现,共现矩阵的特点是:

共现矩阵的[0][0]为空。

共现矩阵的第一行第一列是关键词。

对角线全为0。

共现矩阵其实是一个对称矩阵。

当然,在实际的操作中,这些关键词是需要经过清洗的,这样的可视化才干净。

4.共现矩阵的构建思路

每篇文章关键词的二维数组formated_data。

所有关键词的集合set_word。

建立关键词长度+1的矩阵matrix。

赋值矩阵的第一行与第一列为关键词。

设置矩阵对角线为0。

遍历formated_data,让取出的行关键词和取出的列关键词进行组合,共现则+1。

5.共现矩阵的代码实现

```

# coding:utf-8

import numpy as np

import pandas as pd

import jieba.analyse

import os

# 获取关键词

def Get_file_keywords(dir):

data_array = [] # 每篇文章关键词的二维数组

set_word = [] # 所有关键词的集合

try:

fo = open('dic_test.txt', 'w+', encoding='UTF-8')

# keywords = fo.read()

for home, dirs, files in os.walk(dir): # 遍历文件夹下的每篇文章

for filename in files:

fullname = os.path.join(home, filename)

f = open(fullname, 'r', encoding='UTF-8')

sentence = f.read()

words = " ".join(jieba.analyse.extract_tags(sentence=sentence, topK=30, withWeight=False,

allowPOS=('n'))) # TF-IDF分词

words = words.split(' ')

data_array.append(words)

for word in words:

if word not in set_word:

set_word.append(word)

set_word = list(set(set_word)) # 所有关键词的集合

return data_array, set_word

except Exception as reason:

print('出现错误:', reason)

return data_array, set_word

# 初始化矩阵

def build_matirx(set_word):

edge = len(set_word) + 1 # 建立矩阵,矩阵的高度和宽度为关键词集合的长度+1

'''matrix = np.zeros((edge, edge), dtype=str)''' # 另一种初始化方法

matrix = [['' for j in range(edge)] for i in range(edge)] # 初始化矩阵

matrix[0][1:] = np.array(set_word)

matrix = list(map(list, zip(*matrix)))

matrix[0][1:] = np.array(set_word) # 赋值矩阵的第一行与第一列

return matrix

# 计算各个关键词的共现次数

def count_matrix(matrix, formated_data):

for row in range(1, len(matrix)):

# 遍历矩阵第一行,跳过下标为0的元素

for col in range(1, len(matrix)):

# 遍历矩阵第一列,跳过下标为0的元素

# 实际上就是为了跳过matrix中下标为[0][0]的元素,因为[0][0]为空,不为关键词

if matrix[0][row] == matrix[col][0]:

# 如果取出的行关键词和取出的列关键词相同,则其对应的共现次数为0,即矩阵对角线为0

matrix[col][row] = str(0)

else:

counter = 0 # 初始化计数器

for ech in formated_data:

# 遍历格式化后的原始数据,让取出的行关键词和取出的列关键词进行组合,

# 再放到每条原始数据中查询

if matrix[0][row] in ech and matrix[col][0] in ech:

counter += 1

else:

continue

matrix[col][row] = str(counter)

return matrix

def main():

formated_data, set_word = Get_file_keywords(r'D:\untitled\test')

print(set_word)

print(formated_data)

matrix = build_matirx(set_word)

matrix = count_matrix(matrix, formated_data)

data1 = pd.DataFrame(matrix)

data1.to_csv('data.csv', index=0, columns=None, encoding='utf_8_sig')

main()

```

python关键词共现_python 共现矩阵的实现相关推荐

  1. python关键词讲解大全_python实现关键词提取的示例讲解

    python实现关键词提取的示例讲解 发布时间:2020-09-07 10:10:06

  2. python关键词共现图谱_如何用知网导出的关键词 几秒 生成共现矩阵及图谱 》完整版...

    自编软件使用技能视频演示(一) 最新整理完整版的,从收集数据 到 共词矩阵 到 图谱. 在做社会网络分析时,首先需要得到共现矩阵,如关键词共现矩阵.作者共现矩阵.机构共现矩阵等. 可是如何把从知网里导 ...

  3. 【NLP】关键词共现/属性共现矩阵

    [NLP]关键词共现/属性共现矩阵 [共现]理解起来无非是两个词语同时出现的频次作为一个指标,构造矩阵.矩阵的第一列和第一行都是词语列表中的所有词,因此对角线一般设置为0--即不把自己和自己共现算进去 ...

  4. python顺序表转置_Python:二维列表下标互换方式(矩阵转置)

    Python:二维列表下标互换方式(矩阵转置) 发布时间:2020-08-20 04:13:38

  5. python技术点总结_Python技术点总结,碰到问题再也不用慌了!

    对于一个刚开始学习Python或者刚步入Python工作岗位的人来说,总会碰到各种各样的问题,而这其实都是很正常的,今天我们把在Python工作或者学习中常碰到的一些技术点总结一下 ,希望对你有所帮助 ...

  6. c++读出像素矩阵_Python传numpy矩阵调c++(求3D图像连通区域)

    Python有很多种调c++的方法,有的复杂有的简单,有时使用的时候反而不知道到底该用哪一种比较好,其实没有最好的方法,只有适合不适合自己.本文从我所遇到的问题说起,然后讲述另一种比较简单的pytho ...

  7. python中factor函数_Python入门-函数

    函数 在维基百科上函数式这样描述的: 函数在数学中为两集合间的一种对应关系:输入值集合中的每项元素皆能对应唯一一项输出值集合中的元素. 此处的函数区别于我们数学上的函数,在编程世界中,函数(Funct ...

  8. python决策树 多分类_Python中的决策树分类:您需要了解的一切

    python决策树 多分类 什么是决策树? (What is Decision Tree?) A decision tree is a decision support tool that uses ...

  9. 计算机组成原理辅助存储器ppt,计算机组成原理存储器PPT资料共60页[共60页]

    <计算机组成原理存储器PPT资料共60页[共60页]>由会员分享,可在线阅读,更多相关<计算机组成原理存储器PPT资料共60页[共60页](60页珍藏版)>请在读根文库上搜索. ...

最新文章

  1. springboot之jackson的两种配置方式
  2. 【小白学习PyTorch教程】九、基于Pytorch训练第一个RNN模型
  3. 连接编码器_编码器与PLC的接线
  4. linux权限体系有哪些角色,详解Linux下系统权限
  5. C#设计模式:迭代器模式(Iterator Pattern)
  6. 30岁的你,目标工资是多少?
  7. Unity 和腾讯游戏成立联合创新实验室:从技术创新探索游戏产品新模式和概念
  8. c3p0 服务启动获取连接超时_一次c3p0连接池连接异常错误的排查
  9. 30天自制操作系统——Day8实验报告
  10. 如何用安装启动盘启动计算机,用u盘启动电脑进入系统安装 如何进入启动u盘安装系统...
  11. 面试问题总结——关于YOLO系列(三)
  12. Get rid of annoying security alerts in Microsoft Outlook!
  13. 青岛科技大学和青岛大学计算机专业,青岛科技大学和青岛大学哪个好呢?优势的专业分别是什么?...
  14. java bean ejb_EJB:企业JavaBean - 解道jdon
  15. Opencv-Python-导向滤波快速导向滤波
  16. 520谁才是你的真爱?
  17. java求长方体体积用什么类_Java题求解: 设计一个求长方体的体积和表面积的类Cube,包括以下属性和方法。 l1:长方体...
  18. java任务系统设计_任务调度系统-任务依赖的设计
  19. 通过token窃取实现降权或者提权
  20. 血液采样卡技术参数_使用不同采样技术的信用卡欺诈检测

热门文章

  1. matlab实现qr分解
  2. MySQL命令行导入导出sql文件
  3. XCode6 ,iOS之PCH文件配置
  4. codeforce Gym 100418K Cards (概率,数学)
  5. 咖啡口味介绍及存储方式
  6. Silverlight 3正式版新鲜出炉
  7. [转载] python截取指定字符串_python字符串截取,python字符串切片的方法详解
  8. [转载] 利用c/c++编写python模块
  9. Duplicate entry 'xxx' for key 'xxx'
  10. node.js中ws模块创建服务端和客户端,网页WebSocket客户端