{
"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
}