基于Python的文本分析:电影剧情文本聚类实战

基于Python的文本分析:电影剧情文本聚类实战

【免费下载链接】text-analytics-with-python text-analytics-with-python是一个使用Python进行文本分析的教程,适合用于学习和掌握文本处理和分析技术。特点:内容详细、实例丰富、适合进阶学习。 【免费下载链接】text-analytics-with-python 项目地址: https://gitcode.com/gh_mirrors/te/text-analytics-with-python

文本聚类是自然语言处理(NLP)中的一项重要技术,它能够将相似的文档自动分组,帮助我们理解大量文本数据的内在结构。本文将基于电影剧情数据集,介绍如何使用Python实现文本聚类分析。

数据集准备与预处理

首先我们需要加载电影数据集,这个数据集包含电影标题和剧情简介(synopsis)两列:

import pandas as pd
import numpy as np

movie_data = pd.read_csv('movie_data.csv')
movie_titles = movie_data['Title'].tolist()
movie_synopses = movie_data['Synopsis'].tolist()

数据预处理是文本分析的关键步骤,我们需要对原始文本进行标准化处理:

from normalization import normalize_corpus
from utils import build_feature_matrix

# 文本标准化处理
norm_movie_synopses = normalize_corpus(movie_synopses,
                                      lemmatize=True,
                                      only_text_chars=True)

标准化处理包括词形还原(lemmatization)、去除特殊字符等操作,这能帮助我们减少词汇的变体形式,提高后续分析的准确性。

特征提取

文本数据需要转换为数值特征才能用于机器学习算法。这里我们使用TF-IDF方法提取特征:

# 提取TF-IDF特征
vectorizer, feature_matrix = build_feature_matrix(norm_movie_synopses,
                                                 feature_type='tfidf',
                                                 min_df=0.24, max_df=0.85,
                                                 ngram_range=(1, 2))

参数说明:

  • min_df=0.24:忽略在少于24%文档中出现的词
  • max_df=0.85:忽略在超过85%文档中出现的词
  • ngram_range=(1,2):同时考虑单个词和双词组合

这种设置可以过滤掉过于常见和过于罕见的词汇,保留有区分度的特征。

K-Means聚类

K-Means是最常用的聚类算法之一,实现简单且效果良好:

from sklearn.cluster import KMeans

def k_means(feature_matrix, num_clusters=5):
    km = KMeans(n_clusters=num_clusters,
                max_iter=10000)
    km.fit(feature_matrix)
    clusters = km.labels_
    return km, clusters

num_clusters = 5    
km_obj, clusters = k_means(feature_matrix=feature_matrix,
                          num_clusters=num_clusters)
movie_data['Cluster'] = clusters

我们设置聚类数为5,并将聚类结果添加到原始数据中。

聚类结果分析

为了更好地理解聚类结果,我们可以查看每个簇的关键特征和包含的电影:

def get_cluster_data(clustering_obj, movie_data, 
                    feature_names, num_clusters,
                    topn_features=10):
    # 实现细节略...
    
def print_cluster_data(cluster_data):
    # 实现细节略...

cluster_data = get_cluster_data(clustering_obj=km_obj,
                              movie_data=movie_data,
                              feature_names=feature_names,
                              num_clusters=num_clusters,
                              topn_features=5)
print_cluster_data(cluster_data)

这将输出每个簇的5个最具代表性的特征和属于该簇的电影列表,帮助我们理解每个簇的主题。

可视化展示

文本数据的可视化可以帮助我们直观地理解聚类效果:

import matplotlib.pyplot as plt
from sklearn.manifold import MDS
from sklearn.metrics.pairwise import cosine_similarity

def plot_clusters(num_clusters, feature_matrix,
                 cluster_data, movie_data,
                 plot_size=(16,8)):
    # 实现细节略...

plot_clusters(num_clusters=num_clusters, 
             feature_matrix=feature_matrix,
             cluster_data=cluster_data, 
             movie_data=movie_data,
             plot_size=(16,8))

这里使用了多维缩放(MDS)技术将高维特征降维到2D空间,并用不同颜色和标记表示不同簇。

其他聚类方法

除了K-Means,我们还尝试了其他两种聚类算法:

1. Affinity Propagation(近邻传播)

from sklearn.cluster import AffinityPropagation

def affinity_propagation(feature_matrix):
    sim = feature_matrix * feature_matrix.T
    sim = sim.todense()
    ap = AffinityPropagation()
    ap.fit(sim)
    clusters = ap.labels_          
    return ap, clusters

ap_obj, clusters = affinity_propagation(feature_matrix=feature_matrix)

近邻传播算法不需要预先指定簇的数量,它会自动确定合适的簇数。

2. 层次聚类

from scipy.cluster.hierarchy import ward, dendrogram

def ward_hierarchical_clustering(feature_matrix):
    cosine_distance = 1 - cosine_similarity(feature_matrix)
    linkage_matrix = ward(cosine_distance)
    return linkage_matrix
    
def plot_hierarchical_clusters(linkage_matrix, movie_data, figure_size=(8,12)):
    # 实现细节略...

linkage_matrix = ward_hierarchical_clustering(feature_matrix)
plot_hierarchical_clusters(linkage_matrix=linkage_matrix,
                         movie_data=movie_data,
                         figure_size=(8,10))

层次聚类生成树状图(dendrogram),可以直观地展示文档之间的相似性和聚类过程。

实际应用与思考

文本聚类在实际应用中有广泛用途:

  1. 电影推荐系统:通过聚类分析,可以发现具有相似剧情的电影,为用户推荐可能感兴趣的内容
  2. 文档管理:自动组织大量文档,提高信息检索效率
  3. 市场研究:分析客户反馈,发现共同主题和关注点

在实践中需要注意:

  • 不同聚类算法适用于不同场景,需要根据数据特点选择合适的算法
  • 文本预处理对结果影响很大,需要仔细调整参数
  • 聚类数量的确定可以结合领域知识和评估指标

通过本教程,我们学习了如何使用Python实现文本聚类分析,从数据预处理到多种聚类算法的应用,再到结果的可视化展示。这些技术可以广泛应用于各种文本分析场景。

【免费下载链接】text-analytics-with-python text-analytics-with-python是一个使用Python进行文本分析的教程,适合用于学习和掌握文本处理和分析技术。特点:内容详细、实例丰富、适合进阶学习。 【免费下载链接】text-analytics-with-python 项目地址: https://gitcode.com/gh_mirrors/te/text-analytics-with-python

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值