전에 형태소 분석기를 만드는 과정이 어절분리->어절내에서 기분석사전을 통한 분석->기분석사전 실패시 음절 또는 자소 분리후 사전 검색->완전히 실패시 통계적으로 형태소 추정이라고 했다.

 어절내에서 기분석사전 실패시 음절 또는 자소 분리후 사전 검색에서 따로 규칙을 생각하지 않고 무작정 분석하게 된다면 속도로 느린 뿐만아니라 기분석 사전에 없는 경우, 대략적인 형태소 추정도 불가능하다. 이를 위해 어절이 만들어지는 형태소 규칙을 잘 이용할 필요가 있다. 
 

 국립국어원 언어정보나눔터(https://ithub.korean.go.kr)에서 제공하는 문서중에 형태소 분석의 이해라는 문서를 보면 여기에 대한 정보가 있다. 예가 없는 경우도 있는데 이예를 보충해서 추가 했다.(내가 추가한 예의 경우 틀릴 수도 있다는 점을 감안하기 바란다.) 


어절

체언(N,PN,NM,XN,CN,UN,AS,HJ,ET) 하늘

체언+조사 하늘이(하늘+이)

체언+용언화 접미사+어미 공부하는(공부+하+는)

체언+용언화 접미사 + "ㅁ/기"+조사 학생이기를(학생+이+기+를)

체언+용언화 접미사+"아/어"+보조용언+어미 가공되어진다(가공+되+어+지+ㄴ다)

체언+"에서/부터/에서부터"+"이"+어미 집에서부터이다(집+에서부터+이+다)

용언+어미 가고(가+고)

용언+"ㅁ/기"+조사 배고픔을(배고프+ㅁ+을)

용언+"ㅁ/기"+이+어미 배고픔이다(배고프+ㅁ+이+다)

용언+"아/어"+보조용언+어미 죽어가고있다(죽+어+가고+있다[있+다])

용언+"아/어"+보조용언+"ㅁ/기"+조사 죽어감에(죽+어+가+ㅁ+에)

단일어(부사,관형사,감탄사) 빨리

부사+조사 빨리도(빨리+도)

체언+동사+어미 밥먹다(밥+먹+다)


이렇게 되어 있다.  여기서 어미는 일반어미와 선어말어미와 결합될 수도 있다. 

체언은 명사, 대명사, 수사, 의존명사, 접두사,  체언접미사 등을 포함한다.

용언화 접미사는 서술격 조사 "이다"도 포함되어 있다고 한다.


해당 문서 설명이 부족한 부분이 있는데 용언화 접미사는 형용사 파생 접미사 + 동사 파생 접미사를 포함한 것으로 보인다.


이를 정리해 보면

1. 체언을 포함한 단일어

2. 조사로 끝나는 경우

체언+조사 체언+용언화 접미사 + "ㅁ/기"+조사 용언+"ㅁ/기"+조사 용언+"아/어"+보조용언+"ㅁ/기"+조사 부사+조사



3. 어미로 끝나는 경우가 있다.

체언+용언화 접미사+어미 체언+용언화 접미사+"아/어"+보조용언+어미 체언+"에서/부터/에서부터"+"이"+어미 용언+어미 용언+"ㅁ/기"+이+어미 용언+"아/어"+보조용언+어미 체언+동사+어미


여기서 조금 조심해야 하는 부분은 어미가 기존 용언과 합쳐져서 나올 수 있다.

예를 들어 너 학교에 가? 에서 가는 가/VV + 아/E 가 합쳐진 어절로 볼 수 있다.

가아 라는 단어가 축약된 것으로 볼 수 있다. 이 점은 조금 조심이 필요할 것 같다.


조사의 경우, 받침으로 결합하는 경우에만 생각하면 되나 용언+어미의 경우, 글자 그대로 결합하지 않고 어간,어미가 변경되는 불규칙 활용되는 경우가 있다. 이 경우도 꼭 고려가 필

요하다.

추가 : 국립국어원 언어정보나눔터(https://ithub.korean.go.kr/)에서 제공하는 21세기 세종계획 말뭉치를 분석해보면 위의 case 가에서 조금씩 벗어나는 case 가 있는 것 같다. 해당 case 에 대해 정리하면 추가하도록 하겠다.


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

 다행히 국립국어원 언어정보나눔터(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 을 참고할 것)



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


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