py-hanspell은 파이썬으로 한국어 자연어 처리를 할 때 사용하는 라이브러리입니다. 네이버 맞춤법 검사기를 이용해 주어진 한글 데이터의 맞춤법과 띄어쓰기를 교정하는 기능을 제공해 주는데요. 주피터 노트북에서 작업을 하고 있다면 아래 코드를 써서 바로 py-hanspell을 설치할 수 있습니다.!pip install py-hanspell하지만, 경우에 따라 위의 명령어로 설치가 안되는 경우도 있습니다. 그럴 경우에는 아래 방법을 따라해 주세요.py-hanspell 수동 설치하기먼저, py-hanspell의 코드가 있는 GitHub으로 이동하겠습니다.py-hanspell Github 바로가기접속하면 이런 화면이 나오는데요.우측 상단에 있는 'Code' 버튼을 클릭하면 나오는 드롭다운 메뉴에서 Downl..
지금까지 영어 자연어를 중심으로 배운 내용들은 한국어 데이터 분석에서도 충분히 활용 가능한데요. 한국어 데이터에 배운 내용들을 적용하려면 몇 가지 절차가 추가로 필요합니다. 그 중 하나가 띄어쓰기 교정입니다. 띄어쓰기 교정 한국어는 띄어쓰기를 잘 지키지 않아도 문장의 의미를 이해할 수 있습니다. 예를 들어, 아래와 같은 문장이 있다고 해볼게요. 나는오늘티스토리블로그에글을올렸다. 이해하는데 불편하긴 하지만 그래도 어떤 의미인지 파악은 할 수 있죠? 이런 특성 때문에 보통의 한국어 코퍼스에는 띄어쓰기가 잘 지켜지지 않는 경우가 많습니다. 그리고 이렇게 띄어쓰기가 어긋난 데이터로 분석을 진행하면 전처리의 토큰화 과정부터 오류가 발생할 수 있습니다. 이러한 오류의 가능성 때문에 자연어 전처리 단계를 시작하기 전..
실습 설명imdb.tsv 리뷰 데이터의 문장별 감성 지수를 구하는 함수 vader_sentiment()를 작성해 주세요. 참고로 VADER는 SentimentIntensityAnalyzer를 생성한 뒤, polarity_scores() 함수를 호출해 사용할 수 있습니다. 파라미터로 코퍼스를 받아, 해당 코퍼스의 감성 지수(compound)를 리턴하도록 함수를 만들어 주세요. imdb.tsvreview 0"Watching Time Chasers, it obvious that it was made by a bunch of friends. Maybe they were sitting around one day in film school and said, \""Hey, let's pool our money tog..
VADER란?VADER(Valence Aware Dictionary and sEntiment Reasoner)는 감성 분석을 위한 어휘 사전이자 알고리즘입니다. 앞에서 살펴본 SentiWordNet과의 큰 차이점은 일반적인 감성 어휘 사전의 규칙 외에도 축약형과 기호 등을 고려해 감성 지수를 추출할 수 있다는 점인데요. 그래서 주로 축약형 표현이나 특수 문자가 많이 사용된 소셜 미디어 텍스트를 분석할 때 자주 사용됩니다. VADER는 아래 명령어로 설치할 수 있습니다.pip install vaderSentimentVADER 사용법아래는 VADER를 사용해 감성 지수를 계산하는 코드입니다. VADER로 감성 분석을 하려면 SentimentIntensityAnalyzer를 생성한 뒤 polarity_scor..
실습 설명 주어진 파일(imdb.tsv)의 리뷰 데이터 별 감성 지수를 구하는 함수 swn_polarity()를 작성해 주세요. imdb.tsv review 0"Watching Time Chasers, it obvious that it was made by a bunch of friends. Maybe they were sitting around one day in film school and said, \""Hey, let's pool our money together and make a really bad movie!\"" Or something like that. What ever they said, they still ended up making a really bad movie--dull sto..
이전 포스팅에서 만들어 둔 swn_polarity() 함수를 pos_tagged_df에 적용해 데이터 프레임의 각 로우에 저장되어 있는 코퍼스들의 감성 지수를 확인해 보겠습니다.from preprocess import swn_polarity # dataframe에 swn_polarity() 함수 적용 df['swn_sentiment'] = df['pos_tagged_tokens'].apply(swn_polarity) df[['review', 'swn_sentiment']]각 문장의 감성 분석 결과를 구해 봤습니다. 결과로 나온 Dataframe에서 몇 개의 원문 데이터를 보며 결과가 잘 나왔는지 확인해 볼게요. 먼저 첫 번째 리뷰입니다. 해당 리뷰는 감성 지수가 -0.25로, 부정적인 리뷰라고 확인됐는데..
이전 포스팅까지 사용하던 IMDb 영화 리뷰 데이터에 감성 분석도 적용해 보겠습니다. 감성 분석을 위해선 각 토큰의 품사가 태깅된 상태의 데이터가 필요하기 때문에 df['pos_tagged_tokens']를 사용해 분석을 진행하겠습니다.df[['pos_tagged_tokens']] df['pos_tagged_tokens']는 모든 전처리 단계가 전부 적용되진 않았는데요. 보통 정제 작업에서 제거되는 단어들은 감성 지수가 중립인 경우가 많기 때문에, 전체 결과에 큰 영향을 주진 않습니다. 그래서 품사 태깅까지만 된 데이터를 가지고 실습을 진행해도 큰 문제는 없습니다.감성 분석먼저 첫 번째 로우로 감성 분석을 진행해 보고, 해당 코드를 함수로 만들어서 전체 데이터 프레임에도 적용해 볼게요. 하나의 코퍼스로 ..
실습 설명 주어진 단어의 감성 지수를 구하는 함수 get_sentiment_score()를 작성해 주세요. 함수의 파라미터로는 단어(word)와 품사(pos)가 전달됩니다. 반환하는 값은 감성 지수(sentiment_score)입니다. 감성 지수는 긍정 감성 지수에서 부정 감성 지수를 뺀 값을 사용합니다. 해당 함수를 아래 단계에 따라 만들어 주세요. 단어와 품사 태그를 기반으로 Synsets 구하기 Synsets의 첫 번째 요소의 이름으로 단일 SentiSynset 구하기 SentiSynset의 긍정 지수, 부정 지수 구하기 긍정 지수 - 부정 지수로 감성 지수 값 계산해 반환하기 main.py import nltk from nltk.corpus import wordnet as wn from nltk...
SentiWordNet과 SentiSynset SentiWordNet은 WordNet과 유사한 영어 어휘 사전입니다. 하지만 Synset별로 긍정 지수, 부정 지수, 객관성 지수를 할당해 준다는 차이가 있습니다. 여기에서 객관성 지수란 감성 지수와 반대되는 개념으로, 해당 단어가 얼마나 감성적 어조와 관계 없는지를 보여 주는 수치입니다. 그러면 SentiWordNet을 이용해 특정 단어의 감성 지수를 한번 확인해 볼게요. 먼저, sentiwordnet을 불러옵니다. from nltk.corpus import wordnet as wn from nltk.corpus import sentiwordnet as swn nltk.download('wordnet') nltk.download('sentiwordnet'..
대표적인 감성 어휘 사전으로 SentiWordNet이 있는데요. SentiWordNet을 사용하려면 먼저 WordNet에 대해 알아야 합니다. 본격적인 실습 전에 한번 살펴보겠습니다.WordNet 어휘 사전WordNet은 NLTK에서 제공하는 대규모 영어 어휘 사전입니다. 단어와 함께 해당 단어의 문맥상 의미가 저장되어 있습니다. 예를 들어 살펴볼게요.She had the lead in a new film.She found lead.두 문장에서 공통으로 사용된 단어 lead는 문맥에 따라 '이끌다'와 '납' 두 가지 의미를 가집니다. 동일한 단어인 lead가 사용된 문장에 따라 다른 의미를 갖는 것이죠. WordNet은 이러한 문맥상 의미를 나타내기 위해 Synset(Sets of Cognitive Sy..