문장 구조 분석
- 동물도 다양한 신호를 통해 의사소통하지만 인간의 언어는 복잡한 문장 구조를 가진다는 점에서 차이가 있습니다.
- 문장의 의미를 정확히 파악하기 위해서는 문장의 구조를 파악해야 합니다.
- 예: 진희는 민아보다 수현을 좋아했다
- 진희는 민아보다 (더) 수현을 좋아했다
- 진희는, 민아보다 수현을 (더) 좋아했다
- 통사론/구문론(syntax): 단어가 문장을 이루는 방법을 연구하는 언어학의 분야입니다.
애매한 문장 구조
- 예: "단무지 빼고 김치랑 밥 빼고 양상추"
- 해석 1: (단무지 빼고 김치랑) (밥 빼고 양상추)
- 해석 2: (단무지 빼고) ((김치랑 밥) 빼고)) 양상추
구성 문법 constituency grammar
- 구성소(constituent): 문장을 구성하는 성분(단어, 구 등)
- 구성소들이 모여 더 큰 구성소를 이루며, 같은 방식으로 문장을 만듭니다.
- 예: 관사 + 명사 → 명사구
- 현대 언어학의 문법 이론이나 컴퓨터 프로그래밍 언어의 처리에 주로 사용되는 방식입니다.
- 한국어 등 생략과 어순이 자유로운 언어는 분석이 어렵습니다.
- 중첩된(nested) 구조를 가지므로, 트리(tree) 형태로 시각화합니다.
의존 문법 dependency grammar
- 지배소(head)와 의존소(dependent) 단어 간의 의존 관계에 바탕을 둔 접근입니다.
- 예: "책을 읽다"에서 '책'(의존소)은 '읽다'(지배소)에 의존합니다.
- 기원전 5세기 인도의 학자 파니니가 세계 최초로 정리한 문법 규칙에서 처음 등장했습니다.
- 어순이 자유로운 언어를 다루기 쉽습니다.
- 의존관계를 이용 문장의 의미관계를 간단히 처리하기 좋습니다.
- 문장의 의미를 표현할 때 술어 논리(predicate logic)의 형태를 흔히 이용합니다.
- 예: 나는 책을 읽었다 = READ(I, BOOK)
- 문법적 의존관계는 술어논리의 술어-논항 관계와 비슷합니다.
의존분석 레이블
명사
- nsubj: 주어 (~이/가)
- obj: 목적어 (~을/를)
- iobj: 간접목적어 (~에게)
- obl: 부가적인 논항 (~에)
- dislocated: 원래의 위치에서 벗어나 있는 단어. 한국어의 경우 주제(~은/는)
수식어
- advmod: 부사 (예: 빨리 가다)
- amod: 형용사 (예: 재밌는 책)
- aux: 조동사 (예: 보고 싶다)
- det: 관형사 (예: 이/그/저)
여러 단어로 된 표현
- cc: 접속사 (and, or 등)
- conj: cc로 연결된 단어 (예: 사과와 포도)
- fixed: 고정된 표현 (예: because of)
- flat: 이름, 날짜 등
- compound: 합성어(예: phone book), 구동사(예: put up) 등
문장 구조 시각화
from IPython.display import SVG
SVG(spacy.displacy.render(doc))
spacy.displacy.render(doc)
토큰별 지배소 및 의존관계 보기
for token in doc:
print(token.text,
token.dep_,
token.head)