NLTK

Doya·2025년 4월 15일

ESTSOFT_AI개발7기

목록 보기
32/43

개요

  • NLTK 라이브러리 실습

참고 사이트
https://www.nltk.org/index.html

msg = "I like to pet the cat's soft fur."
sentence = "Don't waste your youth. you're not always young"
kor_sentence = '아름다운 도깨비 불, 외로운 도깨비는, 눈물많은 도깨비일뿐'

1. split()을 이용한 분류

  • split()은 문자열의 특정 구분자를 기준으로 나누는 함수
tokens1 = [x for x in msg.split(' ')]
tokens2= [x for x in sentence.split(' ')]
tokens_k = [x for x in kor_sentence.split(' ')]
print(tokens1)
print(tokens2)
print(tokens_k)

['I', 'like', 'to', 'pet', 'the', "cat's", 'soft', 'fur.']

["Don't", 'waste', 'your', 'youth.', "you're", 'not', 'always', 'young']

['아름다운', '도깨비', '불,', '외로운', '도깨비는,', '눈물많은', '도깨비일뿐']

2. Cleaning(정제)

  • 자연어 처리의 첫 단계로, 텍스트 데이터를 분석하기 쉽게 만드는 전처리 과정
  • 불필요한 문자나 구조 제거, 분석에 필요한 핵심 단어만 남기는 작업
# 간단한 예시 
sentence = sentence.replace(",", "")
tokens = [x for x in sentence.split(' ')]
print(tokens)

["Don't", 'waste', 'your', 'youth.', "you're", 'not', 'always', 'young']

3. NLTK-word_tokenize

  • 문장을 단어(토큰)단위로 나누는 함수
  • NLP에서 가장 기본이 되는 토큰화 작업 수행
sentence = sentence.replace(",", "")
tokens = word_tokenize(msg)
print(tokens)

kor_sentence = kor_sentence.replace(",", "")
tokens_k = word_tokenize(kor_sentence)
print(tokens_k)

['I', 'like', 'to', 'pet', 'the', 'cat', "'s", 'soft', 'fur', '.']

['아름다운', '도깨비', '불', '외로운', '도깨비는', '눈물많은', '도깨비일뿐']

4. NLTK-TreebankWordTokenizer

  • 펜 트리뱅크(Penn Treebank) 기준에 따라 단어를 나누는 단어 토크나이저
  • 영어 문장의 구문 구조 분석에 많이 사용
  • 문법적으로 정제된 토큰화 결과를 제공

펜 트리뱅크(Penn Treebank)
미국 펜실베니아 대학교에서 개발한 영어 말뭉치(Corpus)
문장마다 정교한 주석이 달려있는 언어 자원

5. TextBlod

  • Python에서 사용하기 쉬운 텍스트 처리 라이브러리
  • NLP작업을 단순화 하고, 개발자가 텍스트 데이터를 빠르고 쉽게 분석할 수 있게함
  • 감정 분석, 품사 태깅, 명사구 추출, 번역 및 언어 감지, 스펠링 체크 및 수정 등 다양한 기능을 제공
tokens1 = TextBlob(msg)
tokens2 = TextBlob(sentence)
tokens3 = TextBlob(kor_sentence)
print(tokens1)
print(tokens2)
print(tokens3)
print(tokens3.sentiment)
print(tokens1.sentiment)
print(tokens2.sentiment)

I like to pet the cat's soft fur.
Don't waste your youth. you're not always young
아름다운 도깨비 불, 외로운 도깨비는, 눈물많은 도깨비일뿐
Sentiment(polarity=0.0, subjectivity=0.0)
Sentiment(polarity=0.1, subjectivity=0.35)
Sentiment(polarity=-0.05, subjectivity=0.2)

TextBlob 라이브러리는 기본적으로 영어 자연어 처리에 최적화되어 있음
TextBlob의 주요 기능인 감성 분석, 품사 태깅, 명사구 추출 등은 주로 영어 텍스트에 대해 설계되었고, 이를 다른 언어에 적용하기 위해서는 추가적인 설정이나 자원이 필요

6. NLTK-RegexpTokenizer

  • 정규표현식을 기반으로 텍스트를 나누는 토크나이저
  • word_tokenize가 내부적으로 정해진 규칙을 따르는 반면, RegexpTokenizer은 사용자가 토큰화의 기준을 정의할 수 있음
tokenizer = RegexpTokenizer(r"[가-힣\w]+") # 정규식을 이용
print(tokenizer.tokenize(msg))
print(tokenizer.tokenize(sentence))
print(tokenizer.tokenize(kor_sentence))

['I', 'like', 'to', 'pet', 'the', 'cat', 's', 'soft', 'fur'] \n
['Don', 't', 'waste', 'your', 'youth', 'you', 're', 'not', 'always', 'young']\n
['아름다운', '도깨비', '불', '외로운', '도깨비는', '눈물많은', '도깨비일뿐']

7. NLTK-sent_tokenize

  • 텍스트를 문장 단위로 나누는 함수
  • 긴 글이나 단락에서 문장 단위로 분리해주는 역할

    sentences = "I met Mr. kim. He earned Ph.D this year."

token = sent_tokenize(sentences)
print(token)

['I met Mr. kim.', 'He earned Ph.D this year.']

8. 품사 구분 pos

words = word_tokenize(sentences)
tokens = nltk.pos_tag(words)
print(tokens)

[('I', 'PRP'), ('met', 'VBD'), ('Mr.', 'NNP'), ('kim', 'NNP'), ('.', '.'), ('He', 'PRP'), ('earned', 'VBD'), ('Ph.D', 'NNP'), ('this', 'DT'), ('year', 'NN'), ('.', '.')]

profile
안녕하세요. 도야입니다

0개의 댓글