본문 바로가기

About 배우고 익히는법/Python

자연어처리 과정 기록(nltk)

파이썬 사용

일반적으로 영어 문장들을 자연어 처리할 때

nltk 자연어처리 패키지를 사용한다(설치는 cmd창에서)

패키지를 설치하고 corpus 자료를 파이썬 내부창에서 다운받는다(내장 자료 사용할 경우)

-연습하면서 패키지 엄청 다운받음...

pip install nltk import nltk nltk.download('book') nltk.download('vader_lexicon') nltk.download('wordnet') nltk.download('punkt') nltk.download('stopwords')

corpus;말뭉치 : 분석을 위해 수집된 문서들의 집합

(예를들어, 100개의 논문을 분석한다고 했을 때 100개의 논문을 통으로 말뭉치라고 지칭함)


분석을 위해 말뭉치 > 문서 > 단락 > 문장 > 단어 > 형태소 순으로 텍스트를 나눈 다음에 분석한다

nltk를 사용하는 경우

1. tokenization 토큰화

2. stopwords 불용어 제거(nltk 내장)

3. stemming 어간추출 / lemmatization 원형화

4. POS tagging 품사부착

의 순서로 자연어처리를 하는 듯함

2-4의 순서는 사람에 따라 조금씩 다르게 적용하는 느낌이다

처음엔 stemming이랑 lemmatizing을 같이 하는건줄 알았는데

둘 중 하나만 하면 되는듯, porter_stemmer는 글자가 좀 잘리는 느낌이라 이거 안쓰고 WordNetLemmatizer 사용함

그러나

konlpy 패키지를 사용하여 한글 자연어분석을 하는 경우에

자체 불용어 사전을 만들어 불용어 제거작업만 별도로 진행하고

나머지 자연어 처리 과정은 패키지로 한번에 처리하는 느낌임

txt 파일 형식으로 불용어 사전 추가 작성 및 적용 필요

참조 사이트

일반적인 텍스트 데이터를 분석하는 방법

1. 사전기반 접근방법을 사용하여, 해당 단어들이 사용된 문서의 의미를 추정할 수 있다

예를들어, 정치적 텍스트에서 심리를 분석하는 경우나 감정사전을 이용한 감정분석이 있다

2. 기계학습을 이용한 기법으로 지도학습/비지도학습 두 가지의 방법이 존재함

1) 텍스트 데이터의 분석단위의 의미가 알려진 경우로 훈련용 데이터를 별도로 만들어 학습 후 테스트 하는 것

기계학습(일반 선형모형, 나이브 베이즈 분류, 서포트 벡터 머신, 분류 및 회귀나무)

훈련데이터를 통해 완성된 모형을 사용하여 문서의 의미를 예측할 수 있다

2) 텍스트 데이터의 의미를 직접 해석해야 함(훈련데이터가 존재하지 않는다)

비지도학습(주성분분석, 군집분석)

비지도학습의 결과를 통해 연구자가 직접 텍스트의 의미를 밝혀내야 한다

감정분석

감정어휘 사전을 이용한 감정분석, 텍스트와 문서에서 밝혀진 감정의 관계를 기계학습을 토대로 추정한 감정분석

두가지가 존재한다

영어의 경우 긍부정(점수)/감정 별 단어 등 잘 만들어진 사전이 존재하는데

아직 한글로는 많이 없는듯

R에 txt파일을 임포트해서 분석하는 경우가 많음

텍스트 데이터 전처리를 진행하면

1. 숫자가 삭제되면서 숫자 단어들이 말뭉치에서 삭제됨

2. 불용어 삭제됨

3. 어근 동일화 과정을 거치면서 동일한 어근들이 합쳐짐

전처리 후 문서-단어 행렬 또는 단어-문서행렬을 구축하고 추가적 통계분석을 실시한다

DTM은 가로줄에 문서가, TDM은 가로줄에 단어가 배치된 행렬로 단어가 문장에서 나타날 때마다 해당 칸을 1로 변환시킴

TF-IDF (단어빈도-역빈도)

말뭉치에서 유난히 빈도수가 높게 나타나는 단어의 가중치를 줄이는 작업

TF는 높지만 TF-IDF 가 낮은 경우 : 대체적으로 모든 문서에서 빈번하게 나타나는 단어(특정성이 떨어짐)

결과적으로 감정분석에서

from nltk.sentiment import SentimentAnalyzer

사용해서 긍부정 판별했고

csv나 txt 매번 가져오는거 불편해서 몽고DB연결했더니 엄청 편했다...

대신 기존 sql이랑 다른 언어(json비스무리) 사용해서 첨에 좀 헷갈림