{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "# **N-gram 의 활용**\n", "

\n", "## **1 N-gram 생성하기**" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'삼성전자\\n지속가능경영보고서\\n2018\\nINSPIRE\\nTHE WORLD\\nCREATE\\nTHE FUTURE\\nINSPIRE THE WORLD\\nABOUT THIS REPORT\\n보고서 개요\\n삼성전자는 경제·사회·환경적 가치창출의 통합적인 성과를 다양한 이해관계자에게\\n투명하게 소통하고자 매년 지속가능경영보고서를 발간하고 있으며,\\n2018년 열한 번째 지속가능경영보고서를 발간합니다.\\n보고기간\\n본 보고서는 2017년 1월 1일부터 2017년 12월 31일까지의 경제·사회·환경적 성과와 활동을\\n담고 있으며, 일부 정성 성과에 대해서는 2018년 5월까'" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Document 그대로 불러오기\n", "with open('../data/kr-Report_2018.txt','r', encoding='utf-8') as f:\n", " texts = f.read()\n", "texts[:300]" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'삼성전자\\n 지속가능경영보고서\\n 보고서 개요\\n 가치창출 삼성전자 경제사회환경 통합 성과 이해관계자\\n 소통자 매년 지속가능경영보고서 발간\\n 열한 지속가능경영보고서 발간\\n 보고기간\\n 보고서 경제사회환경 성과 활동\\n 일부 정성 성과 자료 포함\\n 정량 연도별 추이 분석 최근 개년 수치 제공\\n 보고범위\\n 보고범위 국내 해외 사업 공급망 포함 재무성 연결기준\\n 작성 사업 환경 정량 국내외 생산 법인 수집 데이터\\n 기준 작성\\n 작성기준\\n 핵심 부합 방법 작성\\n 추가정보\\n 삼성전자 대표 홈페이지\\n 지속가능경영 홈페이지\\n 홈페이지\\n 삼성전자 뉴스룸\\n'" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Document에 포함된 한글만 추출\n", "# 이들 중 명사 Token만 추출 \n", "from txtutil import txtnoun\n", "skip_tokens = {'갤러시':'갤럭시', '가치창출의':'가치창출'}\n", "texts = txtnoun('../data/kr-Report_2018.txt', skip=skip_tokens)\n", "texts[:300]" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['삼성전자', '지속가능경영보고서', '보고서', '개요', '가치창출', '삼성전자', '경제사회환경']" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from nltk.tokenize import word_tokenize\n", "tokens = word_tokenize(texts)\n", "tokens[:7]" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "22665\n" ] }, { "data": { "text/plain": [ "[('삼성전자', '지속가능경영보고서', '보고서'),\n", " ('지속가능경영보고서', '보고서', '개요'),\n", " ('보고서', '개요', '가치창출'),\n", " ('개요', '가치창출', '삼성전자'),\n", " ('가치창출', '삼성전자', '경제사회환경')]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from nltk.util import ngrams\n", "texts_sample = [txt for txt in ngrams(tokens, 3)]\n", "print(len(texts_sample))\n", "texts_sample[:5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "## **2 Bi-Gram 을 대상으로 한 PMI**\n", "**Point wise Mutual Information** 를 측정하여 최상위 우도 10개 값을 추출" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from nltk import collocations\n", "finder_bi = collocations.BigramCollocationFinder.from_words(tokens)\n", "finder_bi" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[('가상', '현실기기'),\n", " ('가정용', '수영장'),\n", " ('가정은', '명명'),\n", " ('가족대책위원회', '반올림'),\n", " ('각막혼탁', '유리체혼탁'),\n", " ('간접배출', '국품질재단'),\n", " ('감사표시장애인친', '매장서비스'),\n", " ('감시', '퇴치'),\n", " ('감탄', '데뷔곡'),\n", " ('강도', '낙하')]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "measures_bi = collocations.BigramAssocMeasures()\n", "finder_bi.nbest(measures_bi.pmi, 10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "## **3 Tri-Gram 을 대상으로한 PMI**" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "finder_tri = collocations.TrigramCollocationFinder.from_words(tokens)\n", "finder_tri" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[('가정용', '수영장', '가득'),\n", " ('가정은', '명명', '성인'),\n", " ('각막혼탁', '유리체혼탁', '굴절장애'),\n", " ('감사표시장애인친', '매장서비스', '수화서비스'),\n", " ('감탄', '데뷔곡', '헌정'),\n", " ('개발하', '매일', '등교길'),\n", " ('개인별', '급여지급', '명세서'),\n", " ('거래규모', '과거', '이슈역'),\n", " ('거래금액', '증가율', '원가경쟁력'),\n", " ('경쟁저해행위', '독과점', '불공정')]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "measures_tri = collocations.TrigramAssocMeasures()\n", "finder_tri.nbest(measures_tri.pmi, 10)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.3" } }, "nbformat": 4, "nbformat_minor": 2 }