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

\n", "# **tf-idf**\n", "\n", "## **1 tf - idf 를 직접 구현하기**\n", "[**지속성장 경영 보고서**](https://images.samsung.com/is/content/samsung/p5/sec/aboutsamsung/2018/pdf/SustainabilityReport_2018_kr.pdf)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.053319013889226566" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Docs 의 list 목록을 만드는게 우선 일이다\n", "from txtutil import tf_idf\n", "tf_idf('갤럭시', '갤럭시 노트 신제품 출시', ['갤럭시','갤럭시','노트','신제품','출시','출시'])" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import re\n", "from glob import glob\n", "filelist = glob('../data/kr-Report_201?.txt')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# 불용어 자료를 활용하여 Token 을 Filtering \n", "# # stopwords.txt : 2015, 2016, 2017, 2018년 모두 존재하는 단어목록\n", "# f = open('./data/stopwords.txt', 'r', encoding='utf-8')\n", "# stopwords = f.read(); f.close()\n", "# stopwords = stopwords.split(' ')\n", "# stopwords[:10]" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 1min 8s, sys: 531 ms, total: 1min 9s\n", "Wall time: 1min 28s\n" ] } ], "source": [ "%%time\n", "docs_tokens = []\n", "skips = {'갤러시':'갤럭시', '가치창출':'가치창출'}\n", "from txtutil import txtnoun\n", "from nltk.tokenize import word_tokenize\n", "for file in filelist:\n", " texts = txtnoun(file, skip=skips)\n", " tokens = word_tokenize(texts)\n", " tokens = [token for token in tokens \n", " if len(token) > 2] \n", " # if (len(token) > 2) and (token not in stopwords)]\n", " docs_tokens += tokens" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "삼성전자 2075\n", "협력사 1075\n", "임직원 990\n", "글로벌 705\n", "리스크 577\n", "dtype: int64" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from nltk import FreqDist\n", "import pandas as pd\n", "pd.Series(FreqDist(docs_tokens)).sort_values(ascending=False)[:5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "## **2 tf-idf 를 분석할 대상문서 데이터 불러오기**\n", "tf-idf 분석할 대상문서 수집" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['삼성전자', '지속가능경영보고서', '보고서', '삼성전자', '경제사회환경', '가치창', '이해관계자']" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 분석할 대상 데이터\n", "texts = txtnoun('../data/kr-Report_2018.txt', skip=skips)\n", "tokens = word_tokenize(texts)\n", "tokens = [token for token in tokens \n", " if len(token) > 2] \n", " # if (len(token) > 2) and (token not in stopwords)]\n", "tokens[:7]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Calculating is Done.\n", "CPU times: user 55.3 s, sys: 137 ms, total: 55.5 s\n", "Wall time: 1min 19s\n" ] } ], "source": [ "%%time\n", "from txtutil import tf_idf\n", "token_set = list(set(tokens))\n", "\n", "result_dict = {}\n", "for txt in token_set:\n", " result_dict[txt] = tf_idf(txt, tokens, docs_tokens)\n", "print('Calculating is Done.')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "삼성전자 0.121404\n", "협력사 0.095371\n", "지속가능경영보고서 0.084802\n", "리스크 0.072616\n", "임직원 0.072425\n", "서비스 0.055274\n", "글로벌 0.051513\n", "온실가스 0.049012\n", "이해관계자 0.048615\n", "프로그램 0.047731\n", "에너지 0.047293\n", "배출량 0.041387\n", "폐기물 0.039498\n", "이사회 0.037083\n", "시스템 0.036201\n", "중요성 0.034973\n", "근로자 0.033042\n", "데이터 0.032766\n", "친환경 0.032202\n", "공급망 0.032052\n", "dtype: float64" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 2018년도 tf-idf\n", "# 생성한 TF-IDF 결과를 Pandas로 출력\n", "import pandas as pd\n", "tfidf = pd.Series(result_dict)\n", "tfidf.sort_values(ascending=False)[:20]" ] } ], "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 }