지난번에 형태소 분석 프로그램을 만들기 위해서는 많은 문장에 대한 분석 데이터가 필요함을 알 수 있었다. 그리고 형태소별 사전도 필요함을 예상해볼 수 있다. 문장 분석 데이터를 만들기 위해서는 결국 일일이 사람의 손으로 형태소를 분석해 두어야 한다. 그래야 기분석 사전을 만들수도 있고, 형태소사전을 만들 수 있고, 통계정보 수집이 가능하다. 

 다행히 국립국어원 언어정보나눔터(https://ithub.korean.go.kr)에서는 이런 사전정보와 형태소를 분석한 데이터를 제공하고 있다. 해당 데이터는 실제 출판되는 소설 데이터도 있으므로 함부로 유포할 수 없어서 내 블로그에 올릴 수 없으니 해당 사이트에서 다운 받기 바란다. 국립국어원 언어정보나눔터에 있는 대로 형태소를 분석해서 사용하려면 그대로 이용가능하겠지만 그 형태소와 조금 다르게 사용할려면 조금 다른 동작이 많이 필요할 수는 있다.  


 형태소관련 데이터를 수집하기 위해서는 전자사전 카테고리에 있는 체언상세 이런 데이터를 다운받아서 XML 분석을 할 필요가 있다. 해당 zip 파일을 풀면 폴더명이 체언명이고 그 안에 데이터가 있다. 그 XML 데이터가 뭔지 이해하기 위해서는 통합자료실->사업보고서에서 "2007 전자사전 개발 결과 보고서"를 검색해서 해당문서를 읽어보면된다. 명사를 좀더 세밀하게 구별하기 위해서는 해당 파일안의 XML을 잘 이용하면 가능할 것으로 보인다. "2007 전자사전 개발 결과 보고서" 를 보면 <sem_class> 라는 항목이 있는데, 이 항목을 잘 이용하면 명사를 서술성명사와 비서술성명사로 구별 할 수 있어보인다.  잘 이용하면 더 세분화도 가능할 것 같다. 해당 문서를 잘 읽어서 활용한다면 형태소 분석기 만드는데 큰 도움이 될 것으로 보인다. sem_classs 내 항목을 더 자세히 확인 하기 위해서는 20세기 한글 관련 연구과제 개발을 위한 조사연구(http://www.prism.go.kr/homepage/entire/retrieveEntireDetail.do?research_id=1371000-201600017) 내에 "2005년도 확장․보완된 세종 명사 의미부류 체계"를 확인 하면 된다. 


 기분석 데이터나 통계 데이터 수집을 위해서는 "현대구어 - 형태분석 말뭉치" 나 "현대구어 - 형태분석 말뭉치" 를 잘 이용하면 된다. 


 이 데이터들은 XML 이라서 XML 처리만 잘한다면 어느정도 간단한 형태의 형태소분석기를 만들 수 있을 것 같다. 물론, 전에 말했다시피 불규칙활용, 복합어, 띄어쓰기등의 문제 때문에 파싱확률을 높이기 위해서는 많은 작업이 필요할 것이다.


 내가 만들려는 형태소분석기의 경우, 세종프로젝트에서 사용하는 형태소 보다 조금 더 상세한 형태소를 사용하려고 한다. 이를 위해 느슨한 형태의 형태소 분석기를 만든다음에 샘플데이터를 분석하고, 다시 이 데이터를 수동으로 분석해서  문장별 형태소 분석결과를 만들어 두어야 할 것 같다. 뭔가 많은 일이 필요할 것 같다. 



 사실, 다른 형태소 분석기가 어떻게 만들어지는지 자세히는 잘 모르겠다. 대략적으로 통계적인 방법으로 만든다고만 알고 있다. 소스를 보고 자세히 분석해봐야 정확히 알 수 있는데, 개인적으로 break point 를 찍어가면서 분석하지 않은 이상 소스만 보고 분석하기가 좀 어렵다. 

  대략적으로 알려진 방법에 따르면 어절 단위로 분석하거나 통계적인 방법으로 형태소를 추측하거나 어절내 문자를 하나씩 잘라가면서 분석하는 것으로 보인다. 


아래 문장을 분석해 보자. 

저기 하늘을 나는 새를 보아라.


우리나라 형태소는 어절단위를 벗어나지 못하므로 우선 어절별로 나눠어서 생각해야 한다.

저기  :  대명사이다. 대명사로 알 수 이유는 많이 들어본 단어이기 때문이다. 컴퓨터로 이 것을 처리하면 뭔가 사전이 필요할 것이라고 추출할 수 있다. 형태소 품사별 사전이 필요할 것이다.


하늘을 :  이 문장은 명사 + (목적격)조사가 결합된 형태라고 생각할 수 있다. 이 것을 이렇게 분석한 이유는 하늘을 이라는 어절을 통으로 많이 들어 봤기 때문이라. 이렇게 생각한다면 어절 단위로 사전이 있고, 분석된 데이터가 저장된 기분석 사전이 있다고 생각할 수 있다.

기분석사전은  하늘을  =>  하늘/NNG+의/JKO 이런식으로 데이터를 가지고 있을 것이다.


 경우에 따라서는 저런 기분석사전이 없거나 그런 구조가 없는 분석기도 있을 것이다.

이런 경우,  하/늘을  하늘으/ㄹ   하늘/을  하늘을 이런식으로 때로는 음절단위로 자소단위로 쪼개서 형태소 사전에서 검색을 해서 존재해야 하는지 확인 해야 한다.


나는 :  이 단어는 어절만으로 봤을때는 날/VV+는/ETD( 날다와 관형형 전성 어미 는)으로 분석하거나 나/NP+는/JX ( 나,너 할 때의 대명사 너는 할 떄의 는과 같은 보조사)

 경우에 따라서는 2가지 case 에 대해서 분석되는 경우도 있을 것이다.

 나는 이 말은  하늘을 날아가는 이라는 의미와 저는 이라는 말로 중의적으로 해석 될 수 있다. 이 경우 앞의 어절과 다음 어절을 통해 날/VV+는/ETD 로 해석 할 수 있다. 이 경우 앞/뒤 어절의 형태소를 통해 해석하려는 어절의 형태소를 통계적으로 분석 할 수 있다. 

앞 어절에 명사+목적격 조사가 나온 후에 서술어 어절이 와야 한다. 물론 서술어 어절앞에 관형어가 올 수 있기 때문에 관형형 전성어미가 오는게 맞다. (이게 이해가 안된다면 문장성분에 대한 공부가 필요하다. https://ko.wikipedia.org/wiki/%ED%95%9C%EA%B5%AD%EC%96%B4%EC%9D%98_%EB%AC%B8%EC%9E%A5_%EC%84%B1%EB%B6%84 을 참고할 것)



대략적으로 어절분리->어절내에서 기분석사전을 통한 분석->기분석사전 실패시 음절 또는 자소 분리후 사전 검색->완전히 실패시 통계적으로 형태소 추정 이런 식으로 만들 수 있을 것 같다. 그리고 속도를 높이기 위해 기분석 사전도 어절단위 뿐만 아니라, 어절내 일 부분만으로도 기분석사전을 만드는 경우도 있는 것 같다. 


 매우 간단하게 적었지만, 한국어가 받침에 따라서 조사가 은/는,  이/가 되는 경우도 있고, 불규칙 활용이 되는 경우도 많고, 명사같은 합성어도 매우 많다. 그리고 뛰어쓰기에 자유도도 높은 편이고, 신조어도 끊임없이 추가된다. 이런 것들을 다 처리 하려면 매우 복잡할 것이다. 






" 중학교때 국어 문법을 배우면서 5언 9품사를 배우게 된다. 

체언 : 명사, 대명사, 수사

용언 : 동사, 형용사

수식언 : 관형사, 부사

독립언 : 감탄사

관계언 : 조사

이렇게 배우게 된다. 보통 이 문법을 학교문법이라고 한다. 

기본적인 정보는 위키피디아에서 확인 가능하다. 
(https://ko.wikipedia.org/wiki/%ED%95%9C%EA%B5%AD%EC%96%B4_%EB%AC%B8%EB%B2%95 )

추가적으로 나무위키( https://namu.wiki/w/%ED%95%9C%EA%B5%AD%EC%96%B4%EC%9D%98%205%EC%96%B8%209%ED%92%88%EC%82%AC ) 도 도움이 된다. 


 실제 기계적인 분석을 하게된다면 더 많은 분류가 필요하다. 형태소 분석기 마다 다른 정책을 사용하고 있다. 파이썬 형태소 분석기 konlpy 를 보면(Konlpy 는 여러 형태소 분석기를 파이썬으로 이용할 수 있도록 만든 wrapper 에 가깝다.) 형태소 분석기별 형태소 분류를 표시해두었다. 

 아래 링크에서 확인 할 수 있다.

https://docs.google.com/spreadsheets/d/1OGAjUvalBuX-oZvZ_-9tEfYD2gQe7hTGsgUpiiBSXI8/edit#gid=0  



현재 Hannanum (ntags=69)  가 가장 상세히 되어 있다. 


명사는 일반적으로 사물, 사람, 장소의 이름을 나타내는 품사이다. ( https://ko.wikipedia.org/wiki/%EB%AA%85%EC%82%AC_(%ED%92%88%EC%82%AC) ). 이 명사를 서술성 명사(술어명사)와 비서술성명사(비술어명사)로 나눌 수 있다. (물론 이 방법론은 명사를 분류하는 여러 방법론 중의 하나일 뿐이다. 추상명사와 보통명사로도 나눌 수 있으나 다른 어절과의 관계에서 무너가 차이가 있어서 이렇게 하는 것으로 보인다. ) 

서술성 명사는 그 자체가 뭔가 동작성이나 상태성을 가지고 있는 경우이다. 보통  ~하다와 붙어서 동사/형용사가 되는 명사이다. 동사가 되었을 때는 동작성 명사이고, 형용사가 되었을 때는 상태성명사이다. 동작성명사에는 일, 결혼 같은 것이 명사다. 상태성명사 대등, 한산 같은 명사이다.

 동작성명사 일, 결혼 같은 경우 ~하다를 붙이면 동사가 된다. 동작성명사의 경우 대등하다, 한산하다 같이 어떠한 상태를 설명하는 말이기 때문에 형용사이다. 

 비서술성명사의 사과, 책생, 걸상 이런 것들이다. 이런 말들은 하다를 붙여서 용언은 만들지 못한다. (단, 밥 같은 경우, 밥하다라는 말이 되긴 하는데, 이건 이 명사 자체로 동작성이나 상태성이 아니기 때문에 비서술명사로 본다. ) 

 (여기서 의문이 하나 생기는데, 그럼 야구,  축구 이런 것은 어떤 명사인지 모르겠다. 세종프로젝트의 상세체언 목록에는 "추상적대상"으로 해두었기 때문에 비서술성명사(비술어명사)로 취급하고 있다. 세종프로젝트의 상세체언에서는 구체물, 집단, 장소, 추상적대상으로는 비서술성명사로 보고 있다.   연구보고서【2007년】 21세기 세종계획 전자사전 개발 참고함.  ) 

 비서술성-직위 명사에 대한 설명은 찾기 어려우나 "김철수 과장" 이런 단어에 대해 과장 같은 말을 직위라고 하는 것으로 추정된다. (사실 잘 모르겠으나 나도 저런 단어에 대해 고민 한 적이 있는지라, 왠지 이런 의미 같다.)


단위성 의존명사는 위키피디아에 표시된 수분류사(https://ko.wikipedia.org/wiki/%EC%88%98%EB%B6%84%EB%A5%98%EC%82%AC) 를 말하는 것으로 보인다.



형용사의 경우 뜻에 따라 성상 형용사와 지시 형용사로 나눌 수 있다.( https://ko.wikipedia.org/wiki/%ED%95%9C%EA%B5%AD%EC%96%B4_%EB%AC%B8%EB%B2%95#.ED.98.95.EC.9A.A9.EC.82.AC ). 성상 형용사는 사물의 상태나 성질을 나타내고, 지시 대명사는 문장 안에서 지시성을 지닌다고 한다. 사실 지시 형용사가 뭔지 잘 와 닿지 않는다. 그냥 성상 형용사가 아닌것이 지시 형용사라고 생각하자. 


형태소 중에 긍정 지정사와 부정 지정사가 있다. 두 가지다 서술격 조사 ~이다. ~아니라를 의미한다. ~이다는 긍정 지정사, ~아니다는 부정 지정사이다. 어떤 형태소 분석기는 서술격 조사로 따로 사용하는 경우도 있다. 




형태소로 분류해둔 것이 좀 많아 보일 수는 있다. 이렇게 좀 상세히 분류해 두면 통계적으로 제약조건에 따라서 분석하기 쉽다는 장점이 있다. 예를 들어 의존명사를 비단위성 의존명사와 비단위성 의존명사로 구분해 두면 

사과 2개 주세요.

라는 말을 분석 할 때,  2개 라는 어절을 분석할 때,  숫자 다음의 개이기 때문에 저 개는 멍멍 짓는 개가 아니라고 알 수 있다. 숫자다음에는 단위성 의존명사가 오는 것이 자연스럽지만  숫자 다음에 비서술성 명사가 오는 것은 조금 부자연스럽다는 것을 알 수 있다. 이런 패턴을 바탕으로 확률사전에서 형태소를 기계적으로 분리하기 유리해진다. 



위 글은 잠깐 공부한 것을 정리한 글인지라 오류가 있을 수 있습니다.