728x90
반응형
🎯 학습목표
- Colab 환경에서 한글 텍스트 데이터를 불러오고 전처리한다.
- 텍스트마이닝의 기본 개념과 흐름을 이해한다.
- 토큰화, 정규표현식, 형태소 분석, 불용어 제거, 이모지 제거를 실습한다.
- 실제 쇼핑리뷰 데이터를 대상으로 빈도분석을 수행한다.
🗂️ 1️⃣ Google Colab 환경 설정
# 현재 디렉토리 확인
!pwd
# 구글 드라이브 연결
from google.colab import drive
drive.mount('/content/drive')
# 작업 폴더로 이동
%cd /content/drive/MyDrive/오르미 1기/텍스트마이닝
# 경로 확인
!pwd
✅ 이렇게 하면 Colab이 구글 드라이브와 연결되어 데이터 파일(.txt, .csv 등)을 불러올 수 있습니다.
📚 2️⃣ 텍스트마이닝 개요
| 개념 | 설명 |
|---|---|
| Text Mining | 비정형 텍스트에서 의미를 추출하거나 정형 데이터로 변환하는 기술 |
| 자연어처리 (NLP) | 인간의 언어를 컴퓨터가 이해하고 처리하도록 하는 기술 |
| 말뭉치 (Corpus) | 분석에 사용되는 전체 텍스트 데이터 |
| 문서 (Document) | 말뭉치를 구성하는 개별 텍스트 단위 |
🧾 3️⃣ 텍스트마이닝 프로세스
데이터 수집 → 전처리 → 토큰화/정제 → 불용어 제거 → 빈도분석 → 시각화/모델링
(그림으로 PPT에 들어갈 때는 파이프라인 형식으로 표현)
🧩 4️⃣ 빈도분석 (Frequency Analysis)
✅ 데이터 불러오기
import pandas as pd
naver_df = pd.read_csv('./data/naver_shopping.txt', sep='\t', header=None)
naver_df.columns = ['별점', '리뷰']
naver_df.head()
🔹 토큰화(Tokenization)
tokens = [t for doc in naver_df.loc[:1000, '리뷰'] for t in doc.split(" ")]
“리뷰 전체를 띄어쓰기 기준으로 단어(토큰)로 분리”
🔹 단어 빈도 세기
from collections import Counter
counter = Counter(tokens)
counter.most_common(10)
등장 빈도가 높은 상위 단어 10개 출력
🧪 실습: “배송” 관련 단어만 분석
# 1. '배송'이 들어간 리뷰만 추출
배송_reviews = naver_df[naver_df['리뷰'].str.contains('배송')]
# 2. 토큰화
배송_tokens = [t for doc in 배송_reviews['리뷰'] for t in doc.split(" ")]
# 3. 빈도 카운트
from collections import Counter
배송_counter = Counter(배송_tokens)
배송_counter.most_common(20)
✅ 결과: “빠르다”, “좋아요”, “포장”, “정확” 등의 단어가 상위권에 나타남.
✳️ 5️⃣ 정규표현식 (Regular Expression)
문자열에서 패턴 기반으로 텍스트를 탐색·정제할 때 사용합니다.
예시 — 전화번호 추출
import re
p = re.compile("010-?[0-9]{4}-?\\d{4}")
p.search("tel : 010-1234-5678")
✅ re 모듈을 사용하면 패턴 검출, 치환, 제거가 가능함.
🔹 리뷰 데이터 정제
from tqdm import tqdm
p = re.compile("[ㅋㅎㅇ~!?.0-9a-zA-Z]+") # 제거할 패턴 정의
clean_reviews = []
for doc in tqdm(배송_reviews['리뷰']):
temp_tokens = []
for t in doc.split(" "):
if p.search(t): # 불필요한 패턴 발견 시 건너뛰기
continue
temp_tokens.append(t)
clean_reviews.append(" ".join(temp_tokens))
✅ 반복 글자, 숫자, 영어, 특수문자 제거 완료.
🧠 6️⃣ 형태소 분석 (Morphological Analysis)
형태소 분석은 문장을 의미를 가지는 최소 단위(형태소)로 분리하는 과정입니다. 한글은 조사가 많기 때문에 형태소 분석기 사용이 필수입니다.
🔹 Konlpy 설치
!pip install konlpy
✅ Mecab 설치 (Colab 전용)
!git clone https://github.com/SOMJANG/Mecab-ko-for-Google-Colab.git
%cd Mecab-ko-for-Google-Colab
!bash install_mecab-ko_on_colab_light_220429.sh
🔹 형태소 분석기 비교
| 분석기 | 특징 |
|---|---|
| Okt | 신조어에 강함, 속도 보통 |
| Kkma | 품사 분석 매우 정교하지만 느림 |
| Mecab | 속도 빠르고 정확도 높음 (리눅스 전용) |
🔹 Mecab 사용 예시
from konlpy.tag import Mecab
mecab = Mecab()
mecab.morphs("아버지가방에들어가신다.")
# ['아버지', '가', '방', '에', '들어가', '신다', '.']
🔹 배송리뷰 형태소 분석
from tqdm import tqdm
clean_reviews_morphs = []
for doc in tqdm(clean_reviews):
result = mecab.morphs(doc)
clean_reviews_morphs.append(" ".join(result))
🔹 한 글자 제거 후 빈도분석
clean_reviews2 = []
for doc in tqdm(clean_reviews_morphs):
temp_tokens = [t for t in doc.split(" ") if len(t) > 1]
clean_reviews2.append(" ".join(temp_tokens))
🔹 명사·형용사만 추출
from collections import Counter
nouns_adjs_with_tags = []
for doc in tqdm(clean_reviews):
for word, tag in mecab.pos(doc):
if tag.startswith('N') or tag.startswith('VA'):
nouns_adjs_with_tags.append((word, tag))
명사_형용사_counter = Counter(nouns_adjs_with_tags)
명사_형용사_counter.most_common(20)
✅ 배송 관련 명사·형용사 상위 단어 → “상품”, “배송”, “빠르”, “좋다”, “정확하다”, “포장” 등.
💬 7️⃣ Okt 형태소 분석기 실습
from konlpy.tag import Okt
okt = Okt()
clean_reviews_morphs_okt = []
for doc in tqdm(clean_reviews):
result = okt.pos(doc, norm=True, stem=True)
temp = [word for word, tag in result if tag in ['Adjective', 'Noun']]
clean_reviews_morphs_okt.append(" ".join(temp))
✅ norm=True → “굿굿ㅋㅋ” → “굿” ✅ stem=True → “좋았어요” → “좋다”
🧮 8️⃣ Kiwi 형태소 분석기
!pip install kiwipiepy
from kiwipiepy import Kiwi
kiwi = Kiwi()
kiwi.tokenize("아버지가방에들어가신다.")
✅ 빠르고 경량화된 형태소 분석기 ✅ Colab, Windows 모두에서 작동
🔹 불용어(Stopwords)
- 의미 없는 단어(“그리고”, “이”, “그”) 제거
- 빈도가 너무 높거나 낮은 단어 제거
from kiwipiepy.utils import Stopwords
stopwords = Stopwords()
stopwords.add(('결과', 'NNG'))
kiwi.tokenize("분석 결과에서 불용어만 제외", stopwords=stopwords)
🎨 9️⃣ 이모지 제거
이모지는 유니코드 기반 → emoji 패키지로 제거 가능
!pip install emoji
import emoji
# 제거
emoji.replace_emoji("이야 맛도😢🙂☎️🚒")
# 의미만 유지
emoji.demojize("☎️🚒➕☑️🎀🥴👍맛도리")
# "전화번호_emoji 소방차_emoji 맛도리"
📘 전체 요약
| 단계 | 핵심 내용 |
|---|---|
| 빈도분석 | 자주 등장하는 단어로 주제 파악 |
| 정규표현식 | 불필요한 문자, 반복 문자 제거 |
| 형태소 분석 | 어근/조사 분리하여 정확한 단어 분석 |
| 불용어 처리 | 의미 없는 단어 제거 |
| 이모지 처리 | 감성 분석 시 노이즈 제거 |
| 결과 | “배송”, “빠르다”, “좋다” 등 주요 키워드 추출 성공 |
✨ 한 줄 요약
Colab에서 한글 리뷰 데이터를 불러와 정규표현식, 형태소 분석, 불용어·이모지 제거를 거쳐 텍스트를 깨끗하게 정제하고, 의미 있는 단어의 빈도분석을 수행하였다.
728x90
반응형
'학습 > AI' 카테고리의 다른 글
| 한국어 텍스트 감성분류 (0) | 2025.11.17 |
|---|---|
| 데이터 전처리 핵심 (0) | 2025.11.16 |
| 한글 텍스트 전처리와 감성분류 (0) | 2025.11.15 |
| RNN 핵심 정리 (0) | 2025.11.14 |
| 임베딩(Embedding) 이란? (0) | 2025.11.13 |