키워드 추출·텍스트 마이닝
키워드 추출·텍스트 마이닝 워크플로우
문서 더미에서 "무엇에 대한 글인가"를 빠르게 파악하려면 키워드 추출이 필요합니다.
한국어에서 키워드는 대부분 명사이므로, 바른으로 명사를 정확히 뽑아 빈도를 세는 것이
가장 견고한 텍스트 마이닝 출발점입니다.
문제 상황
- 공백으로만 단어를 나누면
데이터를,데이터가처럼 조사가 붙어 같은 단어가 따로 집계됩니다. - 고유명사(인명·조직명)와 일반명사를 구분하지 못해 키워드가 뭉뚱그려집니다.
- 복합명사가 의도와 다르게 쪼개지거나 붙어 빈도가 왜곡됩니다.
바른을 어떻게 적용하나
문서를 형태소 분석해 체언만 추출하고, 고유명사(NNP)와 일반명사(NNG)를 구분해 집계합니다. 조사·어미가 제거되므로 같은 단어가 하나의 키로 모입니다.
graph TD
DOCS[문서 모음] --> TAG[바른 형태소 분석];
TAG --> POS[품사별 추출];
POS --> NNG[일반명사 NNG];
POS --> NNP[고유명사 NNP];
NNG --> CNT[빈도 집계];
NNP --> CNT;
CNT --> TOP[상위 키워드];
from collections import Counter
from bareunpy import Tagger
tagger = Tagger("koba-XXXX-...", "localhost")
def extract_keywords(docs, top_n=5):
"""문서 모음에서 명사 빈도 기준 상위 키워드를 추출합니다."""
counter = Counter()
for doc in docs:
res = tagger.tags([doc])
# 일반명사·고유명사만 키워드로 집계
for morph, tag in res.pos():
if tag in ("NNG", "NNP"):
counter[morph] += 1
return counter.most_common(top_n)
docs = [
"바른은 한국어 형태소 분석기입니다.",
"형태소 분석으로 키워드를 추출합니다.",
"한국어 자연어처리에 형태소 분석이 쓰입니다.",
]
print(extract_keywords(docs))
형태소, 분석이 핵심 키워드로 올라오고, 조사가 붙은 변형은 하나로 합쳐졌습니다.
결과와 이점
| 방식 | 단어 단위 | 고유명사 구분 | 신뢰도 |
|---|---|---|---|
| 공백 분리 | 조사 포함 | 불가 | 낮음 |
| 바른 명사 추출 | 명사 원형 | NNP/NNG 구분 | 높음 |
활용
res.nouns()로 한 번에 체언만 받을 수도 있습니다.
인명·조직명만 골라낼 때는 pos()에서 NNP만 필터링하세요.
자주 묻는 질문
Q. 불용어(stopword)는 어떻게 처리하나요?
명사 중에도 것, 수, 때처럼 의미가 약한 의존명사(NNB)가 있습니다.
이런 단어는 별도 불용어 목록으로 거르거나, 의존명사(NNB)를 집계에서 제외하세요.
Q. 고유명사만 뽑고 싶어요.
pos() 결과에서 태그가 NNP인 형태소만 모으면 인명·지명·조직명 등 고유명사 키워드만 얻습니다.
Q. 키워드 가중치는 어떻게 주나요?
단순 빈도 외에 TF-IDF를 적용하면 문서 특이 키워드가 잘 드러납니다. 이때도 토큰 단위로 바른 명사를 쓰면 가중치 계산이 안정적입니다.
관련 문서
- 형태소 분석 API(AnalyzeSyntax) — 명사 추출에 쓰는 분석 API
- 품사 태그표 — NNG·NNP·NNB 등 태그 의미
- 뉴스 핵심어 추출 사례 — 고유명사 중심 응용
- RAG 한국어 chunking — 명사 추출을 검색 색인에 활용
Q. 한국어 텍스트 마이닝에 형태소 분석기가 꼭 필요한가요?
네. 한국어는 명사에 조사가 붙어 한 어절을 이루므로, 공백으로만 나누면 데이터를·데이터가가 서로 다른
단어로 집계됩니다. 바른 형태소 분석으로 체언만 뽑으면 조사·어미가 제거되어 같은 단어가 하나로 모이고,
고유명사(NNP)와 일반명사(NNG)를 구분해 더 정확한 키워드와 빈도 통계를 얻습니다.
도움이 되었나요?