1118-詩名,詩詞形式,類別實體導入

類別實體

代碼

import pandas as pd
import numpy as np
import re
from py2neo import Node,Relationship,Graph,NodeMatcher,RelationshipMatcher

# 創建節點
def CreateNode(m_graph,m_label,m_attrs):
    m_n="_.name="+"\'"+m_attrs['name']+"\'"
    matcher = NodeMatcher(m_graph)
    re_value = matcher.match(m_label).where(m_n).first()
    #print(re_value)
    if re_value is None:
        m_mode = Node(m_label,**m_attrs)
        n = graph.create(m_mode)
        return n
    return None
# 查詢節點
def MatchNode(m_graph,m_label,m_attrs):
    m_n="_.name="+"\'"+m_attrs['name']+"\'"
    matcher = NodeMatcher(m_graph)
    re_value = matcher.match(m_label).where(m_n).first()
    return re_value
# 創建關係
def CreateRelationship(m_graph,m_label1,m_attrs1,m_label2,m_attrs2,m_r_name):
    reValue1 = MatchNode(m_graph,m_label1,m_attrs1)
    reValue2 = MatchNode(m_graph,m_label2,m_attrs2)
    if reValue1 is None or reValue2 is None:
        return False
    m_r = Relationship(reValue1,m_r_name,reValue2)
    n = graph.create(m_r)
    return n

#查找關係
def findRelationship(m_graph,m_label1,m_attrs1,m_label2,m_attrs2,m_r_name):
    reValue1 = MatchNode(m_graph, m_label1, m_attrs1)
    reValue2 = MatchNode(m_graph, m_label2, m_attrs2)
    if reValue1 is None or reValue2 is None:
        return False
    m_r = Relationship(reValue1, m_r_name['name'], reValue2)
    return m_r

def updateRelation(m_graph,m_label1,m_attrs1,m_label2,m_attrs2,m_r_name):
    reValue1 = MatchNode(m_graph, m_label1, m_attrs1)
    reValue2 = MatchNode(m_graph, m_label2, m_attrs2)
    if reValue1 is None or reValue2 is None:
        return False
    print(m_r_name)
    propertyes={'value': m_r_name['value'], 'danwei': m_r_name['danwei']}
    m_r = Relationship(reValue1, m_r_name['name'], reValue2,**propertyes)
    graph.merge(m_r)

#修改節點屬性
def updateNode(m_graph,m_label1,m_attrs1,new_attrs):
    reValue1 = MatchNode(m_graph, m_label1, m_attrs1)
    if reValue1 is None:
        return False
    reValue1.update(new_attrs)
    graph.push(reValue1)



graph = Graph('http://localhost:7474',username='neo4j',password='fengge666')

def create_tag():
    file = './data2/tag_name.xlsx'
    data = pd.read_excel(file).fillna("")
    tag=list(data.tag)
    tag_label="tag"
    for it in tag:
        attr1={"name":it}
        CreateNode(graph, tag_label, attr1)
        print("創建詩詞分類:"+it+"成功!!")

if __name__ == '__main__':
    create_tag()

展示效果

 

 詩詞形式實體

代碼

import pandas as pd
import numpy as np
import re
from py2neo import Node,Relationship,Graph,NodeMatcher,RelationshipMatcher

# 創建節點
def CreateNode(m_graph,m_label,m_attrs):
    m_n="_.name="+"\'"+m_attrs['name']+"\'"
    matcher = NodeMatcher(m_graph)
    re_value = matcher.match(m_label).where(m_n).first()
    #print(re_value)
    if re_value is None:
        m_mode = Node(m_label,**m_attrs)
        n = graph.create(m_mode)
        return n
    return None
# 查詢節點
def MatchNode(m_graph,m_label,m_attrs):
    m_n="_.name="+"\'"+m_attrs['name']+"\'"
    matcher = NodeMatcher(m_graph)
    re_value = matcher.match(m_label).where(m_n).first()
    return re_value
# 創建關係
def CreateRelationship(m_graph,m_label1,m_attrs1,m_label2,m_attrs2,m_r_name):
    reValue1 = MatchNode(m_graph,m_label1,m_attrs1)
    reValue2 = MatchNode(m_graph,m_label2,m_attrs2)
    if reValue1 is None or reValue2 is None:
        return False
    m_r = Relationship(reValue1,m_r_name,reValue2)
    n = graph.create(m_r)
    return n

#查找關係
def findRelationship(m_graph,m_label1,m_attrs1,m_label2,m_attrs2,m_r_name):
    reValue1 = MatchNode(m_graph, m_label1, m_attrs1)
    reValue2 = MatchNode(m_graph, m_label2, m_attrs2)
    if reValue1 is None or reValue2 is None:
        return False
    m_r = Relationship(reValue1, m_r_name['name'], reValue2)
    return m_r

