아나콘다를 사용할 경우
!conda install -y gensim
pip로 설리할 경우
!pip install gensim
import joblib
data = joblib.load('movie.pkl')
locals().update(data)
from gensim.matutils import Sparse2Corpus
단어 문서 행렬을 gensim
의 내부 형식으로 변환
corpus = Sparse2Corpus(x_train.T)
변환된 데이터를 본다. TDM은 행렬 형태이나 gensim
에서는 (단어번호, 빈도)
형태의 리스트를 사용한다.
corpus[27907]
[(440, 1), (1052, 3), (1110, 1), (1002, 1), (1317, 2),
단어 번호와 단어를 사전으로 정리한다.
id2word = dict(enumerate(cv.get_feature_names()))
440번 단어는 daughter이다.
id2word[440]
'daughter'
저장한다.
joblib.dump({'corpus': corpus, 'id2word': id2word}, 'corpus.pkl')
['corpus.pkl']
텍스트에서 바로 gensim 형식으로 처리할 수도 있다. 먼저, 텍스트를 불러온다.
import pandas as pd
df = pd.read_csv('movie-plot.zip')
훈련용 플롯을 선택한다.
plot_train = df.loc[index_train, 'Plot']
토큰화는 간단히 cv
의 정규식으로 표현된 토큰화 패턴을 사용하기로 한다.
cv.token_pattern
'(?u)\\b\\w\\w+\\b'
빠른 처리를 위해 토큰화 패턴을 컴파일한다.
import re
token_re = re.compile(cv.token_pattern)
모든 플롯을 토큰화한다.
docs = []
for plot in plot_train:
doc = [tok.lower() for tok in token_re.findall(plot)]
docs.append(doc)
사전을 만든다.
from gensim.corpora.dictionary import Dictionary
dic = Dictionary(docs)
10개 미만의 문서에서 출현한 단어와 20% 이상의 문서에서 출현한 단어는 사전에서 삭제한다.
dic.filter_extremes(no_below=10, no_above=0.2)
사전의 단어 목록을 확인한다.
dic.token2id
{'000': 0, '20': 1, '500': 2, 'abandons': 3, 'actually': 4,
토큰화된 문서를 gensim의 형식으로 바꾼다.
bows = []
for doc in docs:
bow = dic.doc2bow(doc)
bows.append(bow)
저장을 한다.
joblib.dump({'dic': dic, 'bows': bows}, 'gensim-dic.pkl')
['gensim-dic.pkl']