Neo4jRyeohang

KJS

김지선 (토론 | 기여) 사용자의 2023년 9월 25일 (월) 18:10 판 (김지선님이 여항전기집 수록 인물 관계망 데이터 Neo4j 사용 방법 및 예시 문서를 넘겨주기를 만들지 않고 Neo4jRyeohang 문서로 이동했습니다)

←메인 페이지로 돌아가기
2019년 02월 Neo4j 버전을 기준으로 작성되었습니다 - 2019년 2월 1일 작성

Neo4j란 무엇인가

Neo쿼리.png
Neo4j란 그래프 데이터 베이스(graph database)로 사이퍼(Cypher)라고 불리는 질의어를 사용합니다.
  • 노드(Nodes)
노드는 관계를 통해 다른 노드에 연결되며, 하나 이상의 속성을 가질 수 있습니다.
노드에는 그래프에서 그 역할을 설명하는 하나 이상의 레이블 이 있습니다.
  • 관계(Relations)
두 노드를 연결하는 관계로, 관계에는 방향성이 있습니다.
하나의 노드는 여러 개의 관계 뿐 아니라 재귀 관계도 가질 수 있습니다.
관계 또한 노드와 마찬가지로 하나 이상의 속성을 가질 수 있습니다.
  • 속성(Properties)
속성은 이름이 문자열인 값으로, 여러가지 속성값을 만들 수 있습니다.
  • 레이블(Lables)
레이블은 노드를 집합으로 그룹화하는 데 사용되며, 한 개의 노드에는 여러 개의 레이블이 있을 수 있습니다.
그래프에서 노드를 쉽고 빠르게 찾기 위해 레이블이 색인됩니다.

Neo4j 설치 및 실행하기

Intro neo1.png
1. Neo4j 다운로드 사이트에서 간단한 개인정보 입력 후 다운받아 설치합니다.


네오1.png
2. Neo4j를 실행하면 위와 같은 화면이 출력됩니다.
해당 화면에서 My Project(빨간색 네모상자)를 선택합니다.


네오2.png
3. Create a Local Graph(빨간색 네모상자)를 선택합니다.


네오3.png
4. 그래프 이름과 비밀번호를 적고 Create(빨간색 네모상자)를 선택합니다.


네오4.png
5. Start(빨간색 네모상자) 버튼을 누릅니다.


네오5.png
6. Start 버튼이 Stop으로 바뀌면 위쪽에 있는 Neo4j Browser(빨간색 네모상자)을 누릅니다.


네오6.png
7. 해당 화면이 나오면 이제 로컬 호스트에서 Neo4j를 운용할 수 있습니다.

Neo4j에 데이터 입력하기

개체 데이터 입력하기

네오개체1.PNG
1. 빨간색 네모상자에 개체 데이터를 입력합니다. 개체 데이터 입력 기본 질의어는

CREATE (a:Label{Datatypeproperty1:'name', Datatypeproperty2:'name'})
RETURN a
CREATE (변수:라벨{속성:'속성값', 속성:'속성값'})

RETURN 변수 입니다.
예시 : 이름 속성값은 '김지선'이고, 소속 속성값은 '한국학중앙연구원', 성별 속성값은 '여자', 라벨이 Person인 노드 A를 만들어라
CREATE (A:Person{이름:'김지선', 소속:'한국학중앙연구원', 성별:'여자'}) RETURN A


네오개체2.PNG
2-1. 인물 데이터 예시1 : 인물 데이터 '조희룡'을 입력하기 위해 빨간색 네모상자에 아래와 같은 질의어를 입력한 후, 오른쪽 버튼을 누릅니다.(오른쪽 네모상자)
CREATE (a1:Person{gid:'P001', project:'여항전기연구', class:'Person', name:'조희룡(趙熙龍)', k_name:'조희룡', c_name:'趙熙龍', midname:'치운(致雲), 이견(而見), 운경(雲卿)', courtesyname:'우봉(又峰), 석감(石憨), 철적(鐵笛), 호산(壺山), 단로(丹老), 매수(梅叟), 창주(滄洲), 석감(石憨), 매화두타(梅花頭陀), 향설관(香雪館), 적루거사(篴樓居士), 사연당(賜硯堂)', alias:'조희룡(趙羲龍)', b_year:'1789', d_year:'1866', sex:'남', clan:'평양조', origin:'평양(平壤)', hierarchy:'비양반', biography:'null', exam:'null', p_mode:'P1', url:'http://dh.aks.ac.kr/~jisun/wiki/index.php/조희룡(趙熙龍)'})
RETURN a1


네오개체3.PNG
2-2. 위와 같이 하나의 노드가 출력되면 개체 데이터가 성공적으로 생성된 것입니다.


네오개체4.PNG
3-1. 작품 데이터 예시1 : 작품 데이터 '왕한상전'을 입력하기 위해 빨간색 네모상자에 아래와 같은 질의어를 입력한 후, 오른쪽 버튼을 누릅니다.(오른쪽 네모상자)
CREATE (a2:Writing{gid:'W114', project:'여항전기연구', class:'Writing', name:'왕한상전(王漢相傳)', k_name:'왕한상전', c_name:'王漢相傳', t_name:'왕한상전', alias:'null', writer:'조희룡(趙熙龍)', edition:'호산외사(壺山外史)_수경실본', w_type:'산문', w_subtype:'전(傳)', w_mode:'W1', url:'http://dh.aks.ac.kr/~jisun/wiki/index.php/왕한상전(王漢相傳)'})
RETURN a2


