日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Neo4j简单构建知识图谱实例

發布時間:2023/12/10 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Neo4j简单构建知识图谱实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?一、需要兩組數據

二、提取所需專題數據

三、利用結巴分詞將專題數據分詞

四、連接并繪制知識圖譜

五、消除重復節點及重復關系

六、結果展示


Ps:在使用Neo4j前,需要先在該安裝路徑文件下cmd運行,輸入neo4j console 即可啟動,可根據關閉時輸入neo4j stop,如下圖所示說明已成功啟動,此時可打開 http://localhost:7474/進入Neo4j圖數據庫。

一、需要兩組數據

? ? ? ?如下圖所示,我們需要篩選出關鍵字中包含有“圖形化編程”的專題數據,并以此構建“圖形化編程”與各專題之間的關系。下圖以20條數據為例(本文使用的數據庫為Mysql數據庫):

二、提取所需專題數據

? ? ? ?利用SQL語句提取所需專題數據,即“圖形化編程”存在于keywords中的對應專題數據(本文舉的例子中,keywords中皆有“圖形化編程”,可以不用使用以下模糊語句;該語句適用于關鍵詞中沒有我們需要的,即相應專題也不需要,因此可以過濾掉,提高數據準確性)。SQL模糊查詢語句的代碼如下:

# 使用的是數據庫引擎連接數據庫,需導入"from sqlalchemy import create_engine",my_date是數據庫名 con = create_engine('mysql+pymysql://root:密碼@localhost:3306/my_date charset=utf8')# 獲取test表專題字段,使用pandas庫中的數據庫查詢方法 text = pd.read_sql_query(sql="SELECT distinct zhuanti FROM test where zhuanti is not null and keywords like '%%%%%s%%%%'" % '圖形化編程', con=con)

三、利用結巴分詞將專題數據分詞

? ? ? ?由于本文舉的例子中,有些專題不止只有一個詞匯,同時也有部分數據是存在相同專題的情況,因此需要使用結巴分詞進行數據分詞。例如最后一行的【職業教育;計算機硬件技術】利用結巴分詞提取為【職業教育】、【計算機硬件應用】兩個詞匯。步驟如下:

# 導入自定義的專題分詞詞典 data = str(text) # 需將讀取的文檔dataframe格式轉為str jieba.load_userdict('專題詞典.txt')# 去除摘要中的空格、換行等不必要的數據 data = data.replace(';', '') data = data.replace('\n', '') data = data.replace(' ', '') data = data.replace(',', '')# 結巴分詞中的精確模式進行分詞 seg_list = jieba.lcut(data)# 導入自定義的停用詞詞典 with open('stopwords.txt', 'r+', encoding='utf-8')as fp:stopwords = fp.read().split('\n')# 存儲過濾停用詞后的分詞結果 word_list = []# 如果切出的詞不是停用詞,則存入列表 for seg in seg_list:if seg not in stopwords:word_list.append(seg)

? ? ? ?其中自定義的專題分詞是為了防止出現,例如【計算機硬件技術】被劃分為【計算機】【硬件】【技術】等情況,不滿足我們的需求,因此自定義專題分詞詞典能夠提取我們所需的詞匯。本文的專題詞典【專題詞典.text】如下所示:

中等教育 教育理論與教育管理 初等教育 計算機軟件及計算機應用 自動化技術 工業通用技術及設備 計算機硬件技術 電信技術 鐵路運輸 建筑科學與工程 戲劇電影與電視藝術 職業教育

?? ? ? ?其中自定義的停用詞詞典是為了過濾一些例如數字、符號等不需要的數據。本文的停用詞詞典【stopwords.text】如下所示:

; 1 2 3 4 5 6 7 8 9 10 11 12 zhuanti0

?? ? ? ?最終過濾出的分詞結果【word_list】如下所示:

['中等教育', '教育理論與教育管理', '計算機軟件及計算機應用', '初等教育', '自動化技術', '工業通用技術及設備', '計算機軟件及計算機應用', '計算機軟件及計算機應用', '自動化技術', '計算機軟件及計算機應用', '計算機硬件技術', '電信技術', '計算機軟件及計算機應用', '鐵路運輸', '建筑科學與工程', '自動化技術', '初等教育', '工業通用技術及設備', '戲劇電影與電視藝術', '計算機軟件及計算機應用', '職業教育', '計算機硬件技術']

PS:突然發現該方法其實不是很必要,就是其實我們上述最終過濾出的數據,結合后面消除重復節點,得到的就是我們定義的專題詞典,所以可以針對自己的數據情況酌情使用,這里也是展示一下如何進行結巴分詞提取所需數據。

四、連接并繪制知識圖譜

? ? ? ?分詞后便得到了我們繪制圖譜的數據,連接Neo4j圖數據庫,以“圖形化編程”為中心節點,將之前分詞并清洗后的數據【word_list】用for循環逐個添加,創建節點和關系,并為節點添加屬性,最后實例化。打開網址便能看到繪制好的圖譜。

# 連接Neo4j graph = Graph("http://localhost:7474", auth=("neo4j", "密碼")) graph.delete_all() # 清除neo4j中原有的結點# 創建節點 for i in range(1,len(word_list)):node = Node('title',name="圖形化編程")relation = Node('zhuanti',name=word_list[i])graph.create(node)graph.create(relation)# 給節點添加屬性(兩者間的關系)zhuanti = Relationship(node, '應用于', relation)# 節點實例化,并顯示在neo4j中graph.create(zhuanti)

? ? ? ?打開網址,此時繪制的圖譜如下圖所示:

? ? ? ?但由圖可以發現,圖譜顯示的是構建每個“圖形化編程”與各專題節點關系,聯系分散了,不是我們想要的只有一個父節點“圖形化編程”,擁有多個專題子節點的關系。因此我們需要消除重復節點。

五、消除重復節點及重復關系

1.消除重復節點:在Neo4j上輸入以下語句(注意:不是寫在python的代碼中,是網址的運行框)

# 刪除專題重復的節點graph.run('MATCH (n:zhuanti) WITH n.name AS name, COLLECT(n) AS nodelist, COUNT(*) AS count WHERE count > 1 CALL apoc.refactor.mergeNodes(nodelist) YIELD node RETURN node')# 刪除“圖形化編程”重復的節點graph.run('MATCH (n:title) WITH n.name AS name, COLLECT(n) AS nodelist, COUNT(*) AS count WHERE count > 1 CALL apoc.refactor.mergeNodes(nodelist) YIELD node RETURN node')

消除專題重復節點,運行結果如下圖所示:

消除“圖形化編程”重復節點,運行結果如下圖所示:

?此時繪制的圖譜如下圖所示:

??2.消除重復關系:如上圖所示圖譜中出現了許多重復關系,因此需要消除。同理在Neo4j上輸入以下語句

# 刪除重復關系graph.run('MATCH (a)-[r:應用于]- >(b) WITH a,b,TAIL (COLLECT(r)) as rr WHERE size(rr)>0 FOREACH (r IN rr | DELETE r)')

六、結果展示

總結

以上是生活随笔為你收集整理的Neo4j简单构建知识图谱实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。