基于weibopy sina接口数据的设想与实现

程序实现的功能设想:
1、分析出某条微博所属的分类
2、分析出某个用户微博中感兴趣的信息
3、大致推断出用户日常生活的位置
4、统计出用户发微博的时间习惯
 
实现:
1、分析出某条微博所属的分类
    思路是利用有监督的学习方法,首先通过采集一部分微博的信息,对这些微博进行人工的分类,然后程序利用这些人工给予的训练信息,对陌生的数据进行分类。
   a) 数据的收集:
        对于微博的数据,使用weibopy调用其中的api来获取微博的数据。详细过程在sina api文档中有说明,简单来说,首先申请一个key,然后调用 sina的auth接口,返回两个参数(token, tokenSecret)之后就可以随意调用里面的接口。
    b)数据的存储:
        收集到的数据利用SQlite存放起来
 
    c)对信息进行人工训练:
        分类是按照腾讯主页中的分类信息直接拿来用的,分类信息写在一个json文件上,人工训练功能界面用webpy展示
        
        按照你的思路,在checkbox上打勾,然后按提交,就算对一条信息进行了训练。首先,程序需要对微博信息进行分词的处理,我本来想用pyLucene掉Ik分词器的,不过看了一下使用的流程觉得比较的复杂,因此使用了纯python的分词工具 jieba。把分词后的关键字信息与对应分类存储在数据库中,待日后统计计算的时候使用。
    d)对陌生信息进行分类:
        首先也是需要对信息进行分词,然后利用数据库中已经存在的信息,计算出关键字在某个分类中出现的频次,然后计算出在所有分类中占的总体概率。最后把所有的关键字对应的分类概率进行统一,得到一个对于分类的概率集。
        p=关键字在某分类出现的次数/关键字出现的总次数
        一条信息中包含多个关键字,对于对于某个分类来说:R =p1*p2*p3.....pn,R是所有关键字对于某个分类的概率乘积
        取以2为低的对数 f= -2log2(R),这是费舍尔方法,从费舍尔方法得到,如果概率彼此独立并随机分布,这将满足对数卡方分布
        最后就是把f带入对数卡方分布中得到统一的概率
        
        对于这样一句话:“洒脱人生该学会的10个安慰 1.最重要的是今天的心 2.自己的心痛只能自己疗 3.好心境是自己创造的 4.用心做自己该做的事 5.别总是自己跟自己过不去 6.不要过于计较别人的评价 7.喜欢自己才会拥抱生活 8.木已成舟便要顺其自然 9.重要的是活得充实 10.感觉幸福就是幸福”
        我期待的分类结果:emotion
        程序的分类结果:[(u'women', 0.752256846371252), (u'emotion', 0.6137324113850356), (u'culture', 0.48651225768210227), (u'education', 0.4623516892837464), (u'constellation', 0.4333158067621435), (u'movie', 0.41646403084421807), (u'shop', 0.40473398477780415), (u'novel', 0.3868150022467908), (u'hairdressing', 0.36958201374323496), (u'variety', 0.3431255736667405), (u'star', 0.29466021484235927), (u'entertainment', 0.29466021484235927), (u'car', 0.29466021484235927), (u'fashion', 0.29466021484235927), (u'show', 0.29466021484235927), (u'home', 0.29466021484235927)]
    因为初始概率是0.5,因此低于0.5的忽略分类显示这句话是women和emotion的类别,结果还算凑合。
 
2、分析出某个用户微博中感兴趣的信息
    a)对多条微博信息进行统一
        实现这个功能其实是一个分治的过程。首先统计出某个关键字属于某个的概率,然后把多个关键字的概率统一起来,得到各个分类的概率。现在可以把一条微博看做一个关键字,目前已经做到可以知道一条微博中分类的具体概率,现在只要把多条微博的概率统一起来功能就完成了。
        我把每条微博统计的分类信息用一个temp文件存储起来,然后在统合的时候在一次过全部读入。
3、大致推断出用户日常生活的位置
    a)geo:
        geo中有关于经纬度的信息,对于一些使用了地理位置信息发送的微博,通过api就可以得到,其中很多的geo都是null的。。。。
    b)对geo进行聚类:
        geo返回的是一组二元的经纬坐标,因此可以看做是(x,y)坐标。我尝试利用K-均值聚类的方式进行聚类。k是多少,一直都不能很好的确定,生活,学习,工作,路上。。。。。里面还有一些比较远的点,这些应该是旅游是发的微博。我们的目的是为了知道日常的生活位置,因此较远的点变成不必要的数据,因此,需要计算一个权重值,用来避免某些错误数据对结果的影响。
        思路:计算出所有geo的中点,计算每个点与中点的距离,权重值是1/(1+距离)
        k的值一直不好确定,使用4得到的结果比较靠谱。这个是建立在我同学发的微博数据上,4刚好得到其4个重要的地点,学校,家,堂会ktv,还有某个他经常去的亲戚家的位置。
 
4、统计出用户发微博的时间习惯
    这个纯粹是统计,人手做的话就是体力活,写个程序就轻松搞掂。做这个的目的一开始其实是想计算出用户微博信息的权重,在某个时间段发的微博更具统计意义,其他时间段的微博对分类的影响稍微不大。不过后来因为假如这个会令整个概率的计算时间复杂度及其大,因此就跳过。
    a)对时间进行分段:
        我把时间按照每两个小时进行划分,以月为单位,以周为小单位,当然会特别的标出周末的时间。
    
        
随着程序训练的数据量增加,准确率会慢慢提高的。。。。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值