python 文本聚类

读取excel

excel 格式

excel.py

# -*- coding: utf-8 -*-

import  xdrlib ,sys
import xlrd
import json

def open_excel(file= '/home/lhy/data/data.xlsx'):
    try:
        data = xlrd.open_workbook(file)
        return data
    except Exception,e:
        print str(e)
#根据索引获取Excel表格中的数据   参数:file:Excel文件路径     colnameindex:表头列名所在行的所以  ,by_index:表的索引
def excel_table_byindex(file= '/home/lhy/data/data.xlsx',colnameindex=0,by_index=0):
    data = open_excel(file)
    table = data.sheets()[by_index]
    nrows = table.nrows #行数
    ncols = table.ncols #列数
    colnames =  table.row_values(colnameindex) #某一行数据
    list =[]
    for rownum in range(1,nrows):

         row = table.row_values(rownum)
         if row:
             app = {}
             for i in range(len(colnames)):
                app[colnames[i]] = row[i]
             list.append(app)
    return list

#根据名称获取Excel表格中的数据   参数:file:Excel文件路径     colnameindex:表头列名所在行的所以  ,by_name:Sheet1名称
#def excel_table_byname(file= '/home/lhy/data/data.xlsx',colnameindex=0,by_name=u'Sheet1'):
def excel_table_byname(file='/home/lhy/data/data.xlsx', colnameindex=0, by_name=u'word'):
    data = open_excel(file)
    table = data.sheet_by_name(by_name)
    nrows = table.nrows #行数
    colnames =  table.row_values(colnameindex) #某一行数据
    list =[]
    for rownum in range(1,nrows):
         row = table.row_values(rownum)
         if row:
             app = {}
             for i in range(len(colnames)):
                app[colnames[i]] = row[i]
             list.append(app)
    return list

def main():
   tables = excel_table_byindex()
   for row in tables:
       '''print row.decode('utf-8')'''
       wenti=row[u'问题']
      # wenti=wenti[1:len(wenti)-1]
       print json.dumps(wenti, encoding="UTF-8", ensure_ascii=False)
       #print type(row)

 #  tables = excel_table_byname()
  # for row in tables:
   #    print row

if __name__=="__main__":
    main()

分词

TextFenci.py

# -*- coding: UTF-8 -*-
import jieba.posseg as pseg
import excel
import json
def getWordXL():
     #words=pseg.cut("对这句话进行分词")
     list=excel.excel_table_byindex();
     aList = []
     for index in range(len(list)):
          wenti = list[index][u'问题']
          words = pseg.cut(wenti)
          word_str=""
          for key in words:
               #aList.insert()import json
              # print type(key)
               word_str=word_str+key.word+" "
              # print key.word,"  ",
          aList.insert(index,word_str)
     return aList,list  #第一个参数为分词结果,第儿歌参数为原始文档

def main():
     aList=getWordXL()
     print "1234"
     print json.dumps(aList, encoding="UTF-8", ensure_ascii=False)

if __name__=="__main__":
    main()

TF_IDF 权重生成

TF_IDF.py

# -*- coding: UTF-8 -*-
import jieba.posseg as pseg
import excel
import json
def getWordXL():
     #words=pseg.cut("对这句话进行分词")
     list=excel.excel_table_byindex();
     aList = []
     for index in range(len(list)):
          wenti = list[index][u'问题']
          words = pseg.cut(wenti)
          word_str=""
          for key in words:
               #aList.insert()import json
              # print type(key)
               word_str=word_str+key.word+" "
              # print key.word,"  ",
          aList.insert(index,word_str)
     return aList,list  #第一个参数为分词结果,第儿歌参数为原始文档

def main():
     aList=getWordXL()
     print "1234"
     print json.dumps(aList, encoding="UTF-8", ensure_ascii=False)

if __name__=="__main__":
    main()

k-means 聚类

KMeans.py

# -*- coding: utf-8 -*-
from sklearn.cluster import KMeans
import TF_IDF
import json,sys
reload(sys)
sys.setdefaultencoding('utf-8')
weight, textList = TF_IDF.getTFIDF()
def getCU(leibieNum):
    LEIBI=leibieNum    #100个类别
    #print "####################Start Kmeans:分成"+str(LEIBI)+"个类"

    clf = KMeans(n_clusters=LEIBI)

    s = clf.fit(weight)
    #print s

    # 20个中心点
    #print(clf.cluster_centers_)

    # 每个样本所属的簇
    #print(clf.labels_)
    i = 1
    textFencuList=[]
    for i in range(0,LEIBI):
        textFencu2=[]
        textFencuList.append(textFencu2)
    for i in range(len(clf.labels_)):
        try:
            textFencuList[clf.labels_[i - 1]].append(textList[i])
        except Exception, e:
            print "#######错误:"+str(clf.labels_[i - 1])+"  "+str(i)
    fo = open("/home/lhy/data/wbjl.txt", "wb")
    for index in range(len(textFencuList)):
        fo.write("\n#############################第"+str(index)+"个分类##################\n");  # 写入文件
        print ""
        print "#############################第"+str(index)+"个分类##################";
        print ""
        for ab in textFencuList[index]:
            thisword=json.dumps(ab, encoding="UTF-8", ensure_ascii=False)
            #thisword = json.dumps(ab)
            fo.write(thisword + "\n")  # 写入文件
            print thisword
    fo.close();
        # 用来评估簇的个数是否合适,距离越小说明簇分的越好,选取临界点的簇个数
    print("############评估因子大小,用来评估簇的个数是否合适,距离越小说明簇分的越好,选取临界点的簇个数:类别"+str(LEIBI)+"    因子"+str(clf.inertia_))
