논어 구절로 알아보는 정치인의 겉과 속
red
목차
탐구의 목적
탐구의 대상
탐구 방법
데이터 수집
데이터 분석
변수 설명
수집한 데이터를 이용하여 네트워크를 형성하였다. Statement(발언), Section(구절), Person(정치인), Month(월), Year(년), Expression(인용구), Chapter(장), Event(사건), Party(정당)을 노드로 삼았다. 각 노드별 속성 중 주목할 만한 부분은 다음과 같다.
Statement
노드 명 | 속성 | 설명 |
Statement (발언) | contentcontext (내용 맥락) | 발화 내용에 따라 선거, 비선거 - 사회적 문제, 비선거 - 정책적 대립, 비선거 - 개인 신변 논란, 비선거 - 국회 활동, 격려 / 각오 / 방향제시, 행태 비판으로 구분함. |
formcontext (형식 맥락) | 발화 형식에 따라 SNS, 논평 / 보도자료, 즉석발언, 연설 / 브리핑 / 기자회견, 기념사 / 축사, 인터뷰로 구분함. | |
기존 Event 노드의 속성이었던 context(맥락)를 내용 맥락과 형식 맥락으로 구분하는 과정에서 같은 사건에 대한 발언이라도 형식이 다를 수 있다는 점으로부터 내용 맥락, 형식 맥락이 Event 노드가 아닌 Statement 노드에 위치해야 한다고 판단하여 Event 노드의 context 속성을 삭제하고 Statement 노드에 contentcontext, formcontext 속성을 추가하였다.
우선 내용 맥락의 경우, 실질적이거나 구체적인 사건, 정책에 관한 내용인지 여부에 따라 두 가지로 분류하였다. 구체적인 사건, 정책에 관한 내용일 경우 선거와 비선거로 분류하였으며, 비선거 내에서도 그 내용에 따라 사회적 문제, 정책적 대립, 개인 신변 논란, 국회활동으로 구분하였다. 이때 추미애 장관 아들 병역 문제나 최순실 게이트 등의 사건들을 개인 신변 논란과 사회적 문제로 구분할 때 단순히 물의를 일으킨 것은 개인 신변 논란, 물의를 넘어 쟁점이 될 만큼 큰 이슈가 되었을 경우 사회적 문제로 분류하였다. 구체적인 사건, 정책에 관한 내용이 아닐 경우 그 내용이 긍정적인지 여부에 따라 격려 / 각오 / 방향제시와 행태 비판으로 구분하였다.
형식 맥락의 경우, 크게 전달 매체에 따라 말과 글, 두 가지로 분류하였다. 글의 경우 정식 문서 여부에 따라 논평 / 보도 자료와 SNS로 나누었고, 말의 경우 원고가 준비된 발언과 그렇지 않은 즉석 발언으로 분류하였다. 또한 원고가 준비된 발언들을 발언 기회나 환경과 발언 내용의 선후 관계에 따라 환경이 우선일 경우와 내용이 우선일 경우로 구분하였다. 전자의 경우 그 내용에 따라 기념사 / 축사와 인터뷰로 구분하였고, 후자는 연설 / 브리핑 / 기자회견이라는 하나의 분류로 묶었다.
Section
노드 명 | 속성 | 설명 |
Section (구절) | name | 논어의 원문 구절을 노드의 이름으로 사용하였다. |
korname (한글 독음) | Neo4j에서 검색이 용이하도록 하기 위해 한글 독음 속성을 추가하였다. | |
Person
노드 명 | 속성 | 설명 |
Person (정치인) | name | 발언자의 이름 |
Month
노드 명 | 속성 | 설명 |
Month (월) | name | N월의 형태로 이름을 정하였다. |
yearname (연월) | 2019년 1월과 2020년 1월이 혼동되는 것을 막기 위해, NNNN년 M월의 형태로 연월 속성을 추가하였다. | |
Year
노드 명 | 속성 | 설명 |
Year (년) | name | 년도 |
Expression
노드 명 | 속성 | 설명 |
Expression (인용구) | name | 인용된 구절을 그대로 name으로 사용하였다. (ex. 하나를 보면 열을 안다.) |
Chapter
노드 명 | 속성 | 설명 |
Chapter (장) | name | 장의 이름 |
Event
노드 명 | 속성 | 설명 |
Event (사건) | name | 사건 이름 |
Party
노드 명 | 속성 | 설명 |
Party (정당) | name | 정당의 이름 |
진보, 보수로 구분하는 것은 자의적이라는 코멘트에 따라 그러한 구분 대신 당의 이름만을 속성으로 추가하였다.
Edges
이러한 노드들 간의 Edge는 다음과 같다.
source | target | relation | 설명 |
Statement | Month | isAt (시기이다) | 발언이 행해진, 혹은 기사화된 시기를 의미한다. |
Month | Year | isIn (속하다) | 해당 년도에 속하는 월을 의미한다. |
Statement | Expression | mentions (언급하다) | 발언에서 언급하는 인용 구절을 의미한다. |
Expression | Section | derivedFrom (로부터 유래하다) | 인용구가 어떤 논어의 구절에서 유래되었는지를 나타낸다. |
Section | Chapter | isPartOf (부분이다) | 구절이 어떤 장에 포함되는지를 나타낸다. |
Person | Statement | says (말하다) | 발언자와 발언을 연결한다. |
Statement | Event | isAbout (에 대해 이야기하다) | 발언과 관련된 사건을 나타낸다. |
Person | Party | isMemberOf (일원이다) | 각 정치인이 어느 정당에 속하는지 나타낸다. |
Party | Party | divergesFrom (갈라져 나오다) | source 정당이 target 정당으로부터 갈라져 나온 관계임을 의미한다. |
Party | Party | changesNameTo | source 정당이 target 정당으로 이름을 바꿨음을 의미한다. |
Party | Party | merges | source 정당이 다른 정당과 병합하여 target 정당을 창설하였음을 나타낸다. |
온톨로지
이러한 기준을 바탕으로 온톨로지(논어 구절로 알아보는 정치인이 겉과 속 Ontology)를 구성하였다. 온톨로지의 데이터는 본 데이터 중 가장 먼저 수집된 7개로 이루어졌으며, 표로 정리하면 다음과 같다.
번호
|
Statement
|
Section
|
Person
|
Month
|
Year
|
Expression
|
Chapter
|
Event
|
Party
|
1 |
발언1 |
自古皆有死 民無信不立 |
이낙연 |
8월 |
2017년 |
무신불립 |
자공문정章 |
살충제 계란파동 |
더불어민주당
|
2 |
발언2 |
述而不作 信而好古 竊比於我老彭 |
이낙연 |
12월 |
2017년 |
술이부작 |
술이부작章 |
기자생활 회고 |
더불어민주당
|
3 |
발언3 |
回也 聞一以知十 賜也 聞一以知二 |
이재명 |
1월 |
2017년 |
하나를 보면 열을 안다 |
술여여회야章 |
대한민국 제19대 대통령 선거 |
더불어민주당
|
4 |
발언4 |
國有家者 不患寡而患不均 不患貧而患不安 |
이재명 |
9월 |
2020년 |
불환빈 환불균 |
계씨장벌전유章 |
신년사 |
더불어민주당
|
5 |
발언5 |
政者正也 子帥以正 孰敢不正 |
유승민 |
1월 |
2019년 |
정자정야 |
문정어공자章 |
좌우명 |
바른미래당
|
6 |
발언6 |
自古皆有死 民無信不立 |
나경원 |
7월 |
2017년 |
무신불립 |
자공문정章 |
좌우명 |
자유한국당
|
7 |
발언7 |
夫子 莞爾而笑曰 割鷄 焉用牛刀 |
이준석 |
2월 |
2020년 |
닭 잡는 데 소 잡는 칼 |
지무성章 |
제17대 대선후보 경선 |
미래통합당
|
Cypher Query
목적
|
예시
|
입력값
|
특정인의 발언 모아보기 |
이낙연의 발언 찾기 |
match (a:Person) where a.name='이낙연' match (a)-[r:says]->(b) return a,r,b
|
특정인이 말한 논어구절 모아보기 |
이낙연이 인용한 논어구절 찾기 |
match (a:Person) where a.name='이낙연' match (a)-[r:says]->(b:Statement) match (b)-[r2:mentions]->(c:Expression) return a,r,b,r2,c
|
특정 정당이 인용한 논어구절 모아보기 |
더불어민주당이 인용한 논어구절 찾기 |
match (a:Party) where a.name='더불어민주당' match (b:Person)-[r:isMemberOf]->(a) match (b)-[r2:says]->(c:Statement) match (c)-[r3:mentions]->(d:Expression) return a,d
|
특정 년도에 나온 발언 모아보기 |
2017년 발언 모아보기 |
match (a:Statement)-[r:isAt]->(b:Month) match (b)-[r2:isIn]->(c) where c.name='2017' return a,r,b,r2,c
|
특정 사건에 대한 발언 모아보기 |
대한민국 제19대 대통령 선거 관련 발언 모아보기 |
match (a:Event) where a.name='대한민국 제19대 대통령 선거' match (b:Statement)-[r:isAbout]->(a) return a,r,b
|
특정 부류의 사건들에 대한 발언 모아보기 |
선거 관련 발언 모아보기 |
match (a:Event) where a.context='선거' match (b:Statement)-[r:isAbout]->(a) return a,r,b
|
특정 구절이 인용된 발언 모아보기 |
무신불립을 인용한 발언 찾기 |
match (a:Expression) where a.name='무신불립' match (b)-[r:mentions]->(a) return b,r,a
|
발언 내용별 인용 횟수 세기 (중복 허용) |
match(a: Statement) - [r: mentions] -> (b:Expression) return a.contentcontext, count(*) as number order by number desc
| |
발언 내용별 인용 표현 가짓수 세기 (중복 제외) |
match(a: Statement) - [r: mentions] -> (b:Expression) return a.contentcontext, count(distinct(b)) as number order by number desc
| |
발언 형식별 인용 횟수 세기 (중복 허용) |
match(a: Statement) - [r: mentions] -> (b:Expression) return a.formcontext, count(*) as number order by number desc
| |
발언 형식별 인용 표현 가짓수 세기 (중복 제외) |
match(a: Statement) - [r: mentions] -> (b:Expression) return a.formcontext, count(distinct(b)) as number order by number desc
| |
발언 내용별 많이 인용된 논어 구절 보기 (동일인에 의한 중복 허용) |
격려 / 각오 / 방향제시에 많이 쓰인 구절 상위 5개 출력하기 |
match(a: Statement) - [r: mentions] -> (b:Expression) where a.contentcontext = '격려 / 각오 / 방향제시' return b.name, count(*) as number order by number desc limit 5
|
발언 내용별 많이 인용된 논어 구절 보기 (동일인에 의한 중복 비허용) |
격려 / 각오 / 방향제시에 많이 쓰인 구절 상위 5개 출력하기 |
match(p:Person) - [s:says] -> (a: Statement) - [r: mentions] -> (b:Expression) where a.contentcontext = '격려 / 각오 / 방향제시' return b.name, count(distinct(p)) as number order by number desc limit 5
|
더불어민주당과 연결된 당이 특정 내용에 대해 말할 때 많이 인용한 논어 구절 보기 |
더불어민주당과 연결된 당이 격려/각오/방향제시 할 때 많이 사용한 논어 구절 그래프로 보기 |
match(d: Party) <- [m: isMemberOf] - (p: Person) - [s: says] -> (a: Statement) - [r: mentions] -> (b:Expression) where a.contentcontext = '격려 / 각오 / 방향제시' and d.name in ['더불어민주당', '새정치민주연합', '민주당', '통합민주당', '대통합민주신당', '열린우리당'] return d, m, p, s, a, r, b
|
더불어민주당과 연결된 당이 특정 내용에 대해 말할 때 많이 인용한 논어 구절 보기 |
더불어민주당과 연결된 당이 격려/각오/방향제시 할 때 많이 사용한 논어 구절 표로 보기 |
match(d: Party) <- [m: isMemberOf] - (p: Person) - [s: says] -> (a: Statement) - [r: mentions] -> (b:Expression) where a.contentcontext = '격려 / 각오 / 방향제시' and d.name in ['더불어민주당', '새정치민주연합', '민주당', '통합민주당', '대통합민주신당', '열린우리당'] return b.name, count(*) as number order by number desc limit 5
|
국민의힘당과 연결된 당이 특정 내용에 대해 말할 때 많이 인용한 논어 구절 보기 |
국민의힘당과 연결된 당이 격려/각오/방향제시 할 때 많이 사용한 논어 구절 그래프로 보기 |
match(d: Party) <- [m: isMemberOf] - (p: Person) - [s: says] -> (a: Statement) - [r: mentions] -> (b:Expression) where a.contentcontext = '격려 / 각오 / 방향제시' and d.name in ['한나라당', '새누리당', '자유한국당', '미래통합당', '국민의힘당', '자유선진당'] return d, m, p, s, a, r, b
|
국민의힘당과 연결된 당이 특정 내용에 대해 말할 때 많이 인용한 논어 구절 보기 |
국민의힘당과 연결된 당이 격려/각오/방향제시 할 때 많이 사용한 논어 구절 표로 보기 |
match(d: Party) <- [m: isMemberOf] - (p: Person) - [s: says] -> (a: Statement) - [r: mentions] -> (b:Expression) where a.contentcontext = '격려 / 각오 / 방향제시' and d.name in ['한나라당', '새누리당', '자유한국당', '미래통합당', '국민의힘당', '자유선진당'] return b.name, count(*) as number order by number desc limit 5
|
탐구 결과
발화 내용별 분석
위에서 서술하였듯이, 각 인용 사례를 나타내는 발언(Statement)노드에는 발화 내용 맥락과 형식 맥락의 두 가지 context 속성이 있다. <발화 내용별 분석>에서는 선거, 격려/각오/방향제시, 행태 비판 등 정치인이 해당 논어 구절을 인용한 내용 맥락에 대한 분석을 해 보고자 한다.
먼저 각 내용 속성에 해당되는 인용 사례의 수를 보여주는 쿼리의 결과는 다음과 같다.
인용 구절의 중복을 허용하지 않고, 각 내용 맥락으로 인용된 구절의 가짓수를 센 쿼리의 결과는 다음과 같다. 예를 들어, "무신불립"이라는 구절이 선거 맥락으로 3번, 행태 비판 맥락으로 2번 사용되었다면 이 쿼리에서는 선거 1번, 행태 비판 1번으로 세어진다. 각 내용 맥락별로 얼마나 다양한 구절들이 인용되었는지 살펴보기 위한 쿼리이다.
격려/각오/방향제시 맥락으로 사용된 구절들
선거 맥락으로 사용된 구절들
여기까지 보면 "무신불립"의 인용 횟수가 유독 많은 것을 알 수 있다. 이에 무신불립이 인용된 사례들만 따로 모아서, 이 구절이 어떤 내용 맥락에서 사용되었는지 살펴보았다.