[NLTK] 자연어 처리를 위한 패키지

2023. 10. 24. 13:59·인공지능(AI)/자연어처리(NLP)

자연어처리(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
'인공지능(AI)/자연어처리(NLP)' 카테고리의 다른 글
  • 프롬프트 러닝, Prompt Learning이란?
  • End-to-End Memory Networks, 엔드-투-엔드 메모리 네트워크
  • Prompt-Based Learning, 프롬프트 기반 학습
  • [LM 평가지표] Perplexity, PPL
계속지나가기
계속지나가기
NLP Engineer
  • 계속지나가기
    코딩스뮤
    계속지나가기
  • 전체
    오늘
    어제
    • 코딩스뮤:)
      • Algorithm
        • 백준 문제풀이
        • 프로그래머스 문제풀이
        • 알고리즘 이론
        • 자료구조
        • SW Expert Academy
      • 인공지능(AI)
        • LLMs
        • 자연어처리(NLP)
        • 컴퓨터비전(CV)
        • 딥러닝(DL)
        • 머신러닝(ML)
        • 인공지능기초수학
        • 선형대수학
      • 컴퓨터 세팅
      • Computer Science
        • 유닉스프로그래밍
        • 프로그래밍언어론
        • 디자인패턴
        • 클린코드
        • SW 영어
        • 리눅스
        • 논리회로
      • Server
        • Docker
  • 블로그 메뉴

    • 홈
    • Who Am I(CV)
    • 태그
  • 링크

    • 깃허브 주소
  • 공지사항

  • 인기 글

  • 태그

    ComputerVision
    군집화
    에지검출
    결정경계
    기계학습
    머신러닝
    NLP
    DigitalImageProcessing
    패턴인식
    f1-score
    DIP
    ML
    언어모델
    비용함수
    네트워크플로우
    SIFT
    최대유량
    경사하강법
    파이썬 클린코드
    MaximumFlow
    비지도학습
    알고리즘
    networkflow
    LM
    디지털이미지처리
    지도학습
    손실함수
    선형회귀
    machinelearning
    컴퓨터비전
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
계속지나가기
[NLTK] 자연어 처리를 위한 패키지

티스토리툴바