getCU(300)
'''for index in range(100,1000,10):
    getCU(index)
    '''
时间: 2024-10-31 12:27:21

python 文本聚类的相关文章

[python] Kmeans文本聚类算法+PAC降维+Matplotlib显示聚类图像

0 前言 本文主要讲述以下几点:        1.通过scikit-learn计算文本内容的tfidf并构造N*M矩阵(N个文档 M个特征词):        2.调用scikit-learn中的K-means进行文本聚类:        3.使用PAC进行降维处理,每行文本表示成两维数据:        4.最后调用Matplotlib显示聚类效果图. 文章更详细的内容参考:http://blog.csdn.net/eastmount/article/details/50473675由于涉及

[python] 基于k-means和tfidf的文本聚类代码简单实现

俗话说"外行看热闹,内行看门道",作为一个机器学习的门外汉,刚研究python机器学习scikit-learn两周时间,虽然下面这段程序可能对于那些专研算法或机器学习的人来说非常简单,但对于一些入门的同学和我自己还是非常有帮助的.如果文章中有错误或不足之处,还请你微微一笑,原谅之:当然也非常欢迎你提出建议或指正~ 基本步骤包括:         1.使用python+selenium分析dom结构爬取百度|互动百科文本摘要信息:         2.使用jieba结巴分词对文本进行中文

[python] 使用Jieba工具中文分词及文本聚类概念

        前面讲述了很多关于Python爬取本体Ontology.消息盒InfoBox.虎扑图片等例子,同时讲述了VSM向量空间模型的应用.但是由于InfoBox没有前后文和语义概念,所以效果不是很好,这篇文章主要是爬取百度5A景区摘要信息,再利用Jieba分词工具进行中文分词,最后提出文本聚类算法的一些概念知识.         相关文章:         [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒         [python爬虫] Seleni

文本聚类总结

摘要:文本聚类是搜索引擎和语义web的基本技术,这次本蛙和大家一起学习一下简单的文本聚类算法,可能不能直接用于实际应用中,但对于想学搜索技术的初学者还是有一定入门作用的.这里会用到TF/IDF权重,用余弦夹角计算文本相似度,用方差计算两个数据间欧式距离,用k-means进行数据聚类等数学和统计知识.关于这些概念可以去google,或者参考文本后的参考链接. 思路:计算两篇文档的相似度,最简单的做法就是用提取文档的TF/IDF权重,然后用余弦定理计算两个多维向量的距离.能计算两个文本间的距离后,用

评价函数-关于遗传算法的高维文本聚类问题

问题描述 关于遗传算法的高维文本聚类问题 目前的情况是:针对文本聚类的问题已做了预处理(当然特征提取的也不是特别完美..),目前用遗传算法对实际文本进行聚类,已经初步得到一个很好的聚类结果,中间有一点小创新,但是由于创新性不高,老师不让发论文... 在研究文本聚类的时候发现一问题.大家都知道,在特征表示时,因为数据的稀疏性会导致维数大,耗时等问题,就出现很多针对稀疏性的降维方法..(最近也看了很多像SPP等降维方法)但是我就是因为没有降维才得到了很好的聚类结果,而遗传算法的操作算子恰对原数据的稀

算法实现-文本聚类算法推荐------关于微博文本数据的

问题描述 文本聚类算法推荐------关于微博文本数据的 各位大牛兄弟,我想做个网络爬虫从新浪微博上爬取文本,然后再把文本归类,就是相似的文本聚集为一类,有没有舍算法啊?谢谢指教了,小弟才入门

文本聚类(1)——概念

什么是文本聚类 文本聚类是搜索引擎和语义web的基本技术,本文简单的文本聚类算法,对于想学搜索技 术的初学者有一定入门作用的.这里会用到TF/IDF权重,用余弦夹角计算文本相似度, 用方差计算两个数据间欧式距离,用k-means进行数据聚类等数学和统计知识. 文本聚类(Text clustering)文档聚类主要是依据著名的聚类假设:同类的文档相似度较大,而不同类的文档相似度较小.作为一种无监督的机器学习方法,聚类由于不需要训练过程,以及不需要预先对文档手工标注类别,因此具有一定的灵活性和较高的

python 文本下载完后多出failed to send a complete request

问题描述 python 文本下载完后多出failed to send a complete request python 下载服务端的文本数据,将服务端的文本和下载下来的文件进行MD5验证比较,MD5码不一致,发现下载下来的文本多出了 HTTP/1.1 408 Request Timed Out Date: Tue, 28 Apr 2015 06:37:12 GMT Content-Type: text/html; charset=UTF-8 Connection: close Cache-Co

LJCluster文本聚类技术中间件

问题描述 文本聚类是基于相似性算法的自动聚类技术,自动对大量无类别的文档进行归类,把内容相近的文档归为一类,并自动为该类生成特征主题词.适用于自动生成热点舆论专题.重大新闻事件追踪.情报的可视化分析等诸多应用.灵玖Lingjoin(www.lingjoin.com)基于核心特征发现技术,突破了传统聚类方法空间消耗大,处理时间长的瓶颈:不仅聚类速度快,而且准确率高,内存消耗小,特别适合于超大规模的语料聚类和短文本的语料聚类.灵玖文档聚类组件的主要特色在于:1.速度快:可以处理海量规模的网络文本数据