단어문서행렬과 형태소 분석

Python을 통한 단어문서행렬과 형태소 분석


수강중

9. 품사 태깅과 표제어 추출

spaCy 설치

https://spacy.io/usage#quickstart 에서 운영체제와 conda / pip 등을 선택하면 설치 안내를 확인할 수 있다.

아나콘다:

!conda install -y -c conda-forge spacy

pip:

!pip install -U spacy

영어 모형 다운로드

!python -m spacy download en_core_web_sm

형태소 분석과 표제어 추출

spacy를 불러온다.

import spacy

영어 모형을 불러온다.

nlp = spacy.load("en_core_web_sm")

영어 텍스트에 모형을 적용한다.

text = "Wikipedia is maintained by volunteers."
doc = nlp(text)
for token in doc:
    print(token.text, 
          token.lemma_,  # 표제어
          token.pos_,    # 단어의 품사
          token.tag_,    # 자세한 품사
          token.dep_,    # 문법적 의존 관계
          token.is_stop) # 불용어 여부
Wikipedia Wikipedia PROPN NNP nsubjpass False
is be AUX VBZ auxpass True
maintained maintain VERB VBN ROOT False
by by ADP IN agent True
volunteers volunteer NOUN NNS pobj False
. . PUNCT . punct False

용어

spacy.explain('PROPN')
'proper noun'

명사와 동사의 표제어로 단어 문서 행렬 만들기

명사와 동사의 표제어만 추출하는 함수를 만든다.

def extract_nv(text):
    doc = nlp(text)
    words = []
    for token in doc:
        if token.tag_[0] in 'NV':
            words.append(token.lemma_.lower())
    return words

CountVectorizer를 초기화한다.

from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer(max_features=500, tokenizer=extract_nv)

데이터를 불러온다.

import pandas as pd
df = pd.read_excel('imdb.xlsx', index_col=0)
df.head()
review sentiment
0 A very, very, very slow-moving, aimless movie ... 0
1 Not sure who was more lost - the flat characte... 0
2 Attempting artiness with black & white and cle... 0
3 Very little music or anything to speak of. 0
4 The best scene in the movie was when Gerardo i... 1

TDM을 만든다.

tdm = cv.fit_transform(df['review'])

빈도 순으로 정렬한다.

wc = pd.DataFrame({
    '단어': cv.get_feature_names(),
    '빈도': tdm.sum(axis=0).flat
})
wc.sort_values('빈도', ascending=False).head()
단어 빈도
30 be 844
284 movie 211
134 film 189
170 have 132
93 do 112