pbj0812의 코딩 일기

[수학] PYTHON 을 이용한 TF-IDF 구현 본문

Science/수학

[수학] PYTHON 을 이용한 TF-IDF 구현

pbj0812 2020. 11. 25. 01:53

0. 목표

 - PYTHON 을 이용한 TF-IDF 구현

1. 실습

 1) library 호출

import pandas as pd
from math import log

 2) 데이터 생성

doc1  = 'I am a boy'
doc2 = 'I am a girl'
doc3 = 'I am a a a man'

 3) TF-IDF 구현 모듈

  - DF 를 먼저 구하여 이후 TF-IDF 를 구할 때 값을 이용해 줌.

def doc(*args):
    doc_list = []
    tf = pd.DataFrame()
    idf = pd.DataFrame()
    tf_idf = pd.DataFrame()
    
    # 단어 리스트 생성
    for i in args:
        # 단어 분해
        tmp_list = i.split(' ')
        # 리스트 결합
        doc_list += tmp_list
    doc_list = list(set(doc_list))
    
    # DF
    df = []
    for i in doc_list:
        tmp = 0
        for j in args:
            # 단어 분해
            tmp_list = list(set(j.split(' ')))
            if i in tmp_list:
                tmp += 1
        df.append(tmp)
        
    # TF(DTM), IDF, TF-IDF
    for i in range(len(doc_list)):
        tmp = []
        tmp2 = []
        tmp3 = []
        for j in args:
            # 단어 분해
            tmp_list = j.split(' ')
            # 단어 세기
            tmp.append(tmp_list.count(doc_list[i]))
            tmp2.append(log(len(args) / (df[i] + 1)))
            tmp3.append((tmp_list.count(doc_list[i])) * (log(len(args) / (df[i] + 1))))
        # 데이터 프레임 추가
        tf[doc_list[i]] = tmp
        idf[doc_list[i]] = tmp2
        tf_idf[doc_list[i]] = tmp3
    return tf, df, idf, tf_idf

2. 테스트

 1) 실행

tf, df, idf, tf_idf = doc(doc1, doc2, doc3)

 2) TF

tf

  - 결과

 3) DF

df

  - 결과

[1, 3, 1, 3, 3, 1]

 4) IDF

idf

  - 결과

 5) TF-IDF

tf_idf

  - 결과

3. 참고

 - 4) TF-IDF(Term Frequency-Inverse Document Frequency)

Comments