상세 컨텐츠

본문 제목

영어 동사 원형 복원기(English Verb Lemmatizer)

프로그래밍

by ∫2tdt=t²+c 2017. 9. 26. 02:26

본문

최근 전산 영어학 관련 업무를 하다보니 어간 추출(Stemming)이나 원형 복원(Lemmatization)을 할 일이 많습니다. 이미 이쪽 분야는 많이 연구되어서 쉽게 사용할 수 있는 자바 라이브러리(LingPipe, Stanford Core NLP, OpenNLP 등등)가 널려 있습니다. 문제는 제가 필요한 건 오직 영어 동사의 원형을 복원하는 작업인데, 대부분의 라이브러리에서는 Lemmatizer를 단독으로 제공하지 않고, Stemmer, POS Tagger 등과 함께 제공한다는 것이었지요. 용량이 작은 서버에 올려야 했기에 이런 추석종합선물세트 같은 라이브러리 패키지를 사용하기에는 어려웠습니다. 그래서 동사만 원형복원하는 코드를 간단하게 작성해봤습니다. (다행히도 영어 동사의 굴절 법칙은 아주아주 단순합니다.)


다들 잘 아시겠지만 굳이 다시 정리하자면

  1. 3인칭 현재 단수형은 -es를 붙인다. 과거형은 -ed를 붙인다. 현재분사는 -ing를 붙인다. 과거분사는 대체로 과거형과 같다.
  2. 만약 동사가 e로 끝날 경우 e를 떼고 붙인다.
  3. 동사가 (자음)y로 끝날 경우, -es, -ed를 붙일때 y->i로 바꾼다
  4. 동사가 s, z, sh, ch, th, x가 아닌 자음으로 끝날때 3인칭 현재 단수형은 -s를 붙인다.
  5. 동사가 단자음으로 끝날경우 -ed, -ing를 붙일때 단자음을 반복한다.

지극히 단순한 규칙이지만... 문제는 수많은 불규칙이 있다는 것이죠. 불규칙 목록을 정리하자면 다음과 같습니다.
(이 목록은 Open American National Corpus 코퍼스를 분석하여 자동 추출했습니다)
목록이 긴 관계로 접어두었습니다.



따라서 영어 동사를 원형 복원하는 작업은 먼저 불규칙 목록에서 일치하는 게 있는 경우 해당 동사를 반환하고, 그렇지 않은 경우는 규칙에 따라 복원해 가면서 동사 목록에서 일치하는게 있는지 확인하면 되겠습니다. 간단하죠?




함수 부분은 이렇게 되겠습니다. 간단하죠? 불규칙 목록을 파일에서 읽어오도록 하면 좋겠지만, java 파일 하나로 끝내고 싶었던 관계로 데이터를 모두 코드에 넣어보았습니다. 함부로 열지 마세요! 무지막지하게 깁니다. ^^



이렇게 가볍게 영어 동사 원형 복원기를 만들어서 사용한 결과 용량 작은 서버에서 아주 잘 돌아가서 서버랑 레마타이저는 행복하게 오래오래 살았답니다...!


관련글 더보기

댓글 영역