#!/usr/bin/env python # coding: utf-8 #

# # **tf-idf** # tf-idf 용도 : 문장/ 문서간의 유사도 판단 (**상대적 중요도 판단**) # # ## **1 tf - idf 사용자 함수** # [**지속성장 경영 보고서**](https://images.samsung.com/is/content/samsung/p5/sec/aboutsamsung/2018/pdf/SustainabilityReport_2018_kr.pdf) # In[ ]: # tf_idf('Token', 'Document', [특정 모집단의 Tokens list]) from txtutil import tf_idf tf_idf('갤럭시', '갤럭시 갤럭시 노트 신제품 출시', ['갤럭시','갤럭시','노트','신제품','출시','출시']) #

# ## **2 idf 추출하기 (특정한 모집단의 Token 데이터 나열)** # [**지속성장 경영 보고서**](https://images.samsung.com/is/content/samsung/p5/sec/aboutsamsung/2018/pdf/SustainabilityReport_2018_kr.pdf) # In[ ]: # 모집단 Document 목록을 불러온다 import re from glob import glob filelist = glob('./data/kr-Report_201?.txt') filelist # In[ ]: get_ipython().run_cell_magic('time', '', "from txtutil import txtnoun\nfrom nltk.tokenize import word_tokenize\n\n# 모집단 Docuement 의 Token 들을 전처리 한다\ndocs_tokens = []\nskips = {'갤러시':'갤럭시', '가치창출':'가치창출'}\nfor 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를 활용하여 보기좋게 출력\nfrom nltk import FreqDist\nimport pandas as pd\nprint(pd.Series(FreqDist(docs_tokens)).sort_values(ascending=False)[:5])\n") #

# ## **3 tf 의 구현** # tf-idf 분석할 대상문서 수집 # In[ ]: # 분석할 Document를 불러온다 texts = txtnoun('./data/kr-Report_2018.txt', skip=skips) tokens = word_tokenize(texts) tokens = [token for token in tokens if len(token) > 2] tokens[:7] #

# ## **4 tf - idf 계산하여 출력** # tf-idf 분석할 대상문서 수집 # In[ ]: get_ipython().run_cell_magic('time', '', '# 위에서 수집한 idf 를 바탕으로 tf-idf를 계산한다\nfrom txtutil import tf_idf\ntoken_set = list(set(tokens))\nresult_dict = {txt : tf_idf(txt, tokens, docs_tokens) for txt in token_set}\n\n# 2018년도 tf-idf : TF-IDF 결과를 Pandas로 출력\ntfidf_2018 = pd.Series(result_dict).sort_values(ascending=False)\nprint(tfidf_2018[:8])\n') #

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