펭찐이의 블로그

안녕하세요오오...

펭찐이의 블로그 자세히보기

찐따의 프로그래밍 독학/찐따의 파이썬 독학

찐따의 파이썬 독학 - 흔한 찐따의 블로그 자연어 처리 및 분석

펭찐 2022. 5. 31. 09:14
반응형

흔한 찐따의 블로그 자연어 처리 및 분석

분석을 위해 iamjjintta 라는 커스텀 패키지를 만든 후, 자연어 처리를 위한 라이브러리를 사용하여 필요한 함수들을 정의하였다.

from iamjjintta import blog
from iamjjintta import analyser

 

블로그에서 글 가져오기

블로그에 포스팅된 글을 모두 가져온 후, 말뭉치를 만든다.

posts = blog.get_blog_posts()

불러온 포스팅 개수는 다음과 같다.

len(posts) # 109

각각의 포스팅들을 모두 하나의 말뭉치로 만들어준다.

contents = [post.text for post in posts]
contents = ' '.join(contents)

 

품사 Tagging 및 분석

품사 태깅을 하여 명사를 추출한 후에 자연어 처리를 진행한다.

먼저, 전처리(Preprocessing)를 위해 정규식과 구두점(Stopword)을 사용한다.

regex = r'\b([가-힣]+)\b'
stopwords = analyser.load_stopwords()

 

꼬꼬마(Kkma) 형태소 분석기

먼저, 형태소 분석기로 Kkma 를 사용하여 품사 태깅을 하였다.

ma = 'Kkma'
pos = analyser.extract_pos(
    contents,
    ma=ma,
    stopwords=stopwords,
    regex=regex
)

Kkma 에 정의된 각 품사의 태그셋 중 명사 태그의 종류는 다음과 같다.

  • NN : 명사
  • NNB : 일반 의존 명사
  • NNG : 보통명사
  • NNM : 단위 의존 명사
  • NNP : 고유명사
  • NP : 대명사
tagset = (
    'NN',
    'NNB',
    'NNG',
    'NNM',
    'NNP',
    'NP',
)

태그셋을 기준으로 품사 체크를 하며 명사를 추출한다.

nouns = [noun for noun, tag in pos if tag in tagset]
words = analyser.term_freq(nouns, n=100)
kkma_words = dict(words)

 

트위터(Okt) 형태소 분석기

트위터 형태소 분석기는 인터넷에서 자주 사용되는 은어나 비속어, 해쉬태그를 분류하는데 탁월한 성능을 보인다.

ma = 'Twitter'
pos = analyser.extract_pos(
    contents,
    ma=ma,
    stopwords=stopwords,
    regex=regex
)

트위터 형태소 분석기의 명사 태그는 Noun 으로 분류된다.

tagset = 'Noun'
nouns = [noun for noun, tag in pos if tag == tagset]
words = analyser.term_freq(nouns, n=100)
twitter_words = dict(words)

 

워드 클라우드

분류된 명사들을 기준으로 워드 클라우드를 생성하여 표현한다.

 

Kkma

kkma_wc = analyser.generate_wordcloud(
    kkma_words,
    font_path='NanumSquare.ttf',
    background_color='white',
    width=640,
    height=480
)
kkma_wc.to_image()

Okt

twitter_wc = analyser.generate_wordcloud(
    twitter_words,
    font_path='NanumSquare.ttf',
    background_color='white',
    width=640,
    height=480
)
twitter_wc.to_image()

결론

위의 워드 클라우드를 통해 간단히 분석해본 결과, 나는 추상적이고 철학적인 주제를 많이 다룬다는 것을 알 수 있었다.

특히 사건(Event)과 관련된 키워드와 시제(Tense)가 많이 나오는 것으로 미루어보았을 때,

나는 어떠한 현상에 대해 시간 개념을 부여하며 설명하려는 특징이 있다는 것을 알 수 있었다.

 

또한, 분석 결과가 나의 예상과는 다른 결과가 나와서 조금 의외였다.

처음 예상했을 당시에는 '찐따' 혹은 '생각'이라는 명사가 많이 나올 줄 알았다.

이에 빈도수(Frequency)를 체크해본 결과, 의외로 낮게 나왔다는 것을 알 수 있었다.

 

이번에 따로 만들어 둔 패키지를 재사용해볼 생각이다.

다음에는 기계학습을 통해서 나의 블로그의 글들을 토대로 스스로 감성 분석을 해볼 예정이다.

 

번외 - 감성 분석 후기

뭐, 예상은 하고 있었지만 데이터셋이 별로 없어서 그런지 생각보다 성능이 좋지 않았다.

미리 정형화시켜놓은 영문 데이터셋은 많지만, 한국어 데이터셋은 많지 않다는 것이 크게 작용했다.

그래서 뉴스 데이터셋이나 평점 리뷰 데이터셋을 사용해서 학습을 시켜보았으나,

역시나 정확률, 그러니까 재현율이 별로 좋게 나오지 않았다.

따라서 성능 개선을 위해서는 굉장히 많은 데이터셋이 필요하다.

 

반응형