먼저 저장된 txt 파일은 아래처럼 구성된다.

내보내기 된 카카오톡 오픈 채팅방.txt 내용 1
내보내기 된 카카오톡 오픈 채팅방.txt 내용 2

위 설명에 맞춘 정제 포인트는 아래와 같다.

  • 기본 헤더 제거
  • 일별 구분
  • 첫 입장 메시지 제거
  • 작성자/기준시간/작성 메시지 분리하기
  • 입장, 퇴장 확인하기

 

1. 정제 전 채팅 내용 데이터(.txt) 읽기

input_file_name = 'kakao_chat.txt'  # 텍스트 데이터 경로/이름 입력
with open(input_file_name, "r", encoding="utf-8-sig") as input_file:
    for line in input_file:
        line = line.strip()
        print(line)
데이터분석 QnA&네트워킹 님과 카카오톡 대화
저장한 날짜 : 2020-11-14 14:56:45

--------------- 2020년 11월 1일 일요일 ---------------
hk님이 들어왔습니다.운영정책을 위반한 메시지로 신고 접수 시 카카오톡 이용에 제한이 있을 수 있습니다.
[팬다 Jr.] [오전 10:27] 안녕하세요, 반갑습니다. 데분방입니다. 데분데분
포도님이 들어왔습니다.
[팬다 Jr.] [오전 11:16] 안녕하세요, 반갑습니다. 데분방입니다. 데분데분
[포도] [오전 11:16] 안녕하세요!
모모님이 들어왔습니다.

위 블록은 코드와 결과 일부 담고 있다. 그다음에 우선적으로 해야 하는 것은 기본 헤더 제거와 일자별 내용을 묶는 것이다.

2. 기본 헤더 제외한 일자별 내용 리스트로 담기

date_sep = '일 ---------------'
context_list, tmp_context_list = [], []
with open(input_file_name, "r", encoding="utf-8-sig") as input_file:
    index = 0
    for line in input_file:
        line = line.strip()
        start_index = 4
        if index == start_index:
            tmp_context_list.append(line)
        else:
            if line.endswith(date_sep):
                context_list.append(tmp_context_list)
                tmp_context_list = []
            tmp_context_list.append(line)
        index += 1
print("주어진 텍스트 파일 {}의 일자별 context는 {}건입니다.".format(input_file_name, len(context_list)))
주어진 텍스트 파일 kakao_chat.txt의 일자별 context는 11건입니다.

context_list의 내용은 아래와 같다. (일부)

