대표적인 감성 어휘 사전으로 SentiWordNet이 있는데요. SentiWordNet을 사용하려면 먼저 WordNet에 대해 알아야 합니다.
본격적인 실습 전에 한번 살펴보겠습니다.
WordNet 어휘 사전
WordNet은 NLTK에서 제공하는 대규모 영어 어휘 사전입니다. 단어와 함께 해당 단어의 문맥상 의미가 저장되어 있습니다. 예를 들어 살펴볼게요.
- She had the lead in a new film.
- She found lead.
두 문장에서 공통으로 사용된 단어 lead는 문맥에 따라 '이끌다'와 '납' 두 가지 의미를 가집니다. 동일한 단어인 lead가 사용된 문장에 따라 다른 의미를 갖는 것이죠. WordNet은 이러한 문맥상 의미를 나타내기 위해 Synset(Sets of Cognitive Synonyms)을 제공합니다. Synset은 특정 단어의 품사와 유의어 목록을 통해 단어의 문맥상 의미를 나타냅니다. 한번 확인해 볼게요.
먼저 어휘 사전인 wordnet을 불러옵니다.
from nltk.corpus import wordnet as wn
다음으로 WordNet을 이용해 lead의 Synset을 확인해 보겠습니다. 특정 단어의 Synset을 추출할 때에는 wn.synsets()을 사용합니다.
synsets = wn.synsets('lead')
print(synsets)
반환된 리스트의 각 요소들이 전부 Synset입니다. 결과를 좀 더 자세히 살펴보겠습니다.
Synset은 Synset('단어, 품사, 순번')의 형태를 가집니다. 그리고 하나의 Synset은 단어가 가진 하나의 의미에 해당합니다. lead라는 단어의 의미가 여러 개이기 때문에 Synset도 여러 개인 것이죠. 그래서 Synset('lead.n.01')과 Synset('lead.n.02')처럼 단어의 형태와 품사가 같더라도 의미가 다른 경우를 순번으로 구분합니다.
각 순번에 해당하는 정확한 단어의 의미는 definition() 함수로 확인할 수 있습니다.
print(wn.synset('lead.n.01').definition())
print(wn.synset('lead.n.02').definition())
둘의 의미에 분명 차이가 있네요. 순번은 좀 더 일반적으로 많이 사용되는 의미가 앞 번호로 부여되기 때문에, 보통은 앞쪽 인덱스에 있는 결과를 분석에 많이 활용합니다.
또 lead와 의미가 비슷한 다른 단어들도 lead의 Synset 목록에 포함됩니다. Synset('star.n.04'), Synset('tip.n.03) 등이 그런 경우죠.
마지막으로 같은 단어가 품사에 따라 의미가 다를 수도 있는데요. 위의 실행 결과에서 Synset('lead.n.01')과 Synset('lead.v.01')이 그런 경우죠. 이런 경우에는 특별히 원하는 품사의 Synset만 따로 추출해 사용하고 싶을 수 있는데요. 그럴 때에는 wn.synsets()의 파라미터로 단어와 품사에 대한 정보를 함께 넘겨 주면 됩니다. 아래는 lead의 Synset 중 품사가 명사인 경우만 추출하는 예시입니다.
synsets = wn.synsets('lead', 'n')
print(synsets)
참고로, WordNet은 품사 구분의 기준으로 WordNet POS Tag를 사용합니다. 앞에서 배웠듯이 WordNet POS Tag에는 wn.NOUN(명사), wn.ADJ(형용사), wn.ADV(부사), wn.VERB(동사) 등이 있는데요. 각각을 줄여서 n, a, r, v로도 표현합니다. 따라서 위에서 wn.synsets()의 파라미터로 n을 넘긴 코드는 아래와 같이 사용할 수도 있습니다.
wn.synsets('lead', wn.NOUN)
단어의 품사에 따라 감성 지수는 달라집니다. 따라서 감성 지수를 정확하게 계산하려면 원하는 품사의 Synset을 정확히 지정하여 사용해야 합니다. 이 점 꼭 기억해 주세요.
'Data Analysis > Natural Language Processing(NLP)' 카테고리의 다른 글
감성 지수 구하기 실습 (0) | 2023.07.05 |
---|---|
SentiWordNet (0) | 2023.07.04 |
감성 분석이란? (0) | 2023.06.18 |
패딩(Padding) (0) | 2023.06.18 |
정수 인코딩 실습 (0) | 2023.06.15 |