py2.7 《集体智慧编程》chapter3:发现群组

数据聚类:目的并不是通过输入和期望输出来调整算法,而是采集数据。且常用方法是定义一组公共的数值型属性,利用这些属性进行比较。


一、对博客用户进行分类:

#-*- coding:utf-8 -*-
import feedparser
import re

#返回一个rss订阅源的标题和包含单词计数情况的字典
def getwordcounts(url):
    #解析订阅源
    d = feedparser.parse(url)
    wc = {}

    #循环遍历所有文章条目
    for e in d.entries:
        if 'summary' in e: #对于一篇文章而言:如果概述存在,则概述为文章概述
            summary = e.summary
        else:
            summary = e.description #否则为文章描述

        #提取一个单词列表
        words = getwords(e.title+' '+summary) #获取标题+概述的单词总数
        for word in words:
            wc.setdefault(word,0) #判断字典里是否存在word,如果不存在初始化为0
            wc[word]+=1
    return d.feed.title , wc #标题和单词计数

#讲html标记剥离掉,以空格分割单词以列表形式返回
def getwords(html):
    #去除html标记
    txt = re.compile(r'<[^>]+>').sub(' ',html)#正则表达式:去除所有带<>以及里面的东西

    #利用所有非字母字符拆分单词
    words = re.compile(r'[^A-Z^a-z]+').split(txt)

    #转化为小写形式
    return [word.lower() for word in words if word!=' ']

#载入数据:feedlist->每行对应一个url,遍历url生成对每个博客的单词统计以及出现这些单词的博客数目
apcount = {} #出现这些单词的博客数目
wordcounts = {} #每个博客的单词统计
feedlist = [line for line in file('feedlist.txt')]
for feedurl in feedlist:
    title , wc = getwordcounts(feedurl)
    wordcounts[title] = wc #将相关标题的单词计数存入字典里
    for word,count in wc.items():
        apcount.setdefault(word,0)
        if count>1:
            apcount[word]+=1 #如果该单词存在于字典里,单词数+1

#建立单词列表:只考察介于某个百分比内的单词
    wordlist = []
    for w,bc in apcount.items(): #单词和数量,针对于每个博客的单词计数
        frac = float(bc)/len(feedlist)
        if frac>0.1 and frac<0.5:
            wordlist.append(w)

#利用单词列表和博客列表建立针对每个博客的所有单词的统计情况
    out = file('blogdata.txt','w')
    out.write('Blog')
    for word in wordlist:
        out.write('\t%s' % word)
    out.write('\n')
    for blog , wc in wordcounts.items():
        out.write(blog)
        for word in wordlist:
            if word in wc :
                out.write('\t%d' %wc[word])
            else:
                out.write('\t0')
        out.write('\n') #生成单词计数文件


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kelisita

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

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

抵扣说明:

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

余额充值