精华内容
下载资源
问答
  • 本篇文章主要采用Python和Gephi构建中国知网某个领域的作者合作关系和主题词共现的知识图谱,重点阐述了一种可操作的关系图谱构建方法,可用于论文发表、课程或企业可视化展示等。其基本步骤如下:1.在中国知网搜索...

    该系列文章主要讲解知识图谱或关系图谱的构建方法,前文介绍了Neo4j图数据库和Jieba、PyLTP的基本用法。本篇文章主要采用Python和Gephi构建中国知网某个领域的作者合作关系和主题词共现的知识图谱,重点阐述了一种可操作的关系图谱构建方法,可用于论文发表、课程或企业可视化展示等。其基本步骤如下:

    1.在中国知网搜索“清水江”关键词,并导出论文Excel格式。
    2.使用Python处理文本,获取作者合作的共现矩阵及三元组。
    3.Gephi导入CSV节点及边文件,并构建关系图谱。
    4.Gephi调整参数,优化关系图谱。

    这是一篇非常基础的文章,而且不需要撰写网络爬虫,最终生成的效果还不错,可广泛应用于知识图谱、引文分析、企业合作等领域。希望大家喜欢,尤其是研究自然语言处理和知识图谱的同学。同时,从今天起,博客的代码尽量上传到Github和CSDN下载,脚踏实地,与君同在。

    下载地址:https://download.csdn.net/download/eastmount/11650953

    前文参考
    Neo4j图数据库系列:
    [知识图谱构建] 一.Neo4j图数据库安装初识及药材供应图谱实例
    [知识图谱构建] 二.《Neo4j基础入门》基础学习之创建图数据库节点及关系
    [知识图谱构建] 三.Neo4j创建高校教师关系图谱及查询语句入门详解

    Python知识图谱构建系列:
    [Python知识图谱] 一.哈工大pyltp安装及中文分句、中文分词、导入词典基本用法
    [Python知识图谱] 二.哈工大pyltp词性标注、命名实体识别、依存句法分析和语义角色标注
    [Python知识图谱] 三.Jieba工具中文分词、添加自定义词典及词性标注详解

    关系图谱系列:
    [关系图谱] 一.Gephi通过共现矩阵构建知网作者关系图谱
    [关系图谱] 二.Gephi导入共线矩阵构建作者关系图谱

    知识图谱实例系列:
    [知识图谱实战篇] 一.数据抓取之Python3抓取JSON格式的电影实体
    [知识图谱实战篇] 二.Json+Seaborn可视化展示电影实体
    [知识图谱实战篇] 三.Python提取JSON数据、HTML+D3构建基本可视化布局
    [知识图谱实战篇] 四.HTML+D3+CSS绘制关系图谱
    [知识图谱实战篇] 五.HTML+D3添加鼠标响应事件显示相关节点及边
    [知识图谱实战篇] 六.HTML+D3实现点击节点显示相关属性及属性值
    [知识图谱实战篇] 七.HTML+D3实现关系图谱搜索功能
    [知识图谱实战篇] 八.HTML+D3绘制时间轴线及显示实体


    一.最终效果图

    作者合作知识图谱

    下面是另一个主题“网络安全”以某作者为中心的区域,分别是武大和北邮。

    关键词共现知识图谱


    二.中国知网导出数据

    第一步:在中国知网CNKI中搜索“清水江”关键词,返回期刊论文1007篇,作为目标分析数据。

    注意,中国知网最多能导出5000篇文献,如果文章过多建议增加按年份统计,最后再汇总。同时,由于博士论文、会议论文、报纸作者关系较为单一,所以这里仅分析期刊论文。

    第二步:点击左上角勾选文献。每次最多选择50篇论文,接着点击下一页,导出500篇文献。

    选择下一页:

    选中500篇论文之后,接着点击“导出/参考文献”选项。

    第三步:在弹出的 界面中,选择“Reforks”格式,点击XLS导出。

    到处的表格如下图所示,包括各种论文信息,可惜没有下载量和被引用量(网络爬虫实现),但我们的知识图谱分析也够了。

    第四步:再下载剩余的所有文献,每次500篇的下载,并整理在一个Excel表格中,过滤掉英文和无作者的论文,剩下958篇,即为分析的数据集。


    三.什么是共现关系

    引文分析常见的包括两类,一种是共现关系,另一种是引用和被引用关系。本文主要讲解共现关系,假设现在存在四篇文章,如下所示:

    文章标题                                        作者
    大数据发展现状分析                              A,B,C,D
    Python网络爬虫                                 A,B,C
    贵州省大数据战略                                 B,A,D
    大数据分析重要                                    D,A
    

    第一步:写代码抓取该领域文章的所有作者,即:A、B、C、D。

    第二步:接着获取对应的共现矩阵,比如文章“大数据发展现状分析”,则认为A、B、C、D共现,在他们之间建立一条边。共现矩阵如下所示,共13条边。

    (1)[ABCDA0222B1022C0001D1000] \left[ \begin{matrix} -& A & B & C & D \\ A & 0 & 2 & 2 & 2 \\ B & 1 & 0 & 2 & 2 \\ C & 0 & 0 & 0 & 1 \\ D & 1 & 0 & 0 & 0 \end{matrix} \right] \tag{1}

    第三步:由于最后的图谱是无向图,为了方便计算,我们将矩阵的下三角数据加至上三角,从而减少计算量。

    (1)[ABCDA0323B0022C0001D0000] \left[ \begin{matrix} -& A & B & C & D \\ A & 0 & 3 & 2 & 3 \\ B & 0 & 0 & 2 & 2 \\ C & 0 & 0 & 0 & 1 \\ D & 0 & 0 & 0 & 0 \end{matrix} \right] \tag{1}

    第四步:通过共现矩阵分别获取两两关系及权重,再写入CSV或Excel文件中,如下所示。知识图谱通常由三元组构成,包括 {实体,属性,属性值}、{实体、关系、实体},这里的{Source、Weight、Weight}也可以称为一个三元组。

    (2)[SourceTargetWeightAB3AC2AD3BC2BD2CD1] \left[ \begin{matrix} Source & Target & Weight \\ A & B & 3 \\ A & C & 2 \\ A & D & 3 \\ B & C & 2 \\ B & D & 2 \\ C & D & 1 \end{matrix} \right] \tag{2}

    第五步:将该CSV文件导入Gephi中,并绘制相关的图形。因为该实例节点比较少,下面是Pyhton调用Networkx绘制的代码及图形。

    # -*- coding: utf-8 -*-
    import networkx as nx
    import matplotlib.pyplot as plt
     
    #定义有向图
    DG = nx.Graph() 
    #添加五个节点(列表)
    DG.add_nodes_from(['A', 'B', 'C', 'D'])
    print DG.nodes()
    #添加边(列表)
    DG.add_edge('A', 'B', weight=3)
    DG.add_edge('A', 'C', weight=2)
    DG.add_edge('A', 'D', weight=3)
    DG.add_edge('B', 'C', weight=2)
    DG.add_edge('B', 'D', weight=2)
    DG.add_edge('C', 'D', weight=1)
    #DG.add_edges_from([('A', 'B'), ('A', 'C'), ('A', 'D'), ('B','C'),('B','D'),('C','D')])
    print DG.edges()
    #绘制图形 设置节点名显示\节点大小\节点颜色
    colors = ['red', 'green', 'blue', 'yellow']
    nx.draw(DG,with_labels=True, node_size=900, node_color = colors)
    plt.show()
    

    绘制图形如下所示:

    接下来我们将告诉大家如何撰写Python代码获取作者共现矩阵及三元组。


    四.Python构建共现矩阵和三元组

    第一步 :将Excel中作者列单独提取至word.txt文件中,如下图所示。

    第二步:运行Python代码获取共现矩阵和{Source, Weight,Target}三元组。

    • 按行读取TXT数据,并调用split(’;’)分割作者,将所有作者信息存储至word列表中(不含重复项)
    • 建立 word_vector[作者数][作者数] 共现矩阵,依次获取每行的两个作者下标位置,记录在变量w1、w2、n1、n2中
    • 词频矩阵赋值,这里通过判断计算上三角矩阵 word_vector[n1][n2] += 1 或 word_vector[n2][n1] += 1
    • 两层循环获取共现矩阵 word_vector[i][j] 中不为0的数值,word[i]、word[j] 和权重 word_vector[i][j] 即为三元组
    • 将最终结果输出至TXT和CSV文件
    # -*- coding: utf-8 -*-
    """
    @author: eastmount CSDN 杨秀璋 2019-09-02
    """
    import pandas as pd
    import numpy as np
    import codecs
    import networkx as nx
    import matplotlib.pyplot as plt
    import csv
     
    #---------------------------第一步:读取数据-------------------------------
    word = [] #记录关键词
    f = open("word.txt")            
    line = f.readline()           
    while line:
        #print line
        line = line.replace("\n", "") #过滤换行
        line = line.strip('\n') 
        for n in line.split(';'):
            #print n
            if n not in word:
                word.append(n)
        line = f.readline()
    f.close()
    print len(word) #作者总数
    
    
    #--------------------------第二步 计算共现矩阵----------------------------
    a = np.zeros([2,3])
    print a
    
    #共现矩阵
    #word_vector = np.zeros([len(word),len(word)], dtype='float16') 
    
    #MemoryError:矩阵过大汇报内存错误
    #https://jingyan.baidu.com/article/a65957f434970a24e67f9be6.html
    #采用coo_matrix函数解决该问题
    
    from scipy.sparse import coo_matrix
    print len(word)
    #类型<type 'numpy.ndarray'>
    word_vector = coo_matrix((len(word),len(word)), dtype=np.int8).toarray() 
    print word_vector.shape
    
    f = open("word.txt")
    line = f.readline()           
    while line:
        line = line.replace("\n", "") #过滤换行
        line = line.strip('\n') #过滤换行
        nums = line.split(';')
    
        #循环遍历关键词所在位置 设置word_vector计数
        i = 0
        j = 0
        while i<len(nums):       #ABCD共现 AB AC AD BC BD CD加1
            j = i + 1
            w1 = nums[i]           #第一个单词
            while j<len(nums):
                w2 = nums[j]       #第二个单词
                #从word数组中找到单词对应的下标
                k = 0
                n1 = 0
                while k<len(word):
                    if w1==word[k]:
                        n1 = k
                        break
                    k = k +1
                #寻找第二个关键字位置
                k = 0
                n2 = 0
                while k<len(word):
                    if w2==word[k]:
                        n2 = k
                        break
                    k = k +1
                #重点: 词频矩阵赋值 只计算上三角
                if n1<=n2:
                    word_vector[n1][n2] = word_vector[n1][n2] + 1
                else:
                    word_vector[n2][n1] = word_vector[n2][n1] + 1
                #print n1, n2, w1, w2
                j = j + 1
            i = i + 1
        #读取新内容
        line = f.readline()
    f.close()
    
    
    #--------------------------第三步  TXT文件写入--------------------------
    res = open("word_word_weight.txt", "a+")
    i = 0
    while i<len(word):
        w1 = word[i]
        j = 0
        while j<len(word):
            w2 = word[j]
            #判断两个词是否共现 共现&词频不为0的写入文件
            if word_vector[i][j]>0:
                #print w1 +" " + w2 + " "+ str(int(word_vector[i][j]))
                res.write(w1 +" " + w2 + " "+ str(int(word_vector[i][j]))  +  "\r\n")
            j = j + 1
        i = i + 1
    res.close()
    
    #共现矩阵写入文件 如果作者数量较多, 建议删除下面部分代码
    res = open("word_jz.txt", "a+")
    i = 0
    while i<len(word):
        j = 0
        jz = ""
        while j<len(word):
            jz = jz + str(int(word_vector[i][j])) + " "
            j = j + 1
        res.write(jz + "\r\n")
        i = i + 1
    res.close()
    
    
    #--------------------------第四步  CSV文件写入--------------------------
    c = open("word-word-weight.csv","wb")    #创建文件
    #c.write(codecs.BOM_UTF8)                   #防止乱码
    writer = csv.writer(c)                                #写入对象
    writer.writerow(['Word1', 'Word2', 'Weight'])
    
    i = 0
    while i<len(word):
        w1 = word[i]
        j = 0 
        while j<len(word):
            w2 = word[j]
            #判断两个词是否共现 共现词频不为0的写入文件
            if word_vector[i][j]>0:
                #写入文件
                templist = []
                templist.append(w1)
                templist.append(w2)
                templist.append(str(int(word_vector[i][j])))
                #print templist
                writer.writerow(templist)
            j = j + 1
        i = i + 1
    c.close()
    

    如果输入数据为:

    A;B;C;D
    A;B;C
    B;A;D
    D;A
    

    则输出结果如下图所示:

    第三步:最终的“清水江”文献输出结果如下所示,主要是 word-word-weight.csv 文件。

    由于split函数分割过程中,可能存在多余空格的现象,如下图所示,我们将含有空白的栏目删除。

    完整的三元组共1255组,即构成了1255条边。

    注意,如果作者数较多时,代码中尽量不要使用print输出中间结果,并且只做 word-word-weight.csv 文件写入操作即可。同时,建议先尝试运行小的数据集,如前面的ABCD,代码能正确运行之后再加载大的数据集。


    五.Gephi构建知识图谱

    众所周知,知识图谱都是有节点和边组成的,每一个作者或每一个关键词可以作为一个节点,而共现关系可以构造边。如果共现的次数越多,表示合作越紧密,则边越粗,反之越细。当使用度来表示节点大小时,如果某个节点越大,则表示该节点共现合作的数量越多。下面开始分享Gephi软件绘制关系图谱的流程。

    (一).数据准备

    edges.csv
    包含边的文件就是前面的 word-word-weight.csv,但需要修改表头并增加一列类型Type,其值为Undirected(无向图)。

    Source,Target,Type,Weight
    赵艳,吴娟,Undirected,1
    赵艳,杨兴,Undirected,1
    赵艳,张诗莹,Undirected,1
    傅慧平,张金成,Undirected,2
    傅慧平,杨正宏,Undirected,1
    周相卿,刘嘉宝,Undirected,1
    曹端波,付前进,Undirected,1
    李红香,马国君,Undirected,4
    胡世然,杨兴,Undirected,3
    胡世然,周承辉,Undirected,4
    胡世然,李建光,Undirected,7
    胡世然,朱玲,Undirected,3
    

    nodes.csv
    接下来我们还要创建一个包含节点的信息。只需要将Source和Target两列数据复制到nodes.csv中,然后去除重复的即可。当然,如果数量很大,Python写个循环代码也能处理。

    接着将第一列复制到第二列,需要注意id表示编号(名称)、label表示节点类标,这里中文显示。nodes.csv最终输出结果如下图所示:

    id,label
    赵艳,赵艳
    傅慧平,傅慧平
    周相卿,周相卿
    曹端波,曹端波
    李红香,李红香
    王华,王华
    韦建丽,韦建丽
    徐杰舜,徐杰舜
    

    (二).数据导入

    数据准备充分之后,开始我们的知识图谱构建之旅吧!

    第一步:安装并打开Gephi软件。软件我已经上传到下载包中供大家使用了。

    第二步:新建工程,并选择“数据资料”,输入电子表格。

    第三步:导入节点文件nodes.csv,注意CSV文件中表头切记定位为 id、label,导入一定选择“节点表格”和“GB2312”编码,点击“完成”即可。

    第四步:导入边文件edges.csv,注意CSV文件中表头切记为Source(起始点)、Target(目标点)、Weight(权重)、Tpye(无向边 Undirected)。

    导入成功后如下图所示:

    导入成功后点击“概览”显示如下所示,接着就是调整参数。

    (三).知识图谱参数设置

    设置外观如下图所示,主要包括颜色、大小、标签颜色、标签尺寸。

    1.设置节点大小和颜色。
    选中颜色,点击“数值设定”,选择渲染方式为“度”。

    显示结果如下所示:

    接着设置节点大小,数值设定为“度”,最小尺寸为20,最大尺寸为80。

    2.设置边大小和颜色。
    设置边颜色的数值设定为“边的权重”,如下图所示。

    设置边的大小数值设定为“边的权重”。

    3.在布局中选择“Fruchterman Reingold”。

    显示结果如下所示:

    4.设置模块化。在右边统计中点击“运行”,设置模块性。

    5.设置平均路径长度。在右边统计中点击“运行”,设置边概述。

    6.重新设置节点属性。
    节点大小数值设定为“度”,最小值还是20,最大值还是80。
    节点颜色数值设定为“Modularity Class”,表示模块化。

    此时图形显示如下所示,非常好看,有关系的人物颜色也设置为了类似的颜色。

    (四).可视化显示

    显示标签如下图所示:

    最终显示如下图所示。

    讲到这里,整篇文章就结束了,同理可以生成关键词的共现图谱。

    同时,如果读者对如何实现以某一个作者为中心的区域领域,后面作者可以再分享一篇文章。


    六.总结

    最后简单总结下,Neo4图数据库的j缺点是无法设置节点的权重大小,所有节点大小一致,并且运行时间较长。Gephi缺点是不支持语句查询,希望未来自己能搞一个开源的、灵活的关系图谱绘制框架。同时,真正的知识图谱是涉及语义、命名实体识别、关系抽取、实体对齐及消歧等,后面作者在有时间的情况下将继续为读者分享相关知识,前行路上与你同在。

    珞珞如石,温而若珈;潇洒坦荡,一生澄澈。新学期,新生活,新里程。
    一个多月的闭关,深深体会到数学和英语的重要性,短板抓紧补起来,长板却没有。开学八门课,《信息论》《现代密码学》《网络安全协议》《信息安全前沿》《信息安全与可信计算》《自然语言处理》等,就NLP熟悉点,得加油了,更要静下心来去“做”、“学”、“问”。Stay hungry,Stay foolish~

    (By:Eastmount 2019-09-02 下午5点 http://blog.csdn.net/eastmount/ )


    展开全文
  • 编译 | Arno来源 | github【磐创AI导读】:本系列文章为大家介绍了如何使用特定领域的文档构建知识图谱。想要获取更多的机器学习、深度学习资源,欢迎大家点击上方蓝字关注我们的公众号:磐创AI。在任何业务中,word...

    编译 | Arno

    来源 | github

    【磐创AI导读】:本系列文章为大家介绍了如何使用特定领域的文档构建知识图谱。想要获取更多的机器学习、深度学习资源,欢迎大家点击上方蓝字关注我们的公众号:磐创AI。

    在任何业务中,word文档都是很常见的,它们以原始文本、表格和图像的形式包含信息,所有这些都包含重要的事实。此代码模式[1]中使用的数据来自维基百科的两篇文章。第一个摘自肿瘤学家Suresh H. Advani的维基百科页面,第二个摘自关于肿瘤学的维基百科页面。这些文件被压缩为archive.zip文件[2]。

    在下面的图中,有一个关于肿瘤学家Suresh H. Advani的文本信息出现在word文档中,还有一个表格包括他曾获多个机构颁发的奖项。

    在这个代码模式中,我们解决了从word文档中的文本和表格中提取知识的问题。然后从提取的知识中构建知识图谱,使知识具有可查询性。

    而从word文档中提取知识过程中的遇到一些挑战主要为以下两个方面:自然语言处理(NLP)工具无法访问word文档中的文本。word文档需要转换为纯文本文件。

    业务和领域专家能够了解文档中出现的关键字和实体,但是训练NLP工具来提取领域特定的关键字和实体是一项很大的工作。此外,在许多场景中,找到足够数量的文档来训练NLP工具来处理文本是不切实际的。

    在此模式中我们采用以下方法克服遇到的这些挑战:使用基于python的mammoth库将.docx文件转化为html文件(半结构化格式)

    Watson Natural Language Understanding(Watson NLU)用于提取常见的实体。

    使用基于规则的方法来扩展Watson NLU的输出(这种方法的解释参见代码模式Extend Watson text Classification [3])。基于规则的方法不需要训练文档或训练工作。算法将配置文件作为输入,而此文件需要由领域专家配置。

    使用Watson NLU提取实体之间的关系。

    使用基于规则的方法来扩展Watson NLU的输出(这种方法的解释参见代码模式Watson Document Correlation[4])。基于规则的方法不需要训练文档或训练工作。算法将配置文件作为输入,而此文件需要由领域专家配置。

    两全其美的方法--同时使用基于训练和规则的方法从文档中提取知识。

    在这个模式中,我们将演示:从包含自由浮动的文本和表格文本的文档中提取信息。

    清理数据[3]模式以从文档中提取实体

    使用Watson Document Correlation[4]模式提取实体之间的关系

    从提取的知识中建立一个知识图谱。

    是什么让这个代码模式具有价值:处理docx文件中的表格和自由浮动文本的能力。

    以及将Watson NLU的实时分析结果与主题专家或领域专家定义的规则的结果相结合的策略。

    此代码模式旨在帮助开发人员、数据科学家为非结构化数据提供结构。这可以显著地帮助他们进行分析,并将数据用于进一步处理以获得更好的见解。

    流程需要分析和关联的docx文件 (html表格和自由浮动文本) 中的非结构化文本数据使用python代码从文档中提取。

    使用代码模式 Extend Watson text classification[3],文本使用Watson NLU进行分类,并进行标记。

    使用代码模式Correlate documents[5],将文本与其他文本关联

    使用python代码过滤结果。

    构建了知识图谱。

    此外,你可以通过视频[6]观看知识图谱的构建过程.

    所包含的组件IBM Watson Studio: 使用RStudio、Jupyter和Python在一个配置好的协作环境中分析数据,其中包括IBM的value-adds,比如managed Spark。

    -Watson Natural Language Understanding: 一种IBM云服务,可以使用自然语言理解分析文本,从概念、实体、关键字、类别、情感、关系、语义角色等内容中提取元数据。

    Jupyter Notebooks: 一个开源的web应用程序,允许你创建和共享包含实时代码、方程式、可视化和解释性文本的文档。

    构建步骤

    按照以下步骤设置和运行此代码模式,下面将详细描述这些步骤。创建IBM云服务

    使用IBM Watson Studio中的Jupyter Notebooks运行代码

    分析结果

    1. 创建IBM云服务

    创建IBM云服务[7]并将其命名为wdc-NLU-service。

    2. 使用IBM Watson Studio中的Jupyter Notebooks运行代码创建一个新的Watson Studio项目

    创建notebook

    运行notebook

    上传数据

    保存和分享2.1 创建一个新的Watson Studio项目登录到IBM的 Watson Studio,登录后,你将看到仪表板。

    通过点击New project并选择Data Science创建一个新项目。为项目起一个名称并点击Create。

    注意: 通过在Watson Studio中创建一个项目,一个免费的Object Storage服务和Watson Machine Learning服务将在你的IBM Cloud帐户中创建。选择免费存储类型以避免收费。2.2 创建notebook在新建项目Overview面板中,点击右上角的Add to project并选择Notebook资源类型。填写以下信息:

    选择From URL选项卡。(步骤1)

    输入notebook的名称和可选项描述。(步骤2)

    在Notebook URL下提供以下URL: https://raw.githubusercontent.com/IBM/build-knowledge-base-with-domain-specific-documents/master/notebooks/knowledge_graph.ipynb。(步骤3)

    对于Runtime运行环境,选择Python 3.5。(步骤4)点击Create按钮。

    提示: 一旦成功导入,notebook应该出现在Assets选项卡的Notebook部分。2.3 运行notebook选择下拉菜单 Cell > Run All运行notebook,或者使用play按钮自顶向下一次运行单元格。

    当单元格运行时,观察输出结果或错误。一个正在运行的单元格将有一个类似于In[*]的标签。一个完成的单元格将有一个运行序列号,而不是星号。2.4 上传数据

    将数据和配置上传到notebook上:notebook使用data[2]中的数据,将数据上传到我们的项目中

    在新项目的Overview面板中,单击右上角的Add to project并选择Data资源类型。屏幕右侧出现的面板将指导你如何上传数据,按照下图中编号的步骤操作。

    确保你在Load选项卡上。(步骤1)

    单击browse选项。在你的机器上定位到archive.zip、config_relations.txt和config_classification.txt文件的位置,并将它们上传。(没有标记步骤)

    上传后,转到Files选项卡。(步骤2)

    确保文件出现图中的位置。(步骤3)注意:可以使用你自己的数据和配置文件。如果使用自己的配置文件,请确保符合config_classification.txt文件中给出的JSON结构。

    3. 分析结果

    当我们浏览notebook时,我们首先要做的是:配置文件(config_classification.txt和config_relations.txt)已经被加载进来

    使用python包mammoth提取非结构化的信息,Mammoth将.docx文件转换为.html,并分析表格中的文本和自由浮动文本

    使用配置文件分析和扩展Watson Natural Language Understanding的结果。

    实体使用config_classification.txt文件进行扩展,关系使用config_relationships.txt文件进行扩展。

    然后对结果进行过滤和格式化,以获取相关关系并丢弃不相关的关系。

    将过滤后的关系发送到notebook中的绘制图形函数,构建知识图谱。

    相关链接:

    [1]: https://github.com/IBM/build-knowledge-base-with-domain-specific-documents

    [2]: https://github.com/IBM/build-knowledge-base-with-domain-specific-documents/tree/master/data

    [3]: https://developer.ibm.com/patterns/extend-watson-text-classification/

    [4]: https://developer.ibm.com/code/patterns/watson-document-correlation/

    [5]: https://github.com/IBM/watson-document-co-relation

    [6]: https://www.youtube.com/watch?v=lC2-h2ac_Jg&feature=youtu.be

    [7]: https://cloud.ibm.com/catalog/services/natural-language-understanding

    展开全文
  • 基于python+neo4j的豆瓣电影知识图谱,与cypher查询语句相关,主要是爬虫代码及数据,有意向者可下载
  • 本系列文章主要结合Python语言实现知识图谱构建相关工程,具有一定创新性和实用性,非常希望各位博友交流讨论,相互促进成长。前面两篇文章详细讲解了哈工大Pyltp工具,包括中文分词、词性标注、实体识别、依存句法...

    本系列文章主要结合Python语言实现知识图谱构建相关工程,具有一定创新性和实用性,非常希望各位博友交流讨论,相互促进成长。前面两篇文章详细讲解了哈工大Pyltp工具,包括中文分词、词性标注、实体识别、依存句法分析和语义角色标注等。但是其中文分词效果不是很理想,如“贵州财经大学”总是切分成“贵州”、“财经”和“大学”,这是因为词典中这些词的权重较高。这篇文章主要介绍最经典的自然语言处理工具之一——Jieba,包括中文分词、添加自定义词典及词性标注等内容。

    知识图谱系列文章:
    [知识图谱实战篇] 一.数据抓取之Python3抓取JSON格式的电影实体
    [知识图谱实战篇] 二.Json+Seaborn可视化展示电影实体
    [知识图谱实战篇] 三.Python提取JSON数据、HTML+D3构建基本可视化布局
    [知识图谱实战篇] 四.HTML+D3+CSS绘制关系图谱
    [知识图谱实战篇] 五.HTML+D3添加鼠标响应事件显示相关节点及边
    [知识图谱实战篇] 六.HTML+D3实现点击节点显示相关属性及属性值
    [知识图谱实战篇] 七.HTML+D3实现关系图谱搜索功能
    [知识图谱实战篇] 八.HTML+D3绘制时间轴线及显示实体

    环境下载地址:https://download.csdn.net/download/eastmount/11226539

    原文地址:
    [Python知识图谱] 一.哈工大pyltp安装及中文分句、中文分词、导入词典基本用法
    [Python知识图谱] 二.哈工大pyltp词性标注、命名实体识别、依存句法分析和语义角色标注

    参考前文:
    [python] 使用Jieba工具中文分词及文本聚类概念 - eastmount
    杨秀璋. Python网络数据爬取及分析从入门到精通(分析篇). 北京:北京航空航天大学出版社[M]. 2018


    一.Jieba工具

    在数据分析和数据挖掘中,通常需要经历前期准备、数据爬取、数据预处理、数据分析、数据可视化、评估分析等步骤,而数据分析之前的工作几乎要花费数据工程师近一半的工作时间,其中的数据预处理也将直接影响后续模型分析的好坏。

    数据预处理(Data Preprocessing)是指在进行数据分析之前,对数据进行的一些初步处理,包括缺失值填写、噪声处理、不一致数据修正、中文分词等,其目标是得到更标准、高质量的数据,纠正错误异常数据,从而提升分析的结果。
    下图是中文文本预处理的基本步骤,包括中文分词、词性标注、数据清洗、特征提取(向量空间模型存储)、权重计算(TF-IDF)等

    “结巴”(Jieba)工具是最常用的中文文本分词和处理的工具之一,它能实现中文分词、词性标注、关键词抽取、获取词语位置等功能。其在Github网站上的介绍及下载地址为:https://github.com/fxsjy/jieba

    作者推荐大家使用PIP工具来安装Jieba中文分词包,安装语句如下:

    pip install jieba
    

    调用命令“pip install jieba”安装jieba中文分词包如下图所示。

    安装过程中的会显示安装配置相关包和文件的百分比,直到出现“Successfully installed jieba-0.37”命令,表示安装成功。同时,在安装过程中会遇到各种问题,大家一定要学会独立搜索答案解决这些问题,才能提升您独立解决问题的能力。


    Jieba工具具有有以下特点:

    • 支持三种分词模式,包括精确模式、全模式和搜索引擎模式
    • 支持繁体分词
    • 支持自定义词典
    • 代码对Python2和Python3均兼容
    • 支持多种编程语言,包括Java、C++、Rust、PHP、R、Node.js等

    Jieba工具主要使用的算法包括:(1)通过基于前缀词典实现高效的词图扫描,构建句子中汉字所有可能生成词情况的有向无环图;(2)采用动态规划查找最大概率路径,寻找基于词频的最大切分组合;(3)对于未登录词,采用基于汉字成词能力的HMM模型结合Viterbi算法。


    二.中文分词

    1.基础知识

    由于中文词语之间是紧密联系的,一个汉语句子是由一串前后连续的汉字组成,词与词之间没有明显的分界标志,所以需要通过一定的分词技术把句子分割成空格连接的词序列,这就是所谓的中文分词技术。

    中文分词(Chinese Word Segmentation)指将汉字序列切分成一个个单独的词或词串序列,它能够在没有词边界的中文字符串中建立分隔标志,通常采用空格分隔。中文分词是数据分析预处理、数据挖掘、文本挖掘、搜索引擎、知识图谱、自然语言处理等领域中非常基础的知识点,只有经过中文分词后的语料才能转换为数学向量的形式,继续进行后面的分析。同时,由于中文数据集涉及到语义、歧义等知识,划分难度较大,比英文复杂很多。

    下面举个简单示例,对句子“我是程序员”进行分词操作。

    输入:我是程序员
    输出1:我\是\程\序\员
    输出2:我是\是程\程序\序员
    输出3:我\是\程序员

    这里分别采用了三种方法介绍中文分词。“我\是\程\序\员”采用的是一元分词法,将中文字符串分隔为单个汉字;“我是\是程\程序\序员”采用二元分词法,将中文汉字两两分隔;“我\是\程序员”是比较复杂但更实用的分词方法,它根据中文语义来进行分词的,其分词结果更准确。

    中文分词方法有很多,常见的包括基于字符串匹配的分词方法、基于统计的分词方法和基于语义的分词方法等。这里介绍比较经典的基于字符串匹配的分词方法。

    基于字符串匹配的分词方法又称为基于字典的分词方法,它按照一定策略将待分析的中文字符串与机器词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功,并识别出对应的词语。该方法的匹配原则包括最大匹配法(MM)、逆向最大匹配法(RMM)、逐词遍历法、最佳匹配法(OM)、并行分词法等。

    正向最大匹配法的步骤如下,假设自动分词词典中的最长词条所含汉字的个数为n。

    • 从被处理文本中选取当前中文字符串中的前n个中文汉字作为匹配字段,查找分词词典,若词典中存在这样一个n字词,则匹配成功,匹配字段作为一个词被切分出来。
    • 若分词词典中找不到这样的一个n字词,则匹配失败,匹配字段去掉最后一个汉字,剩下的中文字符作为新的匹配字段,继续进行匹配。
    • 循环前两个步骤进行匹配,直到匹配成功为止。

    例如,现在存在一个句子“北京理工大学生前来应聘”,使用正向最大匹配方法进行中文分词的过程如下所示。

    2.基本用法

    首先读者看一段简单的结巴分词代码,主要调用两个函数实现。

    • jieba.cut(text,cut_all=True)
      分词函数,第一个参数是需要分词的字符串,第二个参数表示是否为全模式。分词返回的结果是一个可迭代的生成器(generator),可使用for循环来获取分词后的每个词语,更推荐读者转换为list列表再使用。
    • jieba.cut_for_search(text)
      搜索引擎模式分词,参数为分词的字符串,该方法适合用于搜索引擎构造倒排索引的分词,粒度比较细。
    #encoding=utf-8  
    import jieba  
      
    text = "小杨毕业于北京理工大学,从事Python人工智能相关工作。"  
    
    #全模式
    data = jieba.cut(text,cut_all=True)
    print(type(data))
    print(u"[全模式]: ", "/".join(data))
    
    #精确模式  
    data = jieba.cut(text,cut_all=False)
    print(u"[精确模式]: ", "/".join(data))
    
    #默认是精确模式 
    data = jieba.cut(text)  
    print(u"[默认模式]: ", "/".join(data))
    
    #搜索引擎模式 
    data = jieba.cut_for_search(text)    
    print(u"[搜索引擎模式]: ", "/".join(data))
    
    #返回列表
    seg_list = jieba.lcut(text, cut_all=False)
    print("[返回列表]: {0}".format(seg_list))
    

    输出结果如下所示。

    最终的分词结果比较理想,其中精确模式输出的“小/杨/毕业/于/北京理工大学/,/从事/Python/人工智能/相关/工作/。”比较精准。下面简单叙述结巴中文分词的三种分词模式。

    全模式
    该模式将语料中所有可以组合成词的词语都构建出来,其优点是速度非常快,缺点是不能解决歧义问题,并且分词结果不太准确。其分词结果为“小/杨/毕业/于/北京/北京理工/北京理工大学/理工/理工大/理工大学/工大/大学///从事/Python/人工/人工智能/智能/相关/工作//”。

    精确模式
    该模式利用其算法将句子最精确地分隔开,适合文本分析,通常采用这种模式进行中文分词。其分词结果为“小/杨/毕业/于/北京理工大学/,/从事/Python/人工智能/相关/工作/。”,其中“北京理工大学”、“人工智能”这些完整的名词被精准识别,但也有部分词未被识别,后续导入词典可以实现专有词汇识别。

    搜索引擎模式
    该模式是在精确模式基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。其结果为“小/杨/毕业/于/北京/理工/工大/大学/理工大/北京理工大学/,/从事/Python/人工/智能/人工智能/相关/工作/。”。

    3.基于HMM模型的中文分词

    隐马尔可夫模型(Hidden Markov Model, HMM)是一种基于概率的统计分析模型,用来描述一个系统隐性状态的转移和隐性状态的表现概率。到目前为止,HMM模型被认为是解决大多数自然语言处理问题最为快速、有效的方法之一。它成功解决了语义识别、机器翻译等问题。

    在Jieba工具中,对于未登录到词库的词,使用了基于汉字成词能力的 HMM 模型和 Viterbi 算法,其大致原理是采用四个隐含状态,分别表示为单字成词、词组的开头、词组的中间和词组的结尾。通过标注好的分词训练集,可以得到 HMM的各个参数,然后使用 Viterbi 算法来解释测试集,得到分词结果。

    #encoding=utf-8  
    import jieba  
      
    text = "他来到了网易杭研大厦工作,我继续去北理读研。"  
    #精确模式  
    data = jieba.cut(text, cut_all=False, HMM=False)
    print(u"[精确模式]: ", "/".join(data))
    #精确模式+HMM
    data = jieba.cut(text, cut_all=False, HMM=True)
    print(u"[精确模式]: ", "/".join(data))
    

    输出结果如下图所示,未启用HMM模型时,它无法识别“杭研”、“北理”词语,将其拆分成了“杭”、“研”和“北”、“理”,而启用HMM模型时,它有效识别了新词“杭研”、“北理”。

    4.繁体中文分词

    Jieba工具支持中文繁体字的识别,将前面示例转换为繁体字,即“小楊畢業於北京理工大學,從事Python人工智能相關工作。”,调用Jieba分词的代码如下所示。

    #encoding=utf-8  
    import jieba  
      
    text = "小楊畢業於北京理工大學,從事Python人工智能相關工作。"  
    
    #全模式
    data = jieba.cut(text, cut_all=True)
    print(type(data))
    print(u"[全模式]: ", "/".join(data))
    
    #精确模式  
    data = jieba.cut(text, cut_all=False)
    print(u"[精确模式]: ", "/".join(data))
    
    #搜索引擎模式 
    data = jieba.cut_for_search(text)    
    print(u"[搜索引擎模式]: ", "/".join(data))
    

    输出结果如下所示:

    [全模式]://///北京/北京理工/理工/理工大/工大//////Python/人工/人工智能/智能///工作//
    [精确模式]://畢業//北京理工/大學//從事/Python/人工智能/相關/工作/[搜索引擎模式]://畢業//北京/理工/北京理工/大學//從事/Python/人工/智能/人工智能/相關/工作/

    三.添加自定义词典

    1.添加词典

    在进行中文分词过程中,通常会遇到一些专用词语无法精准的切分,比如“乾清宫”会被分割为“乾”、“清宫”,“黄果树瀑布”会被分割为“黄果树”、“瀑布”,“云计算”会被分割为“云”、“计算”,“贵州财经大学”会被分割为“贵州”、“财经大学”等。虽然Jieba工具有新词识别能力,但也无法识别出所有Jieba词库里没有的词语,但它为开发者提供了添加自定义词典功能,从而保证更好的分词正确率。其函数原型如下:

    • load_userdict(f)
      该函数只有一个参数,表示载入的自定义词典路径,f 为文件类对象或自定义词典路径下的文件。词典的格式为:一个词占一行,每行分为三部分:
    word  freq  word_type
    

    其中,word为对应的词语,freq为词频(可省略),word_type为词性(可省了),中间用空格隔开,顺序不可以改变。注意,文件必须为UTF-8编码。

    下面举例讲解,第一个代码是未导入自定义词典的中文分词。

    #encoding=utf-8  
    import jieba  
      
    text = "小杨在贵州财经大学工作,擅长大数据、云计算,喜欢乾清宫、黄果树瀑布等景区。"  
    
    #精确模式  
    data = jieba.cut(text, cut_all=False)
    print(u"[原始文本]: ", text)
    print(u"[精确模式]: ", " ".join(data))
    

    输出结果未将“贵州财经大学”、“大数据”、“云计算”、“乾清宫”、“黄果树瀑布”等词汇正确分割。

    接着导入自定义词典,其本地词典命名为“dict.txt”,如图所示,包括设置“贵州财经大学”的词性为机构名词“nt”,“大数据”、“云计算”的词性为名词“n”,也有省略词性和词频的“乾清宫”。

    完整代码如下:

    #encoding=utf-8  
    import jieba  
    
    text = "杨秀璋在贵州财经大学工作,擅长大数据、云计算,喜欢乾清宫、黄果树瀑布等景区。"  
    
    #导入自定义词典
    jieba.load_userdict("dict.txt")
    #精确模式  
    data = jieba.cut(text, cut_all=False)
    print(u"[原始文本]: ", text)
    print(u"[精确模式]: ", " ".join(data))
    

    此时的输出结果有效地提取了“贵州财经大学”、“云计算”、“乾清宫”。但也有两个未识别出的词语,“黄果树瀑布”不在词典中,故被拆分成了“黄果树”和“瀑布”,“大数据”虽然在词典中,却仍然拆分成了“大”和“数据”。

    2.动态修改词典

    在Jieba工具中,可以在程序中动态修改词典,通过add_word(word, freq=None, tag=None)函数添加新词语,通过del_word(word)函数删除自定义词语。

    #encoding=utf-8  
    import jieba  
    
    text = "小杨在贵州财经大学工作,擅长大数据、云计算,喜欢乾清宫、黄果树瀑布等景区。"  
    
    #导入自定义词典
    jieba.load_userdict("dict.txt")
    
    #添加自定义词语
    jieba.add_word("小杨")
    jieba.add_word("黄果树瀑布")
    jieba.add_word("自然语言处理", freq=10, tag="nz")
    
    #删除自定义词语
    jieba.del_word("北理工")
    
    #精确模式  
    data = jieba.cut(text, cut_all=False)
    print(u"[原始文本]: ", text, "\n")
    print(u"[精确模式]: ", " ".join(data))
    

    该代码增加了新词语“小杨”、“黄果树瀑布”和“自然语言处理”,删除了“北理工”,其运行结果如下所示,它有效地将“小杨”和“黄果树瀑布”进行了精准识别。

    此时,读者可能会有一个疑问,为什么“大数据”被拆分成了“大”和“数据”呢?这是因为Jieba词库中“大”和“数据”的重要程度更高,我们可以使用suggest_freq(segment, tune=True)函数调节单个词语的词频,使其被分割出来。

    代码如下所示:

    #encoding=utf-8  
    import jieba  
    
    text = "小杨在贵州财经大学工作,擅长大数据、云计算,喜欢乾清宫、黄果树瀑布等景区。"  
    
    #导入自定义词典
    jieba.load_userdict("dict.txt")
    
    #添加自定义词语
    jieba.add_word("小杨")
    jieba.add_word("黄果树瀑布")
    jieba.add_word("自然语言处理", freq=10, tag="nz")
    
    #删除自定义词语
    jieba.del_word("北理工")
    
    #调节词频
    jieba.suggest_freq('大数据', True)
    
    #精确模式  
    data = jieba.cut(text, cut_all=False)
    print(u"[原始文本]: ", text, "\n")
    print(u"[精确模式]: ", " ".join(data))
    

    最终的输出结果为“小杨贵州财经大学 工作 , 擅长 大数据云计算 , 喜欢 乾清宫黄果树瀑布 等 景区 。”

    终于将“小杨”、“贵州财经大学”、“大数据”、“云计算”、“乾清宫”、“黄果树瀑布”等专有词语识别出来。同时,如果自定义词典存在很多专用名词,并且需要设置它们的高权重,可以使用下面的代码循环设置每一个词语的词频。

    #循环设置词频重要程度
    fp = open("dict.txt", 'r', encoding='utf8')
    for line in fp:
        line = line.strip()
    jieba.suggest_freq(line, True)
    
    #第二种方法
    [jieba.suggest_freq(line.strip(), True) for line in open("dict.txt",'r',encoding='utf8')]
    

    四. 词性标注

    词性标注(Part-Of-Speech Tagging, POS Tagging)也被称为语法标注(Grammatical Tagging)或词类消疑(Word-category Disambiguation),是将语料库内单词的词性按其含义和上下文内容进行标记的文本数据处理技术。通过词性标注处理,可以将分词得到的词序列中每个单词标注一个正确的词性。

    在Jieba工具中,调用jieba.posseg.POSTokenizer(tokenizer=None)函数新建自定义分词器。tokenizer参数可指定内部使用的jieba.Tokenizer分词器,jieba.posseg.dt为默认词性标注分词器。Jieba工具采用和Ictclas 兼容的标记法,标注句子分词后每个词的词性通过循环输出。表4-1为Jieba工具的各个词性及含义。

    官方文档给出的示例如下所示,通过“import jieba.posseg as pseg”语句导入扩展包,接着循环输出word(词语)和flag(词性)值。

    #encoding=utf-8  
    import jieba.posseg as pseg
    
    #词性标注
    words = pseg.cut("我爱北京天安门")
    for word, flag in words:
        print('%s %s' % (word, flag))
    

    输出结果如图所示,其中“我”表示代词,对应“r”;“爱”对应动词,对应“v”,“北京”和“天安门”对应地点名词,对应“ns”。

    上面小节的示例对应的词性标注代码如下所示。

    #encoding=utf-8  
    import jieba  
    import jieba.posseg
    import jieba.analyse
    
    text = "小杨在贵州财经大学工作,擅长大数据、云计算,喜欢乾清宫、黄果树瀑布等景区。"  
    
    #导入自定义词典
    jieba.load_userdict("dict.txt")
    
    #添加自定义词语
    jieba.add_word("小杨")
    jieba.add_word("黄果树瀑布")
    #调节词频
    jieba.suggest_freq('大数据', True)
    
    #精确模式  
    data = jieba.cut(text, cut_all=False)
    print(u"[原始文本]: ", text, "\n")
    print(u"[精确模式]: ", " ".join(data), "\n")
    
    #词性标注
    sentence_seged = jieba.posseg.cut(text)
    outstr = ''
    for x in sentence_seged:
        outstr += "{}/{}  ".format(x.word, x.flag)
    print(u'[词性标注]:', outstr)
    

    输出结果如图所示。


    五.总结

    希望这篇基础性文章对你有所帮助,如果有错误或不足之处,还请海涵。下一篇将详细讲解Jieba工具实现关键词抽取、事件抽取和命名实体识别等例子。望喜欢~同时,后续分享更多的是网络安全方面的文章了,从零开始很难,但秀璋会一路走下去的,加油。

    故人应在千里外,
    不寄梅花远信来。
    武汉第一周学习结束,寄了第一封家书给女神,接下来这几年,应该会写上200来封吧,很期待,也很漫长,但我俩的故事将继续书写。

    今天早上做了我来这的第一次PPT汇报,是关于网络安全和数据挖掘、人工智能的融合,也听了学弟们的汇报,真的学到好多,也记录了无数未知的词汇,接下来要学的更多。这一周给我最深刻的印象就是:学弟学妹们怎么这么刻苦?早上去得很早,中午不回去午休,晚上还继续敲代码,而且本科大三的学弟们也很多,在没有老师的情况下,小组自发组织PPT汇报探讨,仿佛我是那个最“偷懒”的学生,我猜:肯定是外面太热,他们都想蹭空调!

    真的很感激这次来之不易的学习机会,感谢所有的老师、师兄师姐、师弟师妹,更感激家人朋友和女神。也谢谢CSDN认识的博友请我吃饭,武大测绘本硕博连读让我甚是佩服,真的通过CSDN认识了很多朋友,大家分散五湖四海,共同进步。

    未来的路还很长,优秀的人真的太多,我们只有做好自己,不忘初心,享受生活,砥砺前行。明天周末继续奋斗,晚安娜,记得收信

    (By:杨秀璋 2019-07-28 周日下午5点写于武大 https://blog.csdn.net/Eastmount )

    展开全文
  • 机器学习AI算法工程 公众号:datayx小型金融知识图谱构流程示范存储方式基于RDF的存储基于图数据库的存储 知识图谱构建代码 链接获取:关注微信公众号 datayx 然后回复 知识图谱 即可获取。AI项目体验地址 ...

    82aa280901aa8ad9103e83b595daa9ad2da.gif

    向AI转型的程序员都关注了这个号👇👇👇

    机器学习AI算法工程 公众号:datayx

    小型金融知识图谱构流程示范

    存储方式

    基于RDF的存储

    基于图数据库的存储

    dedd481804dc4ee48d407d4bc5e9fb75c31.png

    知识图谱构建代码 链接获取:

    关注微信公众号 datayx 然后回复 知识图谱 即可获取。

    AI项目体验地址 https://loveai.tech

    知识图谱构建流程

    1.数据获取

    (1)股票基本信息

    (2)股票Top10股东信息

    (3)股票概念信息

    (4)股票公告信息

    (5)财经新闻信息(该数据集已获取但需进一步处理,未存入图数据库)

    (6)概念信息

    (7)股票价格信息

    2.数据预处理

    (1)基本信息存在空值

    (2)股东信息存在重复数据

    (3)CSV文件格式更改为UTF-8格式

    (4)计算股票对数收益

    (5)保留股票价格交易日为242(众数)&计算皮尔逊相关系数

    3.数据存储

    (1)明确实体&关系

    (2)使用py2neo交互neo4j创建节点和关系

    4.数据可视化查询

    (1)基于Crypher语言

    5.相关应用

    (1)中心度算法(Centralities)

    (2)社区检测算法(Community detection)

    (3)路径搜索算法(Path finding)

    (4)相似性算法(Similarity)

    (5)链接预测(Link Prediction)

    数据获取

    c248b6a81220be206e71663c2ba359bf5b1.png

    301c36cfa7692cc1e22b712262d56d2c147.png

    数据预处理

    7fab2868ddf33ded2f2b0d2b38c74636d1e.png

    711358c1628a827915ee1d7339f06aca5af.png

    2321136db98bdacbe3d7df70f10ad43e9ce.png

    数据交互(Sample)

    57e0ed161947ac1ce7bea063b4e95605c6c.png

    dcdef877310bcafed9d369cd0c9af76aab4.png

    b0c22843c488d1021c934d9d3bf8396b859.png

    数据可视化查询

    查询与“平安银行”相关信息(所属概念板块、发布公告、属于深股通/沪股通、股东信息)

    765c0134b1634061857255a14d072c8f64e.png

    插入股票间相关系数之后,显示与“平安银行”所有相关信息

    6620073ccd34488e031fab03adb1ad31a2c.png

    查询“平安银行”与“万科A”的对数收益的相关系数

    41b7982e91018011b3e3c0d07699bdae3e8.png

    导入已开源的图算法(仅简单的统计算法)

    (1)下载graph-algorithms-algo-3.5.4.0.jar复制到对应数据库的plugin文件夹下

    (2)修改数据库目录下的conf中neo4j.conf,添加dbms.security.procedures.unrestricted=algo.*

    链路预测算法

    使用neo4j附带的图算法,其中链路预测部分主要基于判断相邻的两个节点之间的亲密程度作为评判标准

    c300f691bc431a8e009b60da2485134eece.png

    7689f3d3f3ecf506b66fbcedb689e062562.png

    09ec3adaf0347c9c8560db5aa87bb26fb59.png

    其他算法

    中心度算法(Centralities):

    (1)PageRank (页面排名)

    (2)ArticleRank

    (3)Betweenness Centrality (中介中心度)

    (4)Closeness Centrality (接近中心度)

    (5)Harmonic Centrality

    社区检测算法(Community detection):

    (1)Louvain (鲁汶算法)

    (2)Label Propagation (标签传播)

    (3)Connected Components (连通组件)

    (4)Strongly Connected Components (强连通组件)

    (5)Triangle Counting / Clustering Coefficient (三角计数/聚类系数)

    路径搜索算法(Path finding):

    (1)Minimum Weight Spanning Tree (最小权重生成树)

    (2)Shortest Path (最短路径)

    (3)Single Source Shortest Path (单源最短路径)

    (4)All Pairs Shortest Path (全顶点对最短路径)

    (5)A*

    (6)Yen’s K-shortest paths

    (7)Random Walk (随机漫步)

    相似性算法(Similarity):

    (1)Jaccard Similarity (Jaccard相似度)

    (2)Cosine Similarity (余弦相似度)

    (3)Pearson Similarity (Pearson相似度)

    (4)Euclidean Distance (欧氏距离)

    (5)Overlap Similarity (重叠相似度)

    链接预测(Link Prediction):

    (1)Adamic Adar

    (2)Common Neighbors

    (3)Preferential Attachment

    (4)Resource Allocation

    (5)Same Community

    (6)Total Neighbors

    预处理算法(Preprocessing):

    (1)One Hot Encoding

    阅读过本文的人还看了以下文章:

    不断更新资源

    深度学习、机器学习、数据分析、python

    搜索公众号添加:datayx

    4e7c674bfcb3eceb5c9c4617d35d178defe.jpg

    QQ群

    333972581

    dab5ba2194f50da6832d9cbf7597799c2c6.jpg

    展开全文
  • 本系列文章主要结合Python语言实现知识图谱构建相关工程,具有一定创新性和实用性,非常希望各位博友交流讨论,相互促进成长。第一篇文章主要介绍哈工大pytltp工具,包括安装过程、中文分词、词性标注和实体识别等。...
  • 本系列文章主要结合Python语言实现知识图谱构建相关工程,具有一定创新性和实用性,非常希望各位博友交流讨论,相互促进成长。第一篇文章主要介绍哈工大pytltp工具,包括安装过程、中文分词等;第二篇文章主要讲解...
  • bilibili所有番剧的详情的知识图谱构建,相关博客中有介绍bilibili所有番剧的详情的知识图谱构建,相关博客中有介绍bilibili所有番剧的详情的知识图谱构建,相关博客中有介绍bilibili所有番剧的详情的知识图谱构建,...
  • 该资源是针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫、可视化分析、GIS地图显示、情感分析、舆情分析、主题挖掘、威胁情报溯源、知识图谱、预测预警及AI和NLP应用等。希望该系列线上远程教学对您...
  • 本篇文章主要采用Python和Gephi构建中国知网某个领域的作者合作关系和主题词共现的知识图谱,重点阐述了一种可操作的关系图谱构建方法,可用于论文发表、课程或企业可视化展示等。其基本步骤如下: 1.在中国知网...
  • 知识图谱—利用python进行知识入库 知识图谱—利用python进行知识入库 作为一个写sql出生的菜鸡,在这里分享一下去年11月到12月之间研究的关于知识图谱的课题相关知识,由于客户的原因最终该项目没有继续进行下去,...
  • Python+Neo4j医药知识图谱自动问答系统源码,知识图谱构建,自动问答,基于kg的自动问答。以疾病为中心的一定规模医药领域知识图谱,并以该知识图谱完成自动问答与分析服务。
  • 最近在做关于知识图谱方面的实验,需要一些数据,于是爬取了豆瓣上关于电影和书籍的信息。两天时间内共爬取20W+条数据,包括电影信息、电影演员信息、书籍信息、书籍作者信息,GitHub链接为...
  • 针对豆瓣TOP250电影知识图谱的构建(Python+neo4j)

    万次阅读 多人点赞 2020-01-22 12:01:52
    /" class=""> 最终形成的获取分析页面代码如下(最终我存放在代码目录下的contents目录下)(1_getPage.py): import requests import re import time headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0;...
  • 知识图谱
  • 平时除了看论文还是看论文,感觉有点无聊,于是嘛就想着搞点东西来玩玩,然后就搞了一个非常简单的基于知识图谱的电影问答系统。系统是用python实现的,大概只花了1天吧,代码也仅有300多行,可以说是很容易上手了。...
  • 知识图谱实战系列(Python版)

    千人学习 2020-08-30 14:39:19
    知识图谱实战系列课程旨在帮助同学们快速掌握知识图谱领域核心技术,基于Python各大开源技术实现知识图谱核心应用。通俗讲解核心技术点及其应用领域,全程实战演示如何构建知识图谱生态中各项核心技术。
  • 全文共6382字,预计学习时长20分钟 ... 在Python中使用流行的spaCy库在Python中构建知识图谱 引言 不用过多介绍,大家都知道梅西。即使是那些不关注足球的人,也听说过这位最伟大球员在辉煌。下面是他的维基百科页...
  • 大家如果对python操作Neo4j导入CSV并不是很熟悉的话...这是本次构建知识图谱的CSV格式的数据源,这是在上次数据的基础上截取了一小部分并且对数据的内容进行了一定的修改便于大家看的更加明显(图中数据信息均为乱改 不
  • 知识图谱,本项目是一个开放的知识图谱项目,融合了两千五百多万的实体,拥有亿级别的实体属性关系。
  • 分享视频教程——知识图谱实战系列(Python版)。2020年7月新课;完整版附源码+数据;章节1:知识图谱介绍及其应用领域分析 章节2:知识图谱涉及技术点分析 章节3:Neo4j数据库实战 章节4:使用python操作neo4j实例 章节5:...
  • 整理了一份 Python 学习知识图谱

    万次阅读 2019-05-20 17:14:28
    做公众号以来和很多初学 Python 的粉丝交流过,发现不少人遇到的困惑主要集中在下面这 3类:1、「基础不牢」类型:最近在自学数据分析,发现自己的 Python 基础太...
  • 代码: #导入包 from SPARQLWrapper import SPARQLWrapper, JSON #创建query和update对象,以便进行各种操作 #XXX是数据库的名字 query = SPARQLWrapper("http://localhost:3030/XXX/query") update = SPARQLWrapper...
  • 这几年,学 Python 的程序员越来越多了,甚至不少人把 Python 当作第一语言来学习。也难怪,Python 的优点太多了,它语言简洁、开发效率高、可移植性强,并且...
  • 基于python的Django框架和Neo4j的知识图谱可视化

    千次阅读 热门讨论 2020-09-16 15:56:12
    上两篇文章我已经写了怎么用python在Neo4j中构造知识图谱。大家可以先看下这两篇文章。 知识图谱python 操作neo4j (导入CSV操作) 知识图谱python操作Neo4j构建复杂的知识图谱 通过上面两篇文章我们已经能从...
  • 机器学习/人工智能 知识图谱可以为自己建立一个机器学习的知识图谱,并争取掌握每一个经典的机器学习理论和算法,简单地总结如下:1)回归算法: 最小二乘法(OrdinaryLeast Square) 逻辑回归(Logistic Regression...
  • 知识图谱(3) -- python代码样例

    千次阅读 2018-12-12 16:31:06
    这里是使用了王昊奋老师发布在OpenKG上的demo“ 基于REfO的KBQA实现及示例 ”,基本跟王老师的说明差异不大,其中加入一些我自己的见解(笔记)。... 知识图谱-给AI装个大脑 2.  基于REfO的KBQA实现及示例
  • 基于知识图谱的医疗领域问答系统【QASystemOnMedicalKG】 1 代码来源 本代码来源于github项目地址,主要是构建以疾病为中心的具有一定规模的...其中知识图谱通过neo4j构建,代码采用python语言。 2 主要组成 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,846
精华内容 2,738
关键字:

python知识图谱代码

python 订阅