네오개체5.PNG
3-2. 위와 같이 하나의 노드가 출력되면 개체 데이터가 성공적으로 생성된 것입니다.


관계 데이터 입력하기

네오개체1.PNG
1. 빨간색 네모상자에 관계 데이터를 입력합니다. 관계 데이터 입력 기본 질의어는

MATCH (a{Datatypeproperty:'name'}) Match (b{Datatypeproperty:'name'})
CREATE (a) - [r:Edge{Objectproperty1:'name', Objectproperty2:'name'}] -> (b)
RETURN a, r, b
MATCH (변수:라벨{속성:'속성값', 속성:'속성값'}) Match (변수:라벨{속성:'속성값', 속성:'속성값'}) CREATE (a) - [:관계{속성:속성값}]- (b)

RETURN a, r, b 입니다.


네오관계2.PNG
2. 인물-작품 데이터 예시 : 앞서 만든 인물 데이터 '조희룡'과 작품 데이터 '왕한상전'을 'writer'라는 관계어로 연결시켜 주기 위해 빨간색 네모상자에 아래와 같은 질의어를 입력한 후, 오른쪽 버튼을 누릅니다.(오른쪽 네모상자)
MATCH (a{name:'조희룡(趙熙龍)'}) MATCH (b{name:'왕한상전(王漢相傳)'})
CREATE (a) <- [r:author] - (b)
RETURN a, r, b


네오관계1.PNG
2-2. 위와 같이 두 개의 노드가 연결되면 관계 데이터가 성공적으로 생성된 것입니다.


Neo4j에서 원하는 데이터 검색하기

기본적인 질의어 예시

Pro 1.PNG
1. 전체 데이터 불러오기
match (a)  return a


네오예시1.PNG
2. 특정 클래스만 보이기(예:인물)
match (a:Person) return a


네오예시2.PNG
3. 두 인물이 특정 클래스로 매개 됨을 보여라(예:작품)
match (a{k_name:'조희룡'}) - [r] - (b{class:'Writing'}) - [s] - (c{k_name:'왕태'}) return a, r, b, s, c


네오예시3.PNG
4. 특정 인물과 관련된 작품과 그 글을 쓴 작가를 모두 보여라(예:박윤묵)
match (a{k_name:'박윤묵'}) - [r]  - (b{class:'Writing'}) - [s:writer] - (c{class:'Person'}) return a, r, b, s, c


네오예시4.PNG
5. 세 전기집에서 특정 인물을 대상으로 한 작품 보여라(예:이단전)
match (a{k_name:'이단전'}) <- [r:object]  - (b{w_mode:'W1'}) return a, r, b


네오예시5.PNG
6. 특정 인물에 대한 인용서와 인용서 작가를보여라(예:박태성)
match (a{k_name:'박태성'}) <- [r:object]  - (b{w_mode:'W1'}) - [s:references]  ->  (c{class:'Writing'}) - [t:writer] - (d{class:'Person'}) return a, r, b, s, c, t, d


실제 연구에서 활용한 질의어 예시

세 저자(조희룡, 유재건, 이경민)를 출력하기

1.세저자.PNG
  • 세 저자는 '인물(Person)' 클래스 개체 속성 'p_mode(작가/입전인물 여부)'값이 P1입니다.
match (a{p_mode:'P1'}) return a


조희룡과 유재건

조희룡과 유재건이 '문헌'을 매개로 연결되는 경우 찾기
1.조희룡-유재건.png
match (a{k_name:'조희룡'}) - [r] - (b{class:'Writing'}) - [s] - (c{k_name:'유재건'}) return a, r, b, s, c
조희룡과 유재건이 소속된 '단체'(가문 또는 시사)를 매개로 함께 활동했던 인물 찾기
2.조희룡-유재소-유재건.png
match (a{k_name:'조희룡'}) <- [r:member]  - (b{class:'Group'}) - [s:member] -> (c) <- [t:member]  - (d{class:'Group'}) - [u:member] ->  (e{k_name:'유재건'}) return  a, r, b, s, c, t, d, u, e 
조희룡과 유재소가 '서화'를 매개로 연결되는 경우 찾기
3.조희룡-서화-유재소.PNG
match (a{k_name:'조희룡'}) - [r] - (b{class:'Object'}) - [s] - (c{k_name:'유재소'}) return a, r, b, s, c 


조희룡과 이경민

조희룡과 이경민이 소속된 '단체'(가문 또는 시사)를 매개로 함께 활동했던 인물 찾기
4.조희룡-이기복-이경민.PNG
match (a{k_name:'조희룡'}) <- [r:member]  - (b{class:'Group'}) - [s:member] -> (c) <- [t:member]  - (d{class:'Group'}) - [u:member] ->  (e{k_name:'이경민'}) return a, r, b, s, c, t, d, u, e
조희룡과 '작품(Writing)'을 매개로 연결되는 이경민의 가문(강양 이씨) 일원 찾기
5.조희룡-작품-이경민.PNG
match (a{k_name:'조희룡'}) - [r] - (b{class:'Writing'}) - [s] - (c{class:'Person'}) <- [t:member] - (d{k_name:'강양_이씨'}) return a, r, b, s, c, t, d


유재건과 이경민

유재건과 '작품(Writing)'을 매개로 연결되는 이경민의 가문(강양 이씨) 일원 찾기
6.유재건-작품-이경민네.PNG
match (a{k_name:'유재건'}) <- [r] - (b{class:'Writing'}) - [s] -> (c{class:'Person'}) <- [d] -(e{k_name:'강양_이씨'}) return return a, r, b, s, c, d, e