[파이썬] 텍스트 간 관계 추론과 시각화

텍스트 데이터는 현대 사회에서 매우 중요한 역할을 합니다. 텍스트 간 관계를 추론하고 시각화하는 것은 이러한 데이터를 다양한 방식으로 분석하고 이해하는 데 도움이 됩니다. Python 프로그래밍 언어는 이러한 작업을 수행하는데 강력한 도구와 라이브러리를 제공합니다.

이 블로그 포스트에서는 Python을 사용하여 텍스트 간 관계 추론과 시각화를 어떻게 수행할 수 있는지 살펴보겠습니다.

관계 추론

텍스트 간의 관계는 다양한 방식으로 추론할 수 있습니다. 여기에는 문장 유사도 계산, 주제 분류, 감정 분석 등이 포함될 수 있습니다.

문장 유사도 계산

문장 유사도는 두 개의 문장이 얼마나 비슷한지를 측정하는 척도입니다. 이는 텍스트 간의 관계를 파악하는데 사용될 수 있습니다.

import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk import pos_tag
from nltk.stem import WordNetLemmatizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

def calculate_sentence_similarity(sentence1, sentence2):
    stop_words = set(stopwords.words('english'))
    lemmatizer = WordNetLemmatizer()
    
    def preprocess(sentence):
        tokens = word_tokenize(sentence.lower())
        tokens = [lemmatizer.lemmatize(token) for token in tokens if token.isalpha()]
        tokens = [token for token in tokens if token not in stop_words]
        return ' '.join(tokens)
    
    preprocessed_sentence1 = preprocess(sentence1)
    preprocessed_sentence2 = preprocess(sentence2)
    
    tfidf_vectorizer = TfidfVectorizer()
    tfidf_matrix = tfidf_vectorizer.fit_transform([preprocessed_sentence1, preprocessed_sentence2])
    similarity_score = cosine_similarity(tfidf_matrix[0:1], tfidf_matrix[1:2])[0][0]
    
    return similarity_score

sentence1 = "Apple is a fruit."
sentence2 = "Apple produces iPhones."
similarity_score = calculate_sentence_similarity(sentence1, sentence2)
print(similarity_score)

주제 분류

주제 분류는 주어진 텍스트를 사전 정의된 카테고리에 할당하는 작업입니다. 이를 통해 텍스트 간의 관계를 파악할 수 있습니다.

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import SVC

def classify_text(text, categories, labels):
    tfidf_vectorizer = TfidfVectorizer()
    tfidf_matrix = tfidf_vectorizer.fit_transform(text)
    
    classifier = SVC()
    classifier.fit(tfidf_matrix, labels)
    
    category = classifier.predict(tfidf_vectorizer.transform([text]))[0]
    return categories[category]

text = "I love watching movies."
categories = ["Sports", "Movies", "Books"]
labels = [0, 1, 2]
classification = classify_text(text, categories, labels)
print(classification)

감정 분석

감정 분석은 텍스트의 감정을 파악하는 작업입니다. 이를 통해 텍스트 간의 감정적인 관계를 추론할 수 있습니다.

from textblob import TextBlob

def analyze_sentiment(text):
    blob = TextBlob(text)
    sentiment_score = blob.sentiment.polarity
    
    if sentiment_score > 0:
        return "Positive"
    elif sentiment_score < 0:
        return "Negative"
    else:
        return "Neutral"

text = "I am happy."
sentiment = analyze_sentiment(text)
print(sentiment)

시각화

텍스트 간의 관계를 시각화하는 것은 이해하기 쉽고 직관적인 방식입니다. Python의 다양한 시각화 라이브러리를 활용하여 텍스트 데이터를 시각화할 수 있습니다.

import matplotlib.pyplot as plt

def visualize_relation(relation_counts):
    relations = list(relation_counts.keys())
    counts = list(relation_counts.values())

    plt.bar(range(len(relations)), counts, align='center')
    plt.xticks(range(len(relations)), relations)
    plt.xlabel('Relation')
    plt.ylabel('Count')
    plt.title('Relation Visualization')
    plt.show()

relation_counts = {'is-a': 10, 'produces': 8, 'loves': 5}
visualize_relation(relation_counts)

Python을 사용하여 텍스트 간 관계를 추론하고 시각화하는 방법을 살펴보았습니다. 이러한 작업을 통해 텍스트 데이터를 더 잘 이해하고 분석할 수 있습니다.

텍스트 간의 관계 추론과 시각화는 자연어 처리 분야에서 매우 중요한 주제입니다. Python 프로그래밍 언어는 다양한 라이브러리와 도구를 제공하여 이러한 작업을 쉽게 수행할 수 있도록 도와줍니다.