精华内容
下载资源
问答
  • 1.前言最近在学习python词库的可视化,其中有一个依据共现矩阵制作的可视化,感觉十分炫酷,便以此复刻。在这里插入图片描述2.项目背景本人利用爬虫获取各大博客网站的文章,在进行jieba分词,得到每篇文章的关键词...

    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):

    try:

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

    set_key_list = [] # 所有关键词的列表

    fo = open('dic.txt', 'r', 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(' ')

    formated_data.append(words)

    for word in words:

    if word in keywords:

    set_key_list.append(word)

    else:

    words.remove(word)

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

    return formated_data, set_word

    except Exception as reason:

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

    # 初始化矩阵

    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('D:\\untitled\\test')

    print(set_word)

    print(5244)

    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 共现矩阵

    2019-08-22 19:11:34
    https://blog.csdn.net/Dity_Lee/article/details/69663610
    展开全文
  • 你可以试试下面的代码。在import collections, numpytokens=['He','is','not','lazy','intelligent','smart']j=0a=np.zeros((len(tokens),len(tokens)))for pos,token in enumerate(tokens):j+=pos+1for token1 in ...

    你可以试试下面的代码。在import collections, numpy

    tokens=['He','is','not','lazy','intelligent','smart']

    j=0

    a=np.zeros((len(tokens),len(tokens)))

    for pos,token in enumerate(tokens):

    j+=pos+1

    for token1 in tokens[pos+1:]:

    count = 0

    for sentence in [['He','is','not','lazy','He','is','intelligent','He','is','smart'] ]:

    occurrences1 = [i for i,e in enumerate(sentence) if e == token1]

    #print(token1,occurrences1)

    occurrences2 = [i for i,e in enumerate(sentence) if e == token]

    #print(token,occurrences2)

    new1= np.repeat(occurrences1,len(occurrences2))

    new2= np.asarray(occurrences2*len(occurrences1))

    final_new= np.subtract(new1,new2)

    final_abs_diff = np.absolute(final_new)

    final_counts = collections.Counter(final_abs_diff)

    count_1=final_counts[1]

    count_2=final_counts[2]

    count_0=final_counts[0]

    count=count_1+count_2+count_0

    a[pos][j]=count

    #print(token,' ',pos,' ',token1,' ',j,' ',count)

    j+=1

    j=0

    final_mat = a.T+a

    print(final_mat)

    输出为:

    ^{pr2}$

    展开全文
  • 我已经计算了窗口大小为2的坐标矩阵首先编写一个函数,给出正确的邻里词(这里我使用了get context)创建矩阵,如果相邻的hood中存在particuar值,只需添加1。下面是python代码:import numpy as npCORPUS=["abc def ...

    我已经计算了窗口大小为2的坐标矩阵首先编写一个函数,给出正确的邻里词(这里我使用了get context)

    创建矩阵,如果相邻的hood中存在particuar值,只需添加1。

    下面是python代码:import numpy as np

    CORPUS=["abc def ijk pqr", "pqr klm opq", "lmn pqr xyz abc def pqr abc"]

    top2000 = [ "abc","pqr","def"]#list(set((' '.join(ctxs)).split(' ')))

    a = np.zeros((3,3), np.int32)

    for sentence in CORPUS:

    for index,word in enumerate(sentence.split(' ')):

    if word in top2000 :

    print(word)

    context=GetContext(sentence,index)

    print(context)

    for word2 in context:

    if word2 in top2000:

    a[top2000.index(word)][top2000.index(word2)]+=1

    print(a)

    获取上下文函数def GetContext(sentence, index):

    words = sentence.split(' ')

    ret=[]

    for word in words:

    if index==0:

    ret.append(words[index+1])

    ret.append(words[index+2])

    elif index==1:

    ret.append(words[index-1])

    ret.append(words[index+1])

    if len(words)>3:

    ret.append(words[index+2])

    elif index==(len(words)-1):

    ret.append(words[index-2])

    ret.append(words[index-1])

    elif index==(len(words)-2):

    ret.append(words[index-2])

    ret.append(words[index-1])

    ret.append(words[index+1])

    else:

    ret.append(words[index-2])

    ret.append(words[index-1])

    ret.append(words[index+1])

    ret.append(words[index+2])

    return ret

    结果如下:array([[0, 3, 3],

    [3, 0, 2],

    [3, 2, 0]])

    展开全文
  • 1.前言最近在学习python词库的可视化,其中有一个依据共现矩阵制作的可视化,感觉十分炫酷,便以此复刻。2.项目背景本人利用爬虫获取各大博客网站的文章,在进行jieba分词,得到每篇文章的关键词,对这些关键词进行...
  • python 共现矩阵的实现

    千次阅读 2020-02-29 15:26:58
    最近在学习python词库的可视化,其中有一个依据共现矩阵制作的可视化,感觉十分炫酷,便以此复刻。 什么是共现矩阵 比如我们有两句话: ls = ['我永远喜欢三上悠亚', '三上悠亚又出新作了'] 在jieba分词下我们可以...
  • python 共现矩阵构建

    千次阅读 热门讨论 2019-04-26 19:44:02
    1.什么是共词矩阵: 共词矩阵:共词矩阵能表明两个词之间的关系程度 2.构建过程: 数据准备: 假设有10篇文本,我们将从这10篇文本中,提取每一篇的分词结果,并存入Single_text_list中。再将由10篇文章的关键词列表...
  • occurrences like: A B C D A 0 2 1 1 B 2 0 2 1 C 1 2 0 1 D 1 1 1 0 There is a solution (Creating co-occurrence matrix) for this problem in R, but I couldn't do it in Python. I am thinking of doing it ...
  • 代码源于需求~第一步,python构建出共现矩阵中文分词、去停用词数据存储第二步,pajek结合ucinet可视化,可vosviewer上图python实现共现矩阵代码见:https://www.cnblogs.com/Cookie-Jing/p/13837525.html点击原文...
  • Python实现共现矩阵及networkx可视化结果共现矩阵代码实现networkx可视化代码实现参考文章 共现矩阵 共现矩阵:也称为共词矩阵,能表明两个词之间的关系程度 首先假设我们有两句话,如下图所示,通过jieba分词和...
  • 共现矩阵可以统计出分类标签同时出现的次数,然后可用于PMI值计算(PMI算法的基本思想是:统计两个分类标签在文本中同时出现的概率,如果概率越大,其相关性就越紧密,关联度越高),因此共现矩阵的计算在数据挖掘与...
  • 代码源于需求~第一步,python构建出共现矩阵中文分词、去停用词数据存储第二步,pajek结合ucinet可视化,可vosviewer上图python实现共现矩阵代码见:https://www.cnblogs.com/Cookie-Jing/p/13837525.html点击原文...
  • Python 实现共现矩阵算法

    千次阅读 2017-04-08 00:01:47
    用到的模块: xlrd​最后得到文件: txt(全部复制txt 打开新表格粘贴即可得到xls文件)​​///开始写这个方法的目的是完成作业目标: 对表格里的关键词提取, 然后计算其共现次数, 生成共现矩阵
  • python构建关键词共现矩阵

    万次阅读 多人点赞 2017-04-05 15:44:37
    本文仅仅提供了实现思路,如果对算法速度有追求的请移步python构建关键词共现矩阵速度优化(在此非常感谢这位同学的优化) 非常感谢南京大学的张同学发现我代码中的bug,现文中的代码均已经更新请放心使用,并且代码...
  • 共现矩阵(共词矩阵):统计文本中两两词组之间共同出现的次数,以此来描述词组间的亲密度 code(我这里求的对角线元素为该字段在文本中出现的总次数): import pandas as pd def gx_matrix(vol_li): # 整合一下,...
  • python构建共现矩阵

    千次阅读 2018-11-13 17:23:36
    def get_set_key(word_dic, threshold, threshold2): # 选取频数大于等于Threshold(阈值)的关键词构建一个集合,用于作为共现矩阵的首行和首列 wf = {k: v for k, v in word_dic.items() if v >= threshold and v ...
  • Python Pandas 构建共现矩阵

    千次阅读 2018-11-16 16:35:19
    作者共现、词共现等各种共现情况的研究需求在我们这个学科还是挺多的,来写一下如何使用Python构建共现矩阵。 基本思路 构建共现矩阵,我一个基本思路是先根据所有的目标对象构建一个单位矩阵,然后对目标对象的...
  • python实现关键词共现矩阵

    千次阅读 2017-08-21 10:25:00
    python实现关键词共现矩阵,将下图中同时出现的关键词, 转化为下图的共现矩阵。 代码如下: import pandas as pd import numpy as np data = pd.read_excel(r'E:\Python\data.xlsx',header=None) ...
  • Python构建共现矩阵并将其三元组形式存储至csv文件

    千次阅读 多人点赞 2019-04-05 16:52:29
    引言:共现矩阵有什么用? 主要用于发现主题,解决词向量相近关系的表示; 将共现矩阵行(列)作为词向量,其表现形式类似于数据结构中图论里学的邻接矩阵。在本文中,笔者主要用来统计会议论文作者之间的合作关系。 ...
  • 在做社会网络分析时,首先需要得到共现矩阵,如关键词共现矩阵、作者共现矩阵、机构共现矩阵等。可是如何把从知网里导出的这些数据做成共现矩阵就比较麻烦了。当然可以使用bibexcel或者《书目共现分析系统》...
  • python构建关键词共现矩阵速度优化

    千次阅读 热门讨论 2018-01-24 11:18:27
    首先感谢[AlanConstantineLau]的文章,为做共现矩阵提供了思路。本文也是基于他的代码进行一定的速度优化。 (http://blog.csdn.net/alanconstantinelau/article/details/69258443) 按照原作者的代码,在构造一个...
  • 共现矩阵可以统计出分类标签同时出现的次数,然后可用于PMI值计算(PMI算法的基本思想是:统计两个分类标签在文本中同时出现的概率,如果概率越大,其相关性就越紧密,关联度越高),因此共现矩阵的计算在数据挖掘与...

空空如也

空空如也

1 2 3 4 5
收藏数 81
精华内容 32
关键字:

python共现矩阵

python 订阅