2018년 9월 10일 월요일

카카오스토리에 자주 등장하는 명사 빈도수

아래와 같이 카카오스토리에서  게시 시각, 제목 그리고 본문 글을 정리합니다글을 모으는 방법은  다른  블로그  카카오스토리 글 모으기’(https://blog.naver.com/yoojchul/221338440537)에 있습니다이 블로그에서는 모은 글을 가지고 어떤 명사가 빈출한지 알아 봅니다.


파이썬 프로그램에 이용된 한글 형태소 분석기는 꼬꼬마입니다꼬꼬마는  http://konlpy.org/ko/latest/ 에 사용법이 나오는데 명사만 추출할 수 있지만 카카오스토리에서 구한 글은 철학과 시사가 주 내용이라 꼬꼬마에 예약된 명사에 해당하지 않는 경우가 많을 것 같아 형태소 단위로 분해하고 눈으로 명사를 고르는 방법을 사용합니다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# -*- coding: utf-8 -*-
from konlpy.tag import Kkma

with open('mudbull.txt', encoding='utf8') as f:
    lines = f.readlines()

kkma = Kkma()
wordcount = {}
for line in lines:
    if not line == "\n":
        try:
            words = kkma.pos(line)
        except Exception as e:
            print(type(e))
            print(line)
        for w in words:
            if w[0] not in wordcount:
                wordcount[w[0]] = 1
            else:
                wordcount[w[0]] += 1
print("counting is finished")
    
f = open("counter2.txt", "w", encoding='utf8')
for k, v in sorted(wordcount.items(), key=lambda kv: kv[1], reverse=True):
    f.write(k+" "+ str(v)+"\n")
f.close()

라인 4에서 처리할 파일을 읽어 줄 단위로 저장합니다글 모음은 약 5MB 크기의 파일입니다.  라인 7에서 형태소 분리시에 사용할 kkma 초기화하고 라인 8에서는 단어별 빈도수를 저장할  dictionary 타입인 wordcount  초기화합니다처리할 단위인 마다  라인 920사이를 반복합니다. 라인 12에서 kkma.pos() 호출로 형태소를 분리하는데 이것을 출력해보면 형태소와 함께 품사가 다음과 같습니다.

(‘2018-08’, ‘OL’), (‘-17’, ‘NR’), (‘T’, ‘OL’), (‘22’, ‘NR’), (‘:’, ‘SP’), (‘10’, ‘NR’), (‘31’, ‘NR’), (‘Z’, ‘0L’), (‘푸코’, ‘UN’), (‘’, ‘JKG’), (‘#’, ‘SW’), (‘계보학’, ‘NNG’), (‘-‘, ‘SP’), (‘인종’, “NNG’), (‘주의’, ‘NNG’), (‘’, ‘XSN’), (‘담론’, ‘NNG’), (‘역사’, ‘NNG’) ....

품사는 사용하지 않고 형태소만 찾기 때문에 라인 17 20에서는 첫번째 요소 w[0]만 사용합니다형태소는 호출 중에 단어가 들어 있지 않은 빈줄을 만난다면NullPointerExceptionPyRaisable가 발생하기 때문에  exception처리를 위해 라인 13 이 필요합니다.   

나타나는 횟수가 많은 순으로 정렬해서 형태소와 빈도수를 함께 출력하는데 결과 파일이 counter2.txt입니다.   이들 중에 명사만  직접 손으로 추출해서 정리합니다.   최종 결과는   여기에 포함되어 있습니다.

댓글 없음:

댓글 쓰기