---
# System prepended metadata

title: 형태소 및 품사 빈도 분석

---

# 형태소 및 품사 빈도 분석
- 작성일: 2021년 6월 25일(금)
- 작성자: jino

## 목차
[TOC]

## 프로그램 동작 방식
- 형태소 및 품사 빈도 분석 프로그램
    1. 명령행 인자로 들어온 research, essay 정보 파싱하여 db에 삽입
        1-1. tbl_research 테이블에 데이터 삽입
        1-2. tbl_essay 테이블에 입력할 데이터 삽입
    2. 텍스트 파일을 열어 형태소 분석
        2-1. Out 파일 출력
    3. out 파일을 읽어 pos 테이블에 품사 빈도 저장
    4. out 파일의 분석 된 형태소와 tbl_pysdic 테이블과 비교하여, tbl_psypos_counting 테이블에 빈도 저장
    5. 저장된 tbl_pos_counting와 tbl_psypos_counting의 빈도 csv 파일로 저장

- psydic 생성 프로그램
    1. 엑셀 파일 입력
    2. 엑셀 파일을 읽어 psydic 테이블에 입력

## 사전준비
1. MariaDB 도커로 설치
    - 도커 설치
        - https://www.docker.com/get-started 에서 도커 다운로드 및 설치
    - 도커로 MariaDB 및 DBeaver 설치
        - https://firework-ham.tistory.com/105 보고 따라하기
2. database 생성
- DBeaver로 아래 sql 실행
    ```
    CREATE DATABASE pos_analysis DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    ```
2. MariaDB 테이블 생성
    - DBeaver로 아래 sql 하나 하나 실행
    ![](https://i.imgur.com/3KHjBb9.jpg)
    ```
    use pos_analysis;

    CREATE TABLE tbl_research(
        research_name VARCHAR(100) NOT NULL PRIMARY KEY,
        research_date DATETIME
    );
    ```
    
    ```
    use pos_analysis;
    
    CREATE TABLE tbl_essay(
        essay_name VARCHAR(100) NOT NULL PRIMARY KEY,
        file_name VARCHAR(100),
        essay_memo VARCHAR(900),
        essay_author VARCHAR(50),
        essay_from VARCHAR(100),
        essay_type VARCHAR(100),
        research_name VARCHAR(100) NOT NULL,
        FOREIGN KEY (research_name) REFERENCES tbl_research(research_name)
    );
    ```

    ```
    use pos_analysis;
    
    CREATE TABLE tbl_pos_counting(
        tag VARCHAR(300) NOT NULL,
        count INT NOT NULL,
        essay_name VARCHAR(100) NOT NULL,
        PRIMARY KEY(tag, count, essay_name),
        FOREIGN KEY (essay_name) REFERENCES tbl_essay(essay_name)
    );
    ```

    ```
    use pos_analysis;
    
    CREATE TABLE tbl_psypos_counting(
        tag VARCHAR(300),
        count INT,
        essay_name VARCHAR(100) NOT NULL,
        PRIMARY KEY(tag, count, essay_name),
        FOREIGN KEY (essay_name) REFERENCES tbl_essay(essay_name)
    );
    ```

    ```
    use pos_analysis;
    
    CREATE TABLE tbl_psydic(
        word VARCHAR(300) NOT NULL,
        type VARCHAR(100) NOT NULL,
        PRIMARY KEY(word, type)
    );
    ```
3. python 라이브러리 설치
    - requirements.txt 이용하여 필요 라이브러리 설치
    ```
    pip3 install -r ./requirements.txt
    ```
4. tbl_psydic 생성
    - psydic.py 실행
    - psydic.py 실행 시 인자값
    ```
    --file_path : 엑셀 파일 위치 (필수)
    ```
    - tbl_psydic 생성 프로그램 실행 예시
    ```
    python3 psydic.py --file_path ./data/개발자전달용_샘플심리사전.xlsx
    ```
    - tbl_psydic 테이블에 정보가 생성됨.

## 형태소 및 품사 분석
- morph_analysis.py 실행
- morph_analysis.py 실행 시 인자값
    ```
    --file_path : 텍스트 파일 위치 (필수)
    --research_name : 리서치 명 (필수)
    --essay_name : 에세이 명 (필수)
~~~~
    --research_date : 리서치 날짜 (선택) ex) 2021-06-25 09:30:28, 2021-06-25
    --essay_author : 에세이 작성자 (선택)
    --essay_memo : 에세이 메모 (선택)
    --essay_from : 에세이 출처 (선택)
    --essay_type : 에세이 유형 (선택)
    ```
- 형태소 및 품사 빈도 분석 프로그램 실행 예시
    ```
    morph_analysis.py --file_path ./data/test2.txt --research_name=test1 --research_date=2021-06-25 --essay_name=test1
    ```
- 분석 결과는 DB와 result폴더에 생성됨.