def updateRelation(m_graph,m_label1,m_attrs1,m_label2,m_attrs2,m_r_name):
    reValue1 = MatchNode(m_graph, m_label1, m_attrs1)
    reValue2 = MatchNode(m_graph, m_label2, m_attrs2)
    if reValue1 is None or reValue2 is None:
        return False
    print(m_r_name)
    propertyes={'value': m_r_name['value'], 'danwei': m_r_name['danwei']}
    m_r = Relationship(reValue1, m_r_name['name'], reValue2,**propertyes)
    graph.merge(m_r)

#修改節點屬性
def updateNode(m_graph,m_label1,m_attrs1,new_attrs):
    reValue1 = MatchNode(m_graph, m_label1, m_attrs1)
    if reValue1 is None:
        return False
    reValue1.update(new_attrs)
    graph.push(reValue1)



graph = Graph('http://localhost:7474',username='neo4j',password='fengge666')

def create_formal():
    formal=['七言','五言','七言律詩','七言絕句','五言律詩','五言絕句']
    formal_label="formal"
    for it in formal:
        attr1={"name":it}
        CreateNode(graph, formal_label, attr1)
        print("創建詩詞形式:"+it+"成功!!")

if __name__ == '__main__':
    create_formal()

展示效果

 

 詩詞實體

代碼

最爲複雜的關係實體,構建代碼量稍微大一些

import pandas as pd
import numpy as np
import re
from py2neo import Node,Relationship,Graph,NodeMatcher,RelationshipMatcher

# 創建節點
def CreateNode(m_graph,m_label,m_attrs):
    m_n="_.name="+"\'"+m_attrs['name']+"\'"
    matcher = NodeMatcher(m_graph)
    re_value = matcher.match(m_label).where(m_n).first()
    #print(re_value)
    if re_value is None:
        m_mode = Node(m_label,**m_attrs)
        n = graph.create(m_mode)
        return n
    return None
# 查詢節點
def MatchNode(m_graph,m_label,m_attrs):
    m_n="_.name="+"\'"+m_attrs['name']+"\'"
    matcher = NodeMatcher(m_graph)
    re_value = matcher.match(m_label).where(m_n).first()
    return re_value
# 創建關係
def CreateRelationship(m_graph,m_label1,m_attrs1,m_label2,m_attrs2,m_r_name):
    reValue1 = MatchNode(m_graph,m_label1,m_attrs1)
    reValue2 = MatchNode(m_graph,m_label2,m_attrs2)
    if reValue1 is None or reValue2 is None:
        return False
    m_r = Relationship(reValue1,m_r_name,reValue2)
    n = graph.create(m_r)
    return n

#查找關係
def findRelationship(m_graph,m_label1,m_attrs1,m_label2,m_attrs2,m_r_name):
    reValue1 = MatchNode(m_graph, m_label1, m_attrs1)
    reValue2 = MatchNode(m_graph, m_label2, m_attrs2)
    if reValue1 is None or reValue2 is None:
        return False
    m_r = Relationship(reValue1, m_r_name['name'], reValue2)
    return m_r

def updateRelation(m_graph,m_label1,m_attrs1,m_label2,m_attrs2,m_r_name):
    reValue1 = MatchNode(m_graph, m_label1, m_attrs1)
    reValue2 = MatchNode(m_graph, m_label2, m_attrs2)
    if reValue1 is None or reValue2 is None:
        return False
    print(m_r_name)
    propertyes={'value': m_r_name['value'], 'danwei': m_r_name['danwei']}
    m_r = Relationship(reValue1, m_r_name['name'], reValue2,**propertyes)
    graph.merge(m_r)

#修改節點屬性
def updateNode(m_graph,m_label1,m_attrs1,new_attrs):
    reValue1 = MatchNode(m_graph, m_label1, m_attrs1)
    if reValue1 is None:
        return False
    reValue1.update(new_attrs)
    graph.push(reValue1)



graph = Graph('http://localhost:7474',username='neo4j',password='fengge666')


#獲取指定文件夾下的excel
import os
def get_filename(path,filetype):  # 輸入路徑、文件類型例如'.xlsx'
    name = []
    for root,dirs,files in os.walk(path):
        for i in files:
            if os.path.splitext(i)[1]==filetype:
                name.append(i)
    return name            # 輸出由有後綴的文件名組成的列表

