用Python实现文档聚类

488 查看

title

在本教程中,我会利用 Python 来说明怎样聚类一系列的文档。我所演示的实例会识别出 top 100 电影的(来自 IMDB 列表)剧情简介的隐藏结构。关于这个例子的详细讨论在初始版本里。本教程包括:

整个项目在我的 github repo 都可以找到。其中‘cluster_analysis ‘工作簿是一个完整的版本;‘cluster_analysis_web’ 为了创建教程则经过了删减。欢迎下载代码并使用‘cluster_analysis’ 进行单步调试(step through)。

如果你有任何问题,欢迎用推特来联系我 @brandonmrose

在此之前,我先在前面导入所有需要用到的库

出于走查的目的,想象一下我有 2 个主要的列表:

  • ‘titles’:按照排名的影片名称
  • ‘synopses’:对应片名列表的剧情简介

我在 github 上 po 出来的完整工作簿已经导入了上述列表,但是为了简洁起见,我会直接使用它们。其中最最重要的是 ‘synopses’ 列表了,‘titles’ 更多是作为了标记用的。

停用词,词干化与分词

本节我将会定义一些函数对剧情简介进行处理。首先,我载入 NLTK 的英文停用词列表。停用词是类似“a”,“the”,或者“in”这些无法传达重要意义的词。我相信除此之外还有更好的解释。

接下来我导入 NLTK 中的 Snowball 词干分析器(Stemmer)词干化(Stemming)的过程就是将词打回原形。

以下我定义了两个函数:

  • tokenize_and_stem:对每个词例(token)分词(tokenizes)(将剧情简介分割成单独的词或词例列表)并词干化
  • tokenize_only: 分词即可

我利用上述两个函数创建了一个重要的字典,以防我在后续算法中需要使用词干化后的词(stems)。出于展示的目的,后面我又会将这些词转换回它们原本的的形式。猜猜看会怎样,我实在想试试看!