logo

[text-mining] 문장 구조 분석

 

문장 구조 분석

  • 동물도 다양한 신호를 통해 의사소통하지만 인간의 언어는 복잡한 문장 구조를 가진다는 점에서 차이가 있습니다.
  • 문장의 의미를 정확히 파악하기 위해서는 문장의 구조를 파악해야 합니다.
  • 예: 진희는 민아보다 수현을 좋아했다
    • 진희는 민아보다 (더) 수현을 좋아했다
    • 진희는, 민아보다 수현을 (더) 좋아했다
  • 통사론/구문론(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)   # 지배소
Previous
토큰화