본문 바로가기
소셜네트워크

[소셜네트워크] 자연어 처리 #1

by LSB98 2024. 10. 23.
728x90
반응형

1. 자연어 처리(NLP)란?

  • 자연어: 사람들이 사용하는 언어(예: 한국어, 영어)로, 의사소통의 수단입니다.
  • 자연어 처리(NLP): 자연어를 컴퓨터가 이해하고 분석할 수 있도록 디지털화하는 기술입니다.
    • 예: 이메일에서 스팸 여부를 자동으로 판단하기 위해 NLP를 활용.

 

NLP의 활용 분야:

  • 텍스트 분석(Text Analytics): 주어진 텍스트에서 유용한 인사이트를 추출합니다.
  • 자연어 이해(NLU): 컴퓨터가 문장을 이해하도록 만듭니다.
  • 자연어 생성(NLG): 컴퓨터가 인간이 이해할 수 있는 자연어로 문장을 생성합니다.

 

2. 텍스트 분석 도구

  • NLP 관련 라이브러리 및 도구:
    • NLTK: 자연어 처리와 관련된 다양한 기능 제공.
    • Gensim: 토픽 모델링에 유용한 라이브러리.
    • SpaCy: 고성능 NLP 라이브러리.
    • Stanford NLP: 강력한 품사 태깅과 파싱 기능 제공.

 

3. NLP의 주요 구성 요소

  1. 형태소 분석(Morphological Analysis):
    • 단어의 구조를 분석해 의미 단위로 나눕니다.
    • 어간(stem): 단어의 기본 형태(예: "walk"는 "walking"의 어간).
    • 접사(affix): 어근에 추가되어 의미를 확장하는 요소(예: "-ing", "-ed").
  2. 어휘 분석(Lexical Analysis):
    • 문장을 **토큰화(tokenization)**하여 단어로 분리하고, 각 단어의 **품사(PoS)**를 태깅합니다.
    • 예: "I am reading a book" → ['I', 'am', 'reading', 'a', 'book'].
  3. 구문 분석(Syntactic Analysis):
    • 문장의 문법 구조를 분석하여 주어, 동사, 목적어 등으로 나눕니다.
  4. 의미 분석(Semantic Analysis):
    • 문장의 의미를 파악합니다.
    • 모호성 처리: 같은 단어가 다른 의미로 쓰일 수 있는 경우를 해결합니다.

 

4. 전처리(Preprocessing) 과정

NLP에서는 데이터를 처리하기 전에 전처리를 통해 텍스트를 정리합니다.

1) 토큰화(Tokenization)

  • 문장을 구성하는 단위(토큰)로 나누는 과정입니다.
  • : "I am reading a book."
    → ['I', 'am', 'reading', 'a', 'book']
  • N-그램(N-gram):
    • Unigram: 한 단어씩 추출 (예: 'I', 'am', 'reading').
    • Bigram: 두 단어씩 추출 (예: 'I am', 'am reading').

2) 품사 태깅(PoS Tagging)

  • 각 단어에 **품사(PoS)**를 태깅하는 작업입니다.
  • 예: "She promised to back the bill."
    → 'promised': VBD(과거형 동사), 'back': RB(부사), 'bill': NN(명사)

3) 불용어 제거(Stopword Removal)

  • 문장의 의미에 큰 영향을 미치지 않는 단어를 제거합니다.
    • 예: 'the', 'a', 'is' 등.

from nltk.corpus import stopwords
stop_words = stopwords.words('english')
print(stop_words)

 

4) 텍스트 정규화(Text Normalization)

  • 같은 의미를 가지는 다른 형태의 단어를 통일합니다.
    • 예: 'USA'와 'United States'를 동일하게 처리.

5) 어간 추출(Stemming)과 표제어 추출(Lemmatization)

  • 어간 추출: 단어를 기본 형태로 변환(문맥 고려 안 함).
    • 예: 'running' → 'run'
  • 표제어 추출: 문맥을 고려하여 단어를 기본형으로 변환.
    • 예: 'am', 'are', 'is' → 'be'

from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize('running', pos='v'))

 

5. 개체명 인식(NER; Named Entity Recognition)

  • 텍스트에서 **특정 이름이나 개체(사람, 장소, 시간)**를 인식합니다.
  • 예: "오늘 오후 8시에 아주대학교에서 회의가 있습니다."
    → '아주대학교' → 조직 이름(Organization)

6. NLP의 응용

  • 스팸 필터링: 이메일에서 스팸 여부를 판단합니다.
  • 챗봇: 사용자의 질문에 자동으로 답변합니다.
  • 감정 분석(Sentiment Analysis): 소셜 미디어에서 사용자 감정을 분석합니다.

7. Python 코드 예제: 간단한 NLP 처리

아래 코드는 NLTK 라이브러리를 사용하여 토큰화, 품사 태깅, 불용어 제거를 수행하는 예제입니다.

 

import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

# 텍스트 데이터
text = "I am learning Natural Language Processing."

# 토큰화
tokens = word_tokenize(text)
print("Tokens:", tokens)

# 불용어 제거
stop_words = set(stopwords.words('english'))
filtered_tokens = [word for word in tokens if word.lower() not in stop_words]
print("Filtered Tokens:", filtered_tokens)

# 품사 태깅
pos_tags = nltk.pos_tag(filtered_tokens)
print("POS Tags:", pos_tags)

 

 

 

 

 

 

728x90
반응형