Amazon Fine Food Reviews라는 데이터셋을 활용해서 TF-IDF 실습을 했다.
구현은 직접 하지 않고 sklearn에서 제공하는 TfidfVectorizer 기능을 사용했다.
feature의 수에 제한을 두지 않으면 메모리 부족으로 터지는 문제가 있어 max_features 파라미터 값으로 10,000을 줬다.
자연어 전처리를 한 결과를 TfidfVectorizer에 넣어줘야 하는 줄 알았는데 TfidfVectorizer에 파라미터로 이것저것 넣어주면 알아서 전처리를 해준다.
Tfidf를 구하고 나서는 각 문서를 가장 잘 설명하는 단어를 5개씩 출력했다.
In [11]:
# This Python 3 environment comes with many helpful analytics libraries installed
# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python
# For example, here's several helpful packages to load in
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
# Input data files are available in the "../input/" directory.
# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory
import os
for dirname, _, filenames in os.walk('/kaggle/input'):
for filename in filenames:
print(os.path.join(dirname, filename))
# Any results you write to the current directory are saved as output.
In [12]:
import nltk
from nltk.corpus import stopwords
import re
from sklearn.feature_extraction.text import TfidfVectorizer
In [13]:
r = pd.read_csv("/kaggle/input/amazon-fine-food-reviews/Reviews.csv")
r.head()
Out[13]:
In [14]:
# ProductId를 기준으로 Text 통합
r = r.groupby('ProductId')['Text'].agg(lambda col: ''.join(col))
r.head()
Out[14]:
In [15]:
r = pd.DataFrame({'ProductId':r.index, 'Text':r.values})
r.head()
Out[15]:
In [16]:
tfidf = TfidfVectorizer(stop_words="english", max_features=10000)
response = tfidf.fit_transform(r["Text"])
tfidf
Out[16]:
In [17]:
r.head(20)
Out[17]:
In [18]:
# 상위 20개 항목을 대상으로 해당 항목을 가장 잘 설명하는 단어 다섯개 출력
feature_names = np.array(tfidf.get_feature_names())
n = 5
for i in range(20):
tfidf_sorting = np.argsort(response[i].toarray()).flatten()[::-1]
print(feature_names[tfidf_sorting][:n])
In [ ]:
'추천 시스템 > Content-based Filtering' 카테고리의 다른 글
[CB Filtering] 4. Profile Learner(1) (0) | 2020.04.15 |
---|---|
[CB Filtering] 2. Keyword-based Vector Space Model (0) | 2020.03.16 |
[CB Filtering] 1. 개요 (0) | 2020.03.12 |