[python] NLTK를 사용해 텍스트의 동적 특성을 분석하는 방법은 무엇인가요?
Natural Language Toolkit (NLTK)는 Python에서 자연어 처리 작업을 수행하는 데 사용되는 강력한 라이브러리입니다. 그 중에서도 텍스트의 동적 특성을 분석하기 위해 다양한 기능을 활용할 수 있습니다. 여기에는 텍스트의 단어 빈도, 문서 간 유사도, 단어간 관계 등이 포함됩니다.
먼저, 텍스트의 단어 빈도를 분석하는 방법을 알아보겠습니다. NLTK의 FreqDist
클래스를 사용하여 텍스트에서 각 단어의 출현 빈도를 계산할 수 있습니다. 다음은 이에 대한 예시 코드입니다:
import nltk
from nltk import FreqDist
# 텍스트 데이터
text = "Python은 강력한 프로그래밍 언어입니다. Python은 데이터 처리에도 자주 사용됩니다."
# 단어 토큰화
tokens = nltk.word_tokenize(text)
# 단어 빈도 계산
fdist = FreqDist(tokens)
# 단어 빈도 출력
for word, freq in fdist.items():
print(f"{word}: {freq}")
다음으로, NLTK를 사용하여 문서 간 유사도를 계산하는 방법을 살펴보겠습니다. nltk.similarity
모듈을 사용하면 문서 간 유사도를 계산하는 여러 알고리즘을 활용할 수 있습니다. 여기에는 Jaccard
유사도, Cosine
유사도 등이 포함됩니다. 다음은 이에 대한 예시 코드입니다:
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk import FreqDist
from nltk import jaccard_distance, cosine_distance
# 문서 데이터
document1 = "Python은 강력한 프로그래밍 언어입니다."
document2 = "Python은 데이터 처리에도 자주 사용됩니다."
# 문서 전처리
stop_words = set(stopwords.words('english'))
tokens1 = [word for word in word_tokenize(document1) if word.lower() not in stop_words]
tokens2 = [word for word in word_tokenize(document2) if word.lower() not in stop_words]
# 단어 빈도 계산
fdist1 = FreqDist(tokens1)
fdist2 = FreqDist(tokens2)
# Jaccard 유사도 계산
jaccard_sim = 1 - jaccard_distance(set(tokens1), set(tokens2))
# Cosine 유사도 계산
cosine_sim = 1 - cosine_distance(list(fdist1.values()), list(fdist2.values()))
print(f"Jaccard 유사도: {jaccard_sim}")
print(f"Cosine 유사도: {cosine_sim}")
마지막으로, NLTK를 사용하여 단어 간의 관계를 분석하는 방법을 알아보겠습니다. nltk
의 wordnet
모듈을 사용하면 단어 간의 상위-하위, 유의어, 반의어 등의 관계를 알 수 있습니다. 다음은 이에 대한 예시 코드입니다:
from nltk.corpus import wordnet
# 단어 간의 관계 분석
synonyms = []
antonyms = []
# 단어 검색
for syn in wordnet.synsets("good"):
for lemma in syn.lemmas():
synonyms.append(lemma.name())
if lemma.antonyms():
antonyms.append(lemma.antonyms()[0].name())
print(f"유의어: {synonyms}")
print(f"반의어: {antonyms}")
이와 같이 NLTK를 사용하면 텍스트의 동적 특성을 분석하는 다양한 기능을 활용할 수 있습니다. NLTK는 자연어 처리에 대한 다양한 기능을 제공하므로, 해당 문제에 적합한 메서드와 알고리즘을 조합하여 사용할 수 있습니다.
참고 문서: