赞
踩
花了好几天时间学习了文本聚类,以下记录一下这次的学习,也整理了一些这方面的资料,和大家分享一下,一起交流学习,进步在于不断总结和分享以及相互交流。
文本聚类就是把相似的文档聚集成一簇,通过把文本转换成数值进行聚类,主要分为两个部分,第一个是构建词袋,也就是TF-IDF矩阵,也叫作文档词频矩阵,这个矩阵的每行是一篇文档,每列是一个词,矩阵的某个值代表该词在某篇文档的TF-IDF权重,就是把文档中的每个词转成它在这篇文档的重要性,用TF-IDF来表达这个词的重要程度,从而用数值来替换文本。这一步非常重要,可以说它占整个文本聚类过程的五分之四。关于TF-IDF的介绍。我认为解释的比较易懂的是这篇文档:http://mp.weixin.qq.com/s?__biz=MzA3MDg0MjgxNQ==&mid=2652390921&idx=1&sn=c89606ab9a3d55387305f54a05d26fd5&chksm=84da46d9b3adcfcff0c500c82ea01d1ba3a3d4beb50354cad084863c24b3ab5978bb0d015354&mpshare=1&scene=1&srcid=03255LjRoyvBkfIFoMPxmsBt#rd,这里解释得非常简单易懂了,大家可以阅读参考,(附:这篇文章是我在一个叫 数据挖掘入门与实战的微信公众号看到的,这个公众号经常推送一些数据挖掘的文章,非常实用,感兴趣的伙伴可以关注学习。)我总结一下构建词袋的几个关键步骤,首先是分词,分词是否准确影响聚类效果,关于jieba分词可以参考这篇文章http://www.oschina.net/p/jieba/,然后是计算TF值和IDF值,最后计算TF-IDF值,构建矩阵,这就是构建词袋的过程。
我们已经知道TF-IDF的含义了,下面具体说说代码实现。一开始我不了解已经有现成的库可以直接调用函数就可以计算TF-IDF值,直接可以得到词袋,所以我一开始是自己参考一些资料,根据TF-IDF的含义,一步步编代码计算出来。当我花了很多时间不断地调代码,终于运行正确的时候,突然找到关于scikit-learn库有相应的模块直接调用函数就可以计算。所以我两种方法都试了,以下我把两个方法都介绍一下。
1、直接计算法
import jieba
import os
import pandas as pd
import numpy as np
stopw = [line.strip().decode(‘utf-8’) for line in open(u’F:/自然语言处理/stops.txt’).readlines()]#读取停用词
def del_stop_words(words,stop_words):#定义一个将分词结果过滤掉停用词的函数
result=jieba.cut(words)#分词
new_words = []
for i in result:#对分词结果进行遍历
if i not in stop_words:#如果词语不在停用词表,是我们需要的词
new_words.append(i)#将保留下来的词追加到一个新的list中
return new_words
names = [ os.path.join(u’F:/自然语言处理/document’,h) for h in os.listdir(u’F:/自然语言处理/document’) ]#主要是读取document文件夹下所有的文本文件的路径,其中os.listdir是读取文本文件的名称如‘1.txt’、‘2.txt’
posts = [ open(name).read() for name in n
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。