精华内容
下载资源
问答
  • 共现矩阵

    千次阅读 2019-08-02 19:54:52
    共现矩阵 主要用于发现主题,解决词向量相近关系的表示; 将共现矩阵行(列)作为词向量 例如:语料库如下: • I like deep learning. • I like NLP. • I enjoy flying. 则共现矩阵表示如下:(使用对称的窗函数...

    共现矩阵

    主要用于发现主题,解决词向量相近关系的表示; 
    将共现矩阵行(列)作为词向量

    例如:语料库如下: 
    • I like deep learning. 
    • I like NLP. 
    • I enjoy flying.

    则共现矩阵表示如下:(使用对称的窗函数(左右window length都为1) )

    è¿éåå¾çæè¿°

    例如:“I like”出现在第1,2句话中,一共出现2次,所以=2。 
    对称的窗口指的是,“like I”也是2次

    将共现矩阵行(列)作为词向量表示后,可以知道like,enjoy都是在I附近且统计数目大约相等,他们意思相近

    共现矩阵不足: 

    面临稀疏性问题、向量维数随着词典大小线性增长

    解决:SVD、PCA降维,但是计算量大
     

    展开全文
  • 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()

    展开全文
  • a b c d e原始矩阵 a b c a 0 1 1 1 1b c e --> b 1 0 2 0 1 共现矩阵 共现矩阵对角线上一定是全零a e d c 1 2 0 0 1d 1 0 0 0 1e 1 0 1 1 0c a e d那么 b 2 1 1 1 bc之间的边就是2,依此类推:ba之间...

    a b c d e

    原始矩阵 a b c a 0 1 1 1 1

    b c e --> b 1 0 2 0 1 共现矩阵 共现矩阵对角线上一定是全零

    a e d c 1 2 0 0 1

    d 1 0 0 0 1

    e 1 0 1 1 0

    c a e d

    那么 b 2 1 1 1 bc之间的边就是2,依此类推:ba之间的边就是1,be之间的边就是1,bd之间的边就是1, 所有b元素的边加起来就是b的度,为什么要介绍这些概念呢?因为在复杂网络数据可视化中将会用到这些概念。以b为结点,将a,c,d,e四个结点进行联结,那么度越大,节点越大,边越大,线越粗。最终目标是将冰与火之歌的人物关系图谱通过可视化的方式做出来。

    import pandas as pd

    df = pd.DataFrame({'TFD' : ['AA', 'SL', 'BB', 'D0', 'Dk', 'FF'],

    'Snack' : ['1', '0', '1', '1', '0', '0'],

    'Trans' : ['1', '1', '1', '0', '0', '1'],

    'Dop' : ['1', '0', '1', '0', '1', '1']}).set_index('TFD')

    print df

    >>>

    Dop Snack Trans

    TFD

    AA 1 1 1

    SL 0 0 1

    BB 1 1 1

    D0 0 1 0

    Dk 1 0 0

    FF 1 0 1

    [6 rows x 3 columns]

    Dop Snack Trans

    Dop 0 2 3

    Snack 2 0 2

    Trans 3 2 0

    这是在stackoverflow上看到一个关于pandas构建共现矩阵的题,那么为什么会从上面的矩阵转换成下面的矩阵呢?先看原始矩阵,在第一行中Dop与Snack在AA中共同出现1次,在第三行中Dop与Snack在BB中共同出现1次,以此类推。最终就得到了下面的矩阵。

    展开全文
  • 你可以试试下面的代码。在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}$

    展开全文
  • 共现矩阵生成器.zip

    2019-11-27 09:37:07
    共现矩阵生成python实现 包括源代码和打包好的exe Co-occurrence_Matrix.exe 软件本体 data.csv 原始数据 上面让你准备的那个 node.csv 节点数据 (包含节点名称+词频数) edge.csv 节点关系的三元...
  • python 共现矩阵的实现

    千次阅读 2020-02-29 15:26:58
    文章目录前言什么是共现矩阵共现矩阵的构建思路 前言 最近在学习python词库的可视化,其中有一个依据共现矩阵制作的可视化,感觉十分炫酷,便以此复刻。 什么是共现矩阵 比如我们有两句话: ls = ['我永远喜欢三上...
  • 我已经计算了窗口大小为2的坐标矩阵首先编写一个函数,给出正确的邻里词(这里我使用了get context)创建矩阵,如果相邻的hood中存在particuar值,只需添加1。下面是python代码:import numpy as npCORPUS=["abc def ...
  • 基于LBP共现矩阵的红外人脸识别
  • 1.前言最近在学习python词库的可视化,其中有一个依据共现矩阵制作的可视化,感觉十分炫酷,便以此复刻。2.项目背景本人利用爬虫获取各大博客网站的文章,在进行jieba分词,得到每篇文章的关键词,对这些关键词进行...
  • 【NLP】关键词共现/属性共现矩阵

    千次阅读 2020-02-11 19:39:42
    【NLP】关键词共现/属性共现矩阵 【共现】理解起来无非是两个词语同时出现的频次作为一个指标,构造矩阵。矩阵的第一列和第一行都是词语列表中的所有词,因此对角线一般设置为0——即不把自己和自己共现算进去。假如...
  • Python实现共现矩阵及networkx可视化结果共现矩阵代码实现networkx可视化代码实现参考文章 共现矩阵 共现矩阵:也称为共词矩阵,能表明两个词之间的关系程度 首先假设我们有两句话,如下图所示,通过jieba分词和...
  • python构建关键词共现矩阵

    万次阅读 多人点赞 2017-04-05 15:44:37
    本文仅仅提供了实现思路,如果对算法速度有追求的请移步python构建关键词共现矩阵速度优化(在此非常感谢这位同学的优化) 非常感谢南京大学的张同学发现我代码中的bug,现文中的代码均已经更新请放心使用,并且代码...
  • 基于多尺度共现矩阵的铜浮选故障状态识别
  • 基于颜色共现矩阵的矿物浮选泡沫图像纹理提取
  • 基于颜色共现矩阵的泡沫矿浮选图像图像提取
  • 共现矩阵定义 通过统计一个事先指定大小的窗口内的word共现次数,以word周边的共现词的次数做为当前word的vector。具体来说,我们通过从大量的语料文本中构建一个共现矩阵来定义word representation。 例子 有语料...
  • Python Pandas 构建共现矩阵

    千次阅读 2018-11-16 16:35:19
    作者共现、词共现等各种共现情况的研究需求在我们这个学科还是挺多的,来写一下如何使用Python构建共现矩阵。 基本思路 构建共现矩阵,我一个基本思路是先根据所有的目标对象构建一个单位矩阵,然后对目标对象的...
  • 基于双面扫描和共现矩阵的色织机织物颜色纹理分类
  • 共现矩阵可以统计出分类标签同时出现的次数,然后可用于PMI值计算(PMI算法的基本思想是:统计两个分类标签在文本中同时出现的概率,如果概率越大,其相关性就越紧密,关联度越高),因此共现矩阵的计算在数据挖掘与...
  • COOC1.9软件 一键做共现矩阵与相异矩阵 COOC1.8软件介绍: 本次更新解决因为电脑编码问题导致相异矩阵部分电脑做不成功难题。 如图:一个入口相异矩阵做不成功直接换别的入口即可,包含所有情况啦! COOC1.8软件优势...
  • 关键词提取一:构造共现矩阵

    千次阅读 2018-01-28 21:48:22
    因为TFIDF算法的提取关键词的准确性很差,tfidf提取出的关键词很难看出...因为构造词语网络需要先构造关键词共现图,关键词共现图需要先构造关键词共现矩阵,所以第一步就是构造关键词共现矩阵。 构造关键词共现矩阵
  • 共现矩阵可以统计出分类标签同时出现的次数,然后可用于PMI值计算(PMI算法的基本思想是:统计两个分类标签在文本中同时出现的概率,如果概率越大,其相关性就越紧密,关联度越高),因此共现矩阵的计算在数据挖掘与...
  • 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) ...
  • 所谓的共现矩阵,就是词表示矩阵。不过目前有2种不同的共现矩阵。一种是词在文章中的出现次数。比如下面两篇“文章”: 1)我爱北京天安门 2)我爱吃北京烤鸭 北京就在两篇文章中各出现一次。而天安门只在第一篇文章...
  • 共现矩阵的应用 Mapreduce 解决思路 实现细节 代码详解 对于小文件的处理 对于大文件的处理 结果与分析 相关知识简介 共现矩阵的应用 共现矩阵是许多语言模型中常用的技术之一,其主要应用于主题发现和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 448
精华内容 179
关键字:

共现矩阵