用Python实现文档聚类
admin
2023-07-31 00:46:09
0

title

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

  • 对所有剧情简介分词(tokenizing)和词干化(stemming)
  • 利用 tf-idf 将语料库转换为向量空间(vector space)
  • 计算每个文档间的余弦距离(cosine distance)用以测量相似度
  • 利用 k-means 算法进行文档聚类
  • 利用多维尺度分析(multidimensional scaling)对语料库降维
  • 利用 matplotlib 和 mpld3 绘制输出的聚类
  • 对语料库进行Ward 聚类算法生成层次聚类(hierarchical clustering)
  • 绘制 Ward 树状图(Ward dendrogram)
  • 利用 隐含狄利克雷分布(LDA) 进行主题建模

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

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

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

12345678 import numpy as npimport pandas as pdimport nltkimport reimport osimport codecsfrom sklearn import feature_extractionimport mpld3

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

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

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

12 print titles[:10] #前 10 个片名 

1 [\’The Godfather\’, \’The Shawshank Redemption\’, \”Schindler\’s List\”, \’Raging Bull\’, \’Casablanca\’, \”One Flew Over the Cuckoo\’s Nest\”, \’Gone with the Wind\’, \’Citizen Kane\’, \’The Wizard of Oz\’, \’Titanic\’]

停用词,词干化与分词

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

12 # 载入 nltk 的英文停用词作为“stopwords”变量stopwords = nltk.corpus.stopwords.words(\’english\’)

1 print stopwords[:10]

1 [\’i\’, \’me\’, \’my\’, \’myself\’, \’we\’, \’our\’, \’ours\’, \’ourselves\’, \’you\’, \’your\’]

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

123 # 载入 nltk 的 SnowballStemmer 作为“stemmer”变量from nltk.stem.snowball import SnowballStemmerstemmer = SnowballStemmer(\”english\”)

以下我定义了两个函数:

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

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

1234567891011121314151617181920212223 # 这里我定义了一个分词器(tokenizer)和词干分析器(stemmer),它们会输出给定文本词干化后的词集合 def tokenize_and_stem(text)ndonrose.org/clustering\”>brandonrose。欢迎加入翻译组。

title

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

  • 对所有剧情简介分词(tokenizing)和词干化(stemming)
  • 利用 tf-idf 将语料库转换为向量空间(vector space)
  • 计算每个文档间的余弦距离(cosine distance)用以测量相似度
  • 利用 k-means 算法进行文档聚类
  • 利用多维尺度分析(multidimensional scaling)对语料库降维
  • 利用 matplotlib 和 mpld3 绘制输出的聚类
  • 对语料库进行Ward 聚类算法生成层次聚类(hierarchical clustering)
  • 绘制 Ward 树状图(Ward dendrogram)
  • 利用 隐含狄利克雷分布(LDA) 进行主题建模

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

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

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

12345678 import numpy as npimport pandas as pdimport nltkimport reimport osimport codecsfrom sklearn import feature_extractionimport mpld3

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

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

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

12 print titles[:10] #前 10 个片名 

1 [\’The Godfather\’, \’The Shawshank Redemption\’, \”Schindler\’s List\”, \’Raging Bull\’, \’Casablanca\’, \”One Flew Over the Cuckoo\’s Nest\”, \’Gone with the Wind\’, \’Citizen Kane\’, \’The Wizard of Oz\’, \’Titanic\’]

停用词,词干化与分词

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

12 # 载入 nltk 的英文停用词作为“stopwords”变量stopwords = nltk.corpus.stopwords.words(\’english\’)

1 print stopwords[:10]

1 [\’i\’, \’me\’, \’my\’, \’myself\’, \’we\’, \’our\’, \’ours\’, \’ourselves\’, \’you\’, \’your\’]

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

123 # 载入 nltk 的 SnowballStemmer 作为“stemmer”变量from nltk.stem.snowball import SnowballStemmerstemmer = SnowballStemmer(\”english\”)

以下我定义了两个函数:

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

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

1234567891011121314151617181920212223 # 这里我定义了一个分词器(tokenizer)和词干分析器(stemmer),它们会输出给定文本词干化后的词集合 def tokenize_and_stem(text)-plain-button\” title=\”纯文本显示代码\”>

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...