Python 주제 분석


수강중

20. LDA 데이터 형식 변환

gensim 설치

아나콘다를 사용할 경우

!conda install -y gensim

pip로 설리할 경우

!pip install gensim

전처리된 데이터 불러오기

import joblib
data = joblib.load('movie.pkl')
locals().update(data)

단어문서행렬을 gensim 형식으로 변환

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 형식으로 처리

텍스트에서 바로 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']