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

\n", "# **tf-idf**\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": null, "metadata": {}, "outputs": [], "source": [ "# tf_idf('Token', 'Document', [특정 모집단의 Tokens list])\n", "from txtutil import tf_idf\n", "tf_idf('갤럭시', '갤럭시 갤럭시 노트 신제품 출시', ['갤럭시','갤럭시','노트','신제품','출시','출시'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "## **2 idf 추출하기 (특정한 모집단의 Token 데이터 나열)**\n", "[**지속성장 경영 보고서**](https://images.samsung.com/is/content/samsung/p5/sec/aboutsamsung/2018/pdf/SustainabilityReport_2018_kr.pdf)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# 모집단 Document 목록을 불러온다\n", "import re\n", "from glob import glob\n", "filelist = glob('./data/kr-Report_201?.txt')\n", "filelist" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%%time\n", "from txtutil import txtnoun\n", "from nltk.tokenize import word_tokenize\n", "\n", "# 모집단 Docuement 의 Token 들을 전처리 한다\n", "docs_tokens = []\n", "skips = {'갤러시':'갤럭시', '가치창출':'가치창출'}\n", "for file in filelist:\n", " tokens = word_tokenize(txtnoun(file, skip=skips))\n", " tokens = [token for token in tokens \n", " if len(token) > 2] \n", " docs_tokens += tokens\n", "\n", "# 결과를 Pandas를 활용하여 보기좋게 출력\n", "from nltk import FreqDist\n", "import pandas as pd\n", "print(pd.Series(FreqDist(docs_tokens)).sort_values(ascending=False)[:5])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "## **3 tf 의 구현**\n", "tf-idf 분석할 대상문서 수집" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# 분석할 Document를 불러온다\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", "tokens[:7]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "## **4 tf - idf 계산하여 출력**\n", "tf-idf 분석할 대상문서 수집" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%%time\n", "# 위에서 수집한 idf 를 바탕으로 tf-idf를 계산한다\n", "from txtutil import tf_idf\n", "token_set = list(set(tokens))\n", "result_dict = {txt : tf_idf(txt, tokens, docs_tokens) for txt in token_set}\n", "\n", "# 2018년도 tf-idf : TF-IDF 결과를 Pandas로 출력\n", "tfidf_2018 = pd.Series(result_dict).sort_values(ascending=False)\n", "print(tfidf_2018[:8])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "## **5 2017 년도 문서의 tf - idf 와 비교출력**\n", "tf-idf 분석할 대상문서 수집" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%%time\n", "# 2017 년도 Document 불러오기\n", "texts = txtnoun('./data/kr-Report_2017.txt', skip=skips)\n", "tokens = word_tokenize(texts)\n", "tokens = [token for token in tokens \n", " if len(token) > 2] \n", "\n", "# 2017 년도 Token 의 tf-idf 계산한다\n", "token_set = list(set(tokens))\n", "result_dict = {txt : tf_idf(txt, tokens, docs_tokens) for txt in token_set}\n", "\n", "# 2018년도 tf-idf : TF-IDF 결과를 Pandas로 출력\n", "tfidf_2017 = pd.Series(result_dict).sort_values(ascending=False)\n", "# tfidf_2017[:8]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# 2017년도와 2018년도의 tf_idf를 비교하여 출력한다\n", "result = pd.DataFrame()\n", "result['2017'] = tfidf_2017.keys()[:15]\n", "result['2018'] = tfidf_2018.keys()[:15]\n", "result" ] } ], "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 }