자연어처리(NLP, Natural Language Processing)를 위해서는 각 테스크에 맞는 전처리(preprocessing)과정이 필수적으로 필요합니다. 본 게시글에서는 전처리를 위한 패키지인 NLTK를 간단한 예제와 함께 알아보도록 하겠습니다.
NLTK에서는 다양한 기능을 제공하지만, 본 글에서는 아래의 기능 위주로 다룹니다
- Searching Text
- Word Statistics
Searching Text
NLTK에서 제공하는 텍스트 예제로 진행하기 위해, book을 불러오도록 하겠습니다.
import nltk
from nltk.book import *
NLTK에서 book을 불러올 경우 아래의 9개의 책의 텍스트를 불러올 수 있습니다.
text1에 저장된 Moby-Dick으로 nltk를 적용해봅시다
1. concordance
언어학에서 concordance란 일반적으로 그 단어가 사용된 환경(문단)에 대한 인용이라는 뜻을 가집니다. 이 뜻과 비슷하게 NLTK에서 제공하는 concordance기능을 사용하면 text에 있는 특정 단어가 어떤 문맥에서 몇번 사용되었는지 쉽게 확인할 수 있습니다.
text1.concordance("sad")
text1.concordance("happy")
각각에 대한 결과는 아래와 같습니다.
2. dispersion_plot
전체 텍스트에 나타나는 특정 단어의 빈도를 시각화하고 싶다면 dispersion_plot을 사용하면 됩니다. y축은 text1의 문장 길이, x 축은 지정한 단어로, 그래프에 나타난 stripe는 n번째 문장에 지정 단어가 등장한다라고 해석 가능합니다.
text1.dispersion_plot(["sad", "happy"])
좀 더 자주 등장하는 단어로 찍어보게되면 아래와 같이 빽빽한 stripe 그래프가 나타납니다.
text1.dispersion_plot(["he", "she", "they", "I"])
Word Statistics
1. FreqDist()
FreqDist() 기능을 사용하면 text가 가지고 있는 단어 관련 통계를 더 쉽게 확인할 수 있습니다.
fdist1 = FreqDist(text1)
fdist1.most_common(50)
fdist1['whale']
fdist1.plot(50, cumulative=True)
- FreqDist.most_common(N) : 가장 높은 빈도수의 N개의 단어를 확인할 수 있습니다.
- FreqDist[WORD] : WORD의 빈도수를 확인할 수 있습니다.
- FreqDist.plot(N, cumulative=True): 가장 높은 빈도수의 N개의 단어의 누적빈도수 분포를 시각화할 수 있습니다.
추가로, 특정 길이 이상의 단어 중 특정 빈도 수 이상의 단어를 보고 싶다면 아래와 같이 사용하시면 됩니다. 예시는 길이가 12 글자 이상 단어 중 text에 15번 이상 등장한 단어를 알파벳 순으로 정렬한 결과입니다. 문장에 자주 사용되는 접속부사 등이 결과로 나온 것을 확인할 수 있습니다.
fdist1 = FreqDist(text1)
words = sorted(w for w in set(text1) if len(w) >= 12 and fdist1[w] >= 15)
2. collocation & n-grams
언어학에서 collocation이란 궁합이 잘 맞아 같이 붙어다니는 단어나 말들을 뜻하는데, 이 뜻과 비슷하게 NLTK에서 제공하는 collocation을 사용하면 특정 단어와 자주 쓰이는 단어 조합을 확인할 수 있습니다.
text1에서 자주 같이 등장하는 단어 예시를 collocations() 함수로 확인할 수 있는데, 예시에서는 "White Whale", "Father Mapple"과 같은 고유명사가 자주 같이 사용되는 것을 확인할 수 있습니다. 기본적으로 nltk에서 제공하는 collcation은 bigram으로 제공됩니다.
text1.collocations()
'인공지능(AI) > 자연어처리(NLP)' 카테고리의 다른 글
프롬프트 러닝, Prompt Learning이란? (0) | 2024.01.04 |
---|---|
End-to-End Memory Networks, 엔드-투-엔드 메모리 네트워크 (0) | 2022.08.18 |
Prompt-Based Learning, 프롬프트 기반 학습 (0) | 2022.08.08 |
[LM 평가지표] Perplexity, PPL (0) | 2022.02.04 |
[NLP] 워드투벡터(Word2Vec) (2) | 2021.10.13 |