[['데이터분석 QnA&네트워킹 님과 카카오톡 대화', '저장한 날짜 : 2020-11-14 14:56:45', ''],
 ['--------------- 2020년 11월 1일 일요일 ---------------',
  'hk님이 들어왔습니다.운영정책을 위반한 메시지로 신고 접수 시 카카오톡 이용에 제한이 있을 수 있습니다.',
  '[팬다 Jr.] [오전 10:27] 안녕하세요, 반갑습니다. 데분방입니다. 데분데분',
  '포도님이 들어왔습니다.',
  '[팬다 Jr.] [오전 11:16] 안녕하세요, 반갑습니다. 데분방입니다. 데분데분',
  '[포도] [오전 11:16] 안녕하세요!', (중략)

1번에 비해 다소 어려워진 것 같지만 때에 따라 어려워졌을 수도 있다... ㄴㅇㄱ

전반적인 코드 아래처럼 구성되어 있다.

  • 전체 내용을 담을 리스트, 일자별 내용을 담을 리스트 (각 context_list, tmp_context_list)
  • 일자별 구분을 위해 사용되는 date_sep과 .endwith()
  • 파일을 한 줄씩 읽는 for문, 그 한 줄에 대한 index

기본 헤더는 index 값이 0 ~ 3에 해당하므로 기준인을 index가 4로 시작된다. 그런데 기준일이 계속 늘어나기 때문에 기준일의 패턴인 [일 ---------------]을 활용하여 기준일 별 발생한 채팅 내용을 묶어줘야 한다. 그런데 첫 입장 메시지가 거슬리니 다음에서 첫 입장 메시지를 제거해본다. (단, 텍스트에 없는 경우가 있을 수 있다. 따라서 이 경우 다음을 넘어가도 된다.)

 3. 첫 입장 메시지 제거하기

if ~ continue를 활용하여 첫 입장 메시지, 즉 본문에 pass_msg에 해당하면 넘어가도록 한다.
(pass와는 달리 continue는 if ~ continue 이후 코드를 실행하지 않게 해 준다.)

 

date_sep = '일 ---------------'
pass_msg = '운영정책을 위반한 메시지로 신고 접수 시 카카오톡 이용에 제한이 있을 수 있습니다'
context_list, tmp_contenxt_list = [], []
with open(input_file_name, "r", encoding="utf-8-sig") as input_file:
    index = 0
    for line in input_file:
        line = line.strip()
        # 새로 추가한 부분 시작
        if pass_msg in line:
          continue 
        # 새로 추가한 부분 끝
        start_index = 4
        if index == start_index:
            tmp_contenxt_list.append(line)
        else:
            if line.endswith(date_sep):
                context_list.append(tmp_contenxt_list)
                tmp_contenxt_list = []
            tmp_contenxt_list.append(line)
        index += 1
print("주어진 텍스트 파일 {}의 일자별 context는 {}건입니다.".format(input_file_name, len(context_list)))
[['데이터분석 QnA&네트워킹 님과 카카오톡 대화', '저장한 날짜 : 2020-11-14 14:56:45', ''],
 ['--------------- 2020년 11월 1일 일요일 ---------------',
  '[팬다 Jr.] [오전 10:27] 안녕하세요, 반갑습니다. 데분방입니다. 데분데분',
  '포도님이 들어왔습니다.',
  '[팬다 Jr.] [오전 11:16] 안녕하세요, 반갑습니다. 데분방입니다. 데분데분',
  '[포도] [오전 11:16] 안녕하세요!', (중략)

 

어느 정도 구조화 가능한 데이터를 확보했으므로 이제 본격적으로 다음 편에서 pandas를 활용해 데이터 정제 과정을 공유하고자 한다.

항상 konlpy를 설치할 때면 오류가 난다..... 오늘은 새로 만난 오류이다.. 띠요옹... 먼저, Anaconda에서 가상 환경을 생성하였고 생성한 가상 환경에 konlpy 설치 시도를 하였다.

(gensim_packs) C:\Users\LG>pip install konlpy

그리고 발생한 오류. 해시값이 일치하지 않는다고....

Collecting konlpy
  Downloading konlpy-0.5.2-py2.py3-none-any.whl (19.4 MB)
     |████████████████████████████████| 19.4 MB 819 kB/s eta 0:00:01
ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.
    konlpy from https://files.pythonhosted.org/packages/85/0e/f385566fec837c0b83f216b2da65db9997b35dd675e107752005b7d392b1/konlpy-0.5.2-py2.py3-none-any.whl#sha256=65ab33ad28fb072306e44128ff3f23b5771d97d6501fa995511834ba8dd2bd40:
        Expected sha256 65ab33ad28fb072306e44128ff3f23b5771d97d6501fa995511834ba8dd2bd40
             Got        47430be567ed6661ac89c05c43f6d4a6ad61b9f6cead197ba92e083af906dd83

해결법은 jpype1를 먼저 설치해주는 것이다. (설치 결과 생략)

(gensim_packs) C:\Users\LG>conda install -c conda-forge jpype1
Collecting package metadata (current_repodata.json): done
Solving environment: done

다시 konlpy를 설치해준다.

(gensim_packs) C:\Users\LG>pip install konlpy
Collecting konlpy
  Downloading konlpy-0.5.2-py2.py3-none-any.whl (19.4 MB)
     |████████████████████████████████| 19.4 MB 327 kB/s
Collecting tweepy>=3.7.0
  Downloading tweepy-3.8.0-py2.py3-none-any.whl (28 kB)
Collecting beautifulsoup4==4.6.0
  Downloading beautifulsoup4-4.6.0-py3-none-any.whl (86 kB)
     |████████████████████████████████| 86 kB 578 kB/s
Collecting colorama
  Downloading colorama-0.4.3-py2.py3-none-any.whl (15 kB)
Requirement already satisfied: JPype1>=0.7.0 in c:\users\lg\anaconda3\envs\gensim_packs\lib\site-packages (from konlpy) (0.7.5)
Requirement already satisfied: numpy>=1.6 in c:\users\lg\anaconda3\envs\gensim_packs\lib\site-packages (from konlpy) (1.18.5)
Collecting lxml>=4.1.0
  Downloading lxml-4.5.1-cp37-cp37m-win_amd64.whl (3.5 MB)
     |████████████████████████████████| 3.5 MB 386 kB/s
Requirement already satisfied: PySocks>=1.5.7 in c:\users\lg\anaconda3\envs\gensim_packs\lib\site-packages (from tweepy>=3.7.0->konlpy) (1.7.1)
Requirement already satisfied: requests>=2.11.1 in c:\users\lg\anaconda3\envs\gensim_packs\lib\site-packages (from tweepy>=3.7.0->konlpy) (2.24.0)
Collecting requests-oauthlib>=0.7.0
  Downloading requests_oauthlib-1.3.0-py2.py3-none-any.whl (23 kB)
Requirement already satisfied: six>=1.10.0 in c:\users\lg\anaconda3\envs\gensim_packs\lib\site-packages (from tweepy>=3.7.0->konlpy) (1.15.0)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\lg\anaconda3\envs\gensim_packs\lib\site-packages (from requests>=2.11.1->tweepy>=3.7.0->konlpy) (2020.6.20)
Requirement already satisfied: chardet<4,>=3.0.2 in c:\users\lg\anaconda3\envs\gensim_packs\lib\site-packages (from requests>=2.11.1->tweepy>=3.7.0->konlpy) (3.0.4)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\users\lg\anaconda3\envs\gensim_packs\lib\site-packages (from requests>=2.11.1->tweepy>=3.7.0->konlpy) (1.25.9)
Requirement already satisfied: idna<3,>=2.5 in c:\users\lg\anaconda3\envs\gensim_packs\lib\site-packages (from requests>=2.11.1->tweepy>=3.7.0->konlpy) (2.10)
Collecting oauthlib>=3.0.0
  Downloading oauthlib-3.1.0-py2.py3-none-any.whl (147 kB)
     |████████████████████████████████| 147 kB 409 kB/s
Installing collected packages: oauthlib, requests-oauthlib, tweepy, beautifulsoup4, colorama, lxml, konlpy
Successfully installed beautifulsoup4-4.6.0 colorama-0.4.3 konlpy-0.5.2 lxml-4.5.1 oauthlib-3.1.0 requests-oauthlib-1.3.0 tweepy-3.8.0

 

마지막으로 잘 설치가 되었는지 확인하기!

(gensim_packs) C:\Users\LG>python
Python 3.7.7 (default, May  6 2020, 11:45:54) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from konlpy.tag import Kkma
>>> from konlpy.utils import pprint
>>> kkma = Kkma()
>>> pprint(kkma.sentences(u'네, 안녕하세요. 반갑습니다.'))
['네, 안녕하세요.', '반갑습니다.']

'Python > 기본' 카테고리의 다른 글

[ERROR] Microsoft Visual C++ 14.0 is required.  (0) 2020.05.30

1) HOME https://www.tutorialspoint.com/django/index.htm

Django는 웹 어플리케이션을 구현을 위한 웹 개발 프레임워크로 반복적인 개발 과정을 없애고, 시간을 줄이는데 도움을 준다. 이 튜토리얼은 디장고를 사용하여 양질의 웹 어플리케이션을 개발하는 방법을 배우기 위한 개발자를 위한 것이다.그렇지만, 이 튜토리얼을 학습하기 전에 선행요건이 있습니다. 바로,  제어 구조(Control Structure), 자료 구조(Data Structure), 변수, 클래스, 객체 등의 절차/객체지향 프로그래밍 기초를 알고 이해하고 있어야 합니다.

2) BASICS https://www.tutorialspoint.com/django/django_basics.htm

Django는 빠른 개발과 깔끔하고 실용적인 디자인을 돕는 높은 수준의 파이썬 웹 프레임워크이다. 또한 적은 코드로 빠르게 더 나은 웹 앱을 구축하는 것을 쉽게 만든다.

  • Django는 Django Software Foundation의 등록 상표이며 BSD 라이센스에 의거하여 라이센스가 부여됩니다.

Django는 5개의 디자인 철학(Design Philosophies)을 따른다.

  • 느슨한 결합 (Loosely Coupled): Django는 스택의 각 요소를 다른 요소와의 독립적으로 구성함을 지향한다. (Django aims to make each element of its stack independent of the others.)
  • 적은 코딩 (Less Coding): 적은 코드는 빠른 개발로 이루어진다.
  • 반복지양 (Don't Repeat Yourself - DTY): 모든 것은 계속 반복하는 것이 아니고 정확히 한 곳에서만 개발되어야 합니다.
  • 빠른 개발 (Fast Development): Django 철학은 초고속(Hyper - Fast) 개발을 쉽게하기 위한 모든 것이다.
  • 깔끔한 설계 (Clean Design): Django는 정확히(Strictly) 깔끔한 코드 유지하고 최선의 웹 개발 업무를 따르기 쉽게 한다.

Django 이점

  • 객체-관계 매핑 지원 (Object-Relational Mapping, ORM Support): Django는 데이터 모델과 데이터베이스 엔진 사이를 잇는 역할을 하고,  MySQL, Oracle, Postgres 등의 규모가 큰 데이터베이스 시스템도 지원한다. Django는 또한 Django-nonerl fork를 통해 NoSQL 데이터베이스를 지원한다. 현재는 MongoDB, Google App Engine만 지원한다.
  • 다국어 지원 (Multilingual Support): Django는 국제 시스템 (internationalization system)을 통해 다국어 웹사이트를 지원한다. 그래서 웹 사이트를 개발할 때, 다양한 언어로 구성할 수 있다.
  • 프레임워크 지원 (Framework Support): Django는 Ajax, Rss, Cashing, 다른 다양한 프레임워크에 대한 지원 기능이 내장되어 있다.
  • 관리 GUI (Administration GUI): Django는 관리 기능을 위한 사용자 화면이 제공된다.
  • 개발 환경 (Development Environment): Django는 가벼운(lightweight) 웹 서버를 제공하여 종단 간(End-to-End) 어플리케이션 개발 및 테스트를 용이하게 한다.

참고: 디자인 철학 -  https://django-doc-pootle-test.readthedocs.io/en/latest/misc/design-philosophies.html

3) OVERVIEW https://www.tutorialspoint.com/django/django_overview.htm

Django는 MVC 패턴을 지원한다. 먼저, Model-View-Controller (MVC)가 무엇인지 알아보고, Model-View-Template (MVT) 패턴에 대한 Django의 특이성(specificity)을 살펴본다.

  • MVC 패턴: UI를 제공하는 웹이나 데스크톱 어플리케이션에 대해 논의할 때, 대부분 MVC 아키텍처를 말한다. 이름처럼 MVC 패턴은 3개의 컴포넌트(Model, View, Controller)를 기반으로 한다.
  • Django MVC - MVT 패턴: MVT (Model-View-Template)는 MVC와 약간 다르다. 사실 두 패턴의 주요 차이점은 Django 자체가 컨트롤러 부분 (Model과 View 간의 상호 작용을 제어하는 소프트웨어 코드)을 처리해 템플릿을 남긴다는 것이다. 템플릿은 Django Template Language (DTL)이 섞인 HTML 파일이다. 다음 그림은 MVT 패턴의 각 구성 요소가 서로 상호 작용해 사용자 요청을 처리하는 방법을 보여준다. 개발자는 Model, View, Template을 URL로 매핑만 하면 Django가 사용자에게 제공하는 마법을 부린다.

 

참고: MVC 패턴 - http://www.tutorialspoint.com/struts_2/basic_mvc_architecture.htm

 

Basic MVC Architecture

Basic MVC Architecture Advertisements Model View Controller or MVC as it is popularly called, is a software design pattern for developing web applications. A Model View Controller pattern is made up of the following three parts − Model − The lowest level o

www.tutorialspoint.com

 

'Python > Django' 카테고리의 다른 글

virtualenv 가상환경 사용하기  (0) 2020.05.30
Django 1일차  (0) 2019.07.06

+ Recent posts