본문 바로가기
2021-1/Expert

LDA | 혼자 구현해보기

by 이망고_ 2021. 10. 14.

LDA 하라고 하면 혼자 할 수 있겠어?

 

.... 아뇨

 

공부를 아무리 해도 내가 혼자 구현하지 못하면 프로젝트 내에서 할 수 없는 것.. 코드를 혼자서 오나전 구현시켜 볼 수 있어야 된다. 부담 오조오억배.. 되어서 죽을뻔..

 

그러니까 다시 한줄한줄씩 코드를 뜯어보자

 

Pandas import

먼저 판다스를 임포트 해준다

파일이 안 불러 졌는데 파일경로와 파일명을 직접 적어주고 .csv 를 적어준다. (피일에는 굳이 .csv  안해도 된다)

  • data = pd.read_csv)'C:/Search/a/paper.csv)

index 지정

data_text = data[['title']] 와 data['title'] 의 차이

[] 리스트 하나로 해주니 타이틀 인덱스만 출력이 되긴 하였는데

우측 상단에 title 의 여부가 갈렸다.

 

data_text['index'] = data_text.index 와 data_text.index = data_text['index'] 의 차이

[인덱스]를 설정해준다고 []를 먼저 써주고, .index 로 만들어준다

반대로 하면 인덱스 설정 불가

 

후에 

  • data_text['index'] 실행해줄 때에도 title 이 없으니깐(['title'] 인덱스 번호도 안붙네
  • data_text = data[['title']] 로 데이터 컬럼을 필수적으로 저장해줘야 겠다

documents = data_text 

data_text 를 보다 간결한 도큐먼트 변수에 지정한다

import nltk

자연어처리 툴키트를 임포트 해준다

* nltk 란? 자연어란 우리가 일상 생활에서 사용하는 언어

자연어처리란 컴퓨터가 자연어를 처리할 수 있도록 하는 일

자연어 처리가 되면, 처리된 정보를 바탕으로 음성 인식, 내용 요약, 번역, 감성 분석, 텍스트 분류 작업을 할 수 있다

 

* nltk 란? 자연어 처리를 위한 파이썬 패키지

-자연어 문서를 분석하기 위해서는 긴 문자열 분석을 위해 작은 단위로 나누어야 하는데, 이 문자열의 단위를 토큰이라고 한다

-형태소는 언어학에서 일정한 의미가 있는 가장 작은 말의 단위를 뜻하는데, 보통 자연어처리에서는 토큰으로 형태소를 이용한다

-형태소 분석이란 단어로부터 어근, 접두사, 접미사, 품사 등 다양한 언어적 속성을 파악하고 이를 이용하여 형태소를 찾아내거나 처리한다

-어간 추출은 변화된 단어의 접미사나 어미를 제거, 형태소의 기본형을 찾는 방법

-품사는 문법적인 기능이나 형태

-자연어 분석을 할 때 같은 토큰이라도 품사가 다르면 다른 토큰으로 처리한다

 

* 쥬피터 노트북에서 nltk 를 설치하려면 '! pip/conda install nltk' 입력해준다

import gensim

https://ebbnflow.tistory.com/153 gensim 찾다가 의미와 해석을 잘 해놓아서 첨부해놓습니다

* gensim Word2Vec 은 언어의 의미와 유사도를 고려하여 언어를 벡터로 매핑하는 방식을 사용하는 패키지임

* 토픽 모델이란? 문서집합의 추상적인 주제를 발견하기 위한 통계적 모델 중 하나로, 텍스트 본문의 숨겨진 의미구조를 발견하고자 하는 텍스트 마이닝 기법 중 하나

 

토픽 모델링을 해주기 위해 gensim 을 임포트 해준다.

gensim 오류는 나만의 문제가 아니니 이전 포스팅(실패 계속, 결국 선배한테 물음) 에 나와있는데 다양한 방법을 시도했으니 그대로 따라하시면 보시는 분들은 오류가 해결될 수도 있다.

import numpy as np

numpy 란? 행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리할 수 있도록 지원하는 파이썬의 라이브러리

수치계산을 용이하게 해주는 numpy 도 임포트 해준다

 

from nltk.stem.porter import *

from gensim.utils import simple_preprocess

from gensim.parsingd.preprocessing import STOPWORDS

from nltk.stem import WordNetLemmatizer, SnowballStemmer

stopwords 는 불용어로, 소유격, 조사,접미사, 복수형 등을 의미한다 (데이터에서 유의미한 단어 토큰만을 선별하기 위해 큰 의미가 없는 단어 토큰 제거) (I, my, me, over, ..)

stemmer 는 -es 를 잘라주고 (어간 추출)

lemmatize 는 원어를 찾아서 결과를 보여준다 (표제어 추출)

np.random.seed(2018) 

( ) 괄호 안에 어떤 파라미터를 사용하든 아무 상관이 없다고 한다는데. 단지 서로 다른 seed 를 사용할 경우 numpy 로 하여금 서로 다른 유사난수를 생성하게 만든다는 점만 이해하면 된다 칸다.

stemmer = SnowballStemmer("english")

snowballstemmer 에서 사용할 언어를 지정, 약 15개의 언어가 있으며 한국어는 없다

 

def lemmatize_stemming(text):
    return stemmer.stem(WordNetLemmatizer().lemmatize(text, pos = 'v'))

반환(return)문

'2021-1 > Expert' 카테고리의 다른 글

LDA | 오류해결 및 시각화  (0) 2021.10.25
LDA | Delete Korean Stopword  (0) 2021.10.23
쥬피터 노트북 | LDA 실습  (0) 2021.10.14
LDA | 실습하기  (0) 2021.10.14
LDA | 실습하기  (0) 2021.10.13