偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

使用Python構(gòu)建紅樓夢人物知識圖譜

開發(fā) 人工智能
在當前大模型不斷發(fā)展的情況下,可以考慮將復雜的關(guān)系喂給大模型,讓大模型自動分析,給出我們想要的結(jié)論。

一、python環(huán)境準備

可詳細參考使用Python操作nNeo4j中python環(huán)境的搭建。

主要python庫如下:

Package                  Version
py2neo                   2021.2.4

二、數(shù)據(jù)準備

數(shù)據(jù)一共有4列,381行,命名為triples.csv:

圖片

  • source:實體起點。比如Alice指向Bob,Alice是起點,箭頭開始的位置。

圖片

  • target:實體起點。比如Alice指向Bob,Bob是終點,箭頭終止的實體。
  • relation:實體間的關(guān)系。實體A與實體B的關(guān)系,但是要注意,實體關(guān)系是有指向的。比如A是B的父親,A指向B;B是A的兒子,此時就是B指向A。
  • label:標簽。會將target列的實體打標簽,一個實體可以有多種標簽,可以類別一個人是有多重身份的。

數(shù)據(jù)解釋示例:

“賈代善”是“賈源”的son,“賈代善”的標簽是“子”;

“賈母”是“賈代善”的wife,“賈母”的標簽是“妻”;

三、代碼編寫

3.1 基礎(chǔ)庫的導入

import csv
from py2neo import Graph,Node,Relationship

csv庫用來讀取triples.csv文件;

py2neo用來連接neo4j圖數(shù)據(jù)庫。

3.2 連接neo4j數(shù)據(jù)庫

# 連接 Docker 內(nèi)的 Neo4j
g = Graph("bolt://localhost:7687", auth=("neo4j", "neo4j1234"))

此行代碼連接了neo4j圖數(shù)據(jù)庫,連接方式為bolt,由Neo4j圖形數(shù)據(jù)庫團隊創(chuàng)作,主要用于執(zhí)行數(shù)據(jù)庫查詢。

當然,也可以通過http協(xié)議進行連接,連接代碼如下:

g = Graph("http://localhost:7474", auth=("neo4j", "neo4j1234"))

3.3 讀取數(shù)據(jù)文件

with open(r"C:\Users\admin\Desktop\triples.csv",'r',encoding='utf-8') as f:
    reader=csv.reader(f)
    # 遍歷每一行數(shù)據(jù)
    for item in reader:
        # 首行為表頭,不計入關(guān)系
        if reader.line_num==1:
            continue

讀取triples.csv文件,'r'表示read,讀取文件,'encoding'表示數(shù)據(jù)編碼為utf-8。

使用csv.reader形成基于文件的迭代器對象,簡單來說就是可以通過reader遍歷每一行數(shù)據(jù)。

for item in reader就是遍歷每一行數(shù)據(jù)。

由于數(shù)據(jù)有表頭,因此首行不計入實體關(guān)系的建立。

3.4 定義實體與關(guān)系

對于基礎(chǔ)語法,可參考:使用Python操作Neo4j

# 定義起始節(jié)點
start_node=Node("Person",name=item[0])
# 定義終止節(jié)點
end_node=Node("Person",name=item[1])
# 定義起始節(jié)點指向終止節(jié)點的關(guān)系
relation=Relationship(start_node,item[3],end_node)
# 添加起始節(jié)點、終止節(jié)點、兩者關(guān)系
g.merge(start_node,"Person","name")
g.merge(end_node,"Person","name")
g.merge(relation,"Person","name")

item表示某行數(shù)據(jù),以首行數(shù)據(jù)為例:

item[0]表示賈代善,item[1]表示賈源,item[2]表示son,item[3]表示子。

圖片

start_node定義為起始實體,實體的標簽定義為Person,name定義為source列的數(shù)據(jù);

end_node定義為終止實體,實體的標簽定義為Person,name定義為target列的數(shù)據(jù);

relation定義為start_node與end_node的關(guān)系item[3]。

對于以下代碼,表示在標簽為 Person 的節(jié)點中,通過 name 屬性值匹配 start_node。

g.merge(start_node,"Person","name")

3.5 完整代碼如下

import csv
from py2neo import Graph,Node,Relationship


# 連接 Docker 內(nèi)的 Neo4j
g = Graph("bolt://localhost:7687", auth=("neo4j", "neo4j1234"))


with open(r"C:\Users\admin\Desktop\triples.csv",'r',encoding='utf-8') as f:
    reader=csv.reader(f)
    # 遍歷每一行數(shù)據(jù)
    for item in reader:
        # 首行為表頭,不計入關(guān)系
        if reader.line_num==1:
            continue
        # 定義起始節(jié)點
        start_node = Node("Person", name=item[0])
        end_node = Node("Person", name=item[1])
        # 定義起始節(jié)點指向終止節(jié)點的關(guān)系
        relation = Relationship(start_node, item[2], end_node)
        # 添加起始節(jié)點、終止節(jié)點、兩者關(guān)系
        g.merge(start_node, "Person", "name")
        g.merge(end_node, "Person", "name")
        g.merge(relation, "Person", "name")

四、圖數(shù)據(jù)庫查看

打開neo4j圖數(shù)據(jù)庫:http://localhost:7474/browser/

圖片

圖片

可以看到一共形成了388個實體,多種實體關(guān)系;

以賈寶玉實體為例,可以看到其復雜的人物關(guān)系。

圖片

五、圖數(shù)據(jù)庫擴展使用方向

在我們形成知識圖譜后,如何來應用呢?

在當前大模型不斷發(fā)展的情況下,可以考慮將復雜的關(guān)系喂給大模型,讓大模型自動分析,給出我們想要的結(jié)論。

責任編輯:龐桂玉 來源: Python伊甸園
相關(guān)推薦

2022-08-09 08:02:36

Python人物關(guān)系紅樓夢

2019-05-07 10:01:49

Redis軟件開發(fā)

2024-10-08 10:37:12

語言數(shù)據(jù)自然語言

2023-04-26 06:22:45

NLPPython知識圖譜

2011-01-07 11:34:34

職場

2010-07-23 15:42:20

職場生存

2022-08-11 14:11:14

知識圖譜人工智能

2025-06-03 06:14:37

2025-04-27 00:10:00

AI人工智能知識圖譜

2021-01-19 10:52:15

知識圖譜

2017-03-06 16:48:56

知識圖譜構(gòu)建存儲

2023-10-17 07:54:43

AI算法

2023-08-22 15:34:01

Python開發(fā)

2021-01-25 10:36:32

知識圖譜人工智能

2011-05-27 15:52:13

2025-05-26 10:11:32

2024-06-03 07:28:43

2025-06-06 01:00:00

AI人工智能知識圖譜

2025-10-09 00:00:00

Neo4jLLMs結(jié)構(gòu)化

2024-10-07 08:49:25

點贊
收藏

51CTO技術(shù)棧公眾號