취향저격 - 형태소 분석기(2)

hsoh0423·2021년 3월 7일
2

취향저격 프로젝트

목록 보기
3/10
post-thumbnail

지난 포스터에서는 여러가지 형태소 분석기들의 성능과 전처리의 필요성에 대해서 포스터를 작성 했었다. 이번 포스터는 지난 포스터에서 설명한 형태소 분석기들 중 취향저격 프로젝트에서 사용한 형태소 분석기인 Okt 형태소 분석기에 대한 사용법을 작성하고자 한다.

(형태소 분석기의 성능에 대한 설명은 아래 링크에서 확인할 수 있습니다.)
취향저격 - 형태소 분석기(1)

Konlpy 설치

먼저 형태소 분석기를 사용하기 위해서는 Konlpy를 설치해야 사용 할 수 있다. 명령 프롬프트 창에서 아래와 같은 문장을 입력하면 설치할 수 있다.

pip install Konlpy

간혹 설치가 안될 경우가 있는데 그럴 경우 파이썬 버젼 문제일 수도 있다. 필자는 파이썬 3.7.x 버젼을 사용해서 프로젝트를 진행하였다.


위와 같이 성공 했다는 메세지가 뜨면 성공한 것이다. 이제 Okt 형태소 분석기를 사용해보자.

영화 데이터 수집

Okt를 사용하기에 앞서 이번 프로젝트를 위해 우리 팀은 영화와 관련된 자료를 데이터베이스에 모아놨다. 영화에 대한 데이터로는 밑과 같은 데이터들을 크롤링하여 데이터베이스에 저장 했다.

  1. 제목
  2. 줄거리
  3. 등장인물
  4. 명대사
  5. 리뷰

Okt를 사용하여 데이터 분석

이제 Okt를 사용하여 데이터를 분석할 것이다. Okt를 사용한 이유는 먼저 품사태그가 비교적 간단하여 조사나 어미, 명사 등 필요한 정보를 쉽게 활용할 수 있기 때문이다. 또한 stem이라는 기능을 사용하여 어간을 추출하여 더 정형화된 문장을 사용하기에 적합하다고 생각 했기 때문이다.

(품사 태그에 관한 표는 밑의 링크에서 확인 할 수 있습니다.)
형태소 분석기 - 품사 태그표

Okt를 사용하기 위한 준비

from konlpy.tag import Okt

먼저 Okt를 사용하기 위해서 konlpy.tag로부터 Okt를 import해준다.

Okt 실습

okt = Okt()

okt를 선언 해준다.

morphs

summary = 'Okt의 성능을 확인하기 위한 테스트 문장입니다.'
okt.morphs(summary):

summary에 문장을 넣고 okt.morphs(summary)를 출력한 결과 위와 같이 나왔다. morphs는 형태소 별로 분석해준다. 하지만 태그는 출력하지 않으므로 형태소별 어떤 품사인지를 알 수 없다.

pos

summary = 'Okt의 성능을 확인하기 위한 테스트 문장입니다.'
okt.pos(summary):

okt.pos를 해주면 위의 형태소 분석한 형태에 품사가 더해져서 나온다. 각 품사가 뜻하는 것은 품사 태그표에서 확인 할 수 있다.

형태소 분석기 - 품사 태그표

summary = 'Okt의 성능을 확인하기 위한 테스트 문장입니다.'
print(okt.pos(summary, stem =True))

stem = True라는 옵션을 주게 되면 위와 같이 '하기'를 '하다'로, '입니다'를 이다'로 바꾼 것을 볼 수 있다. 어간을 추출해서 출력해준 것이다. 위의 예제보다 더 직관적인 예제로 한 번 더 수행해보았다.

이해하기 쉽게 보면, 보통 동사를 원형으로 바꿔준 것을 볼 수 있다.

프로젝트에서 어간을 추출한 이유

이번 프로젝트는 위에서 적은 바와 같이 어간을 추출 했다. 이는 동일한 어간을 가진 단어들은 동의어로 취급하기 위해서였다. 한글은 교착어다. 이는 어근과 접사에 의해 단어의 기능이 결정되는 언어의 형태라는 것이다. 하지만 어근과 접사를 합친 의미를 가진 단어를 그 의미 그대로 학습 시키는 것은 아직 나의 수준에서는 해결할 수 없다 생각하여 어간이 같은 단어들은 동의어로 취급하고 진행했다.

nouns

summary = 'Okt의 성능을 확인하기 위한 테스트 문장입니다.'
print(okt.nouns(summary))

nouns는 명사를 추출해주는 것이다. 하지만 사진을 보면 '의'도 명사로 추출 된 것을 볼 수 있다. 이러한 현상이 생기는 이유는 '의'앞에 'Okt'라는 알파벳이 있어서 정확하게 분석을 못한 결과로 보인다. 이러한 결과가 생길 수 있기 때문에 여러가지를 사용해보고 필요한 것을 사용하도록 해야 한다.

profile
커피를 좋아하는 평범한 대학생

1개의 댓글

comment-user-thumbnail
2022년 9월 16일

글 감사합니다.
혹시
from eunjeon import Mecab과
from konlpy.tag import Mecab의 차이가 무엇인지 알 수 있나요?

답글 달기