def create_poem():
    file = 'data/'
    lists = get_filename(file, '.xlsx')
    for it in lists:
        newfile = file + it
        print(newfile)
        # 獲取詩詞內容
        data = pd.read_excel(newfile).fillna("")

        title=list(data.title)
        desty=list(data.desty)
        author=list(data.author)
        content=list(data.content)
        trans_content=list(data.trans_content)
        background=list(data.background)
        tag=list(data.tag)
        formal=list(data.formal)
        date=list(data.data)
        ci_name=list(data.ci_name)
        qu_name=list(data.qu_name)

        poem_label='poem'
        author_label='author'
        desty_label='desty'
        formal_label='formal'
        tag_label='tag'
        cipai_label='ci_pai'
        qupai_label='qu_pai'

        for i in range(len(title)):
            print(""+str(i)+"")
            attr1 = {"name": title[i], "content": content[i], "trans_content": trans_content[i],
                     "background": background[i],"date":date[i]}
            CreateNode(graph, poem_label, attr1)
            print("創建詩詞:" + title[i] + "成功!!")
            if tag[i]!='':
                tag_list=tag[i].split(',')
                for it in tag_list:
                    attr2={"name":it}
                    # 創建關係
                    m_r_name1 = "分類"
                    reValue1 = CreateRelationship(graph, poem_label, attr1, tag_label, attr2, m_r_name1)
                    print("創建關係:" + title[i] + "-所屬類別-" + it + "成功")
                    m_r_name2 = "包含"
                    reValue2 = CreateRelationship(graph, tag_label, attr2, poem_label, attr1, m_r_name2)
                    print("創建關係:" + it + "-包含-" + title[i] + "成功")
            if formal[i]!='':
                attr2={"name":formal[i]}
                # 創建關係
                m_r_name1 = "形式"
                reValue1 = CreateRelationship(graph, poem_label, attr1, formal_label, attr2, m_r_name1)
                print("創建關係:" + title[i] + "-所屬形式-" + formal[i] + "成功")
                m_r_name2 = "包含"
                reValue2 = CreateRelationship(graph, formal_label, attr2, poem_label, attr1, m_r_name2)
                print("創建關係:" + formal[i] + "-包含-" + title[i] + "成功")
            if ci_name[i]!='':
                attr2 = {"name": ci_name[i]}
                if MatchNode(graph, cipai_label, attr2) == None:
                    CreateNode(graph, cipai_label, attr2)
                    print("創建詞牌名:" + ci_name[i] + "成功!!")
                # 創建關係
                m_r_name1 = "詞牌名"
                reValue1 = CreateRelationship(graph, poem_label, attr1, cipai_label, attr2, m_r_name1)
                print("創建關係:" + title[i] + "-詞牌名-" + ci_name[i] + "成功")
                m_r_name2 = "包含"
                reValue2 = CreateRelationship(graph, cipai_label, attr2, poem_label, attr1, m_r_name2)
                print("創建關係:" + ci_name[i] + "-包含-" + title[i] + "成功")
            if qu_name[i]!='':
                attr2 = {"name": qu_name[i]}
                if MatchNode(graph, qupai_label, attr2) == None:
                    CreateNode(graph, qupai_label, attr2)
                    print("創建曲牌名:" + qu_name[i] + "成功!!")
                # 創建關係
                m_r_name1 = "曲牌名"
                reValue1 = CreateRelationship(graph, poem_label, attr1, qupai_label, attr2, m_r_name1)
                print("創建關係:" + title[i] + "-曲牌名-" + qu_name[i] + "成功")
                m_r_name2 = "包含"
                reValue2 = CreateRelationship(graph, qupai_label, attr2, poem_label, attr1, m_r_name2)
                print("創建關係:" + qu_name[i] + "-包含-" + title[i] + "成功")
            if author[i]!='':
                #創建作者寫作關係
                attr2={"name":author[i]}
                if MatchNode(graph,author_label,attr2)!=None:
                    #創建關係
                    m_r_name1 = "寫作"
                    reValue1 = CreateRelationship(graph, author_label, attr2, poem_label, attr1, m_r_name1)
                    print("創建關係:"+author[i]+"-寫作-"+title[i]+"成功")
                    m_r_name2 = "作者"
                    reValue2 = CreateRelationship(graph,poem_label, attr1, author_label, attr2,  m_r_name2)
                    print("創建關係:" + title[i] + "-作者-" + author[i] + "成功")
            if desty[i]!='':
                attr2 = {"name": desty[i]}
                if MatchNode(graph, desty_label, attr2) == None:
                    CreateNode(graph, desty_label, attr2)
                    print("創建朝代:" + desty[i] + "成功!!")
                # 創建關係
                m_r_name1 = "朝代"
                reValue1 = CreateRelationship(graph, poem_label, attr1, desty_label, attr2, m_r_name1)
                print("創建關係:" + title[i] + "-所屬朝代-" + desty[i] + "成功")
                m_r_name2 = "包含詩詞"
                reValue2 = CreateRelationship(graph, desty_label, attr2, poem_label, attr1, m_r_name2)
                print("創建關係:" + desty[i] + "-包含-" + title[i] + "成功")


if __name__ == '__main__':
    create_poem()

展示效果

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章