[python] NLTK를 사용해 문서 군집화를 수행하는 방법은 무엇인가요?

=========================================================

NLTK(Natural Language Toolkit)는 파이썬에서 자연어 처리 작업을 수행하기 위한 최고의 도구 중 하나입니다. NLTK를 사용하여 문서 군집화를 수행하는 방법을 알아보겠습니다.

Step 1: 필요한 라이브러리 및 데이터 불러오기

NLTK를 사용하기 위해 먼저 필요한 라이브러리를 가져옵니다.

import nltk
from nltk.cluster import KMeansClusterer, euclidean_distance
from nltk.tokenize import sent_tokenize, word_tokenize
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer

nltk.download('punkt')
nltk.download('stopwords')
nltk.download('wordnet')

Step 2: 문서 전처리

문서를 군집화하기 전에 문서를 정제해야 합니다. 문서를 문장으로 토큰화하고, 단어로 토큰화한 뒤에 불용어를 제거하고, 단어를 원형으로 변환하는 등의 전처리 과정을 수행합니다.

def preprocess_documents(documents):
    sentences = [sent_tokenize(document) for document in documents]
    words = [[word_tokenize(sentence) for sentence in document] for document in sentences]

    stop_words = set(stopwords.words('english'))
    lemmatizer = WordNetLemmatizer()

    preprocessed_documents = []
    for doc in words:
        preprocessed_doc = []
        for sentence in doc:
            preprocessed_sentence = [lemmatizer.lemmatize(word.lower()) for word in sentence if word.lower() not in stop_words]
            preprocessed_doc.append(preprocessed_sentence)
        preprocessed_documents.append(preprocessed_doc)
    
    return preprocessed_documents

Step 3: TF-IDF 벡터 생성

문서를 벡터 형태로 표현하여 군집화를 수행하기 위해 TF-IDF(Term Frequency-Inverse Document Frequency) 벡터를 생성합니다.

from sklearn.feature_extraction.text import TfidfVectorizer

def create_tfidf_vector(documents):
    all_sentences = [sentence for doc in documents for sentence in doc]
    preprocessed_sentences = [" ".join(sentence) for sentence in all_sentences]

    vectorizer = TfidfVectorizer()
    tfidf_matrix = vectorizer.fit_transform(preprocessed_sentences)
    
    return tfidf_matrix.toarray()

Step 4: K-Means 군집화 수행

전처리된 문서와 생성된 TF-IDF 벡터를 사용하여 K-Means 군집화를 수행합니다.

def perform_clustering(tfidf_matrix, num_clusters):
    clusterer = KMeansClusterer(num_clusters, euclidean_distance)
    
    clusters = clusterer.cluster(tfidf_matrix, assign_clusters=True)
    
    return clusters

Step 5: 결과 확인

수행된 군집화 결과를 확인합니다.

def print_clusters(documents, clusters):
    for i, cluster in enumerate(clusters):
        print("Cluster", i+1, ":", documents[i])

위의 과정을 따라하면 NLTK를 사용하여 문서 군집화를 수행할 수 있습니다. 이를 통해 비슷한 주제를 가진 문서들을 묶어서 효율적으로 분석하거나 조직할 수 있습니다.

참고 자료