ColaPHP 0.6beta发布

February 28th, 2010

ColaPHP月度发布计划版本,代号:Easy,和0.5beta相比变化不大,主要修改如下:

  • 增加Yaml处理,底层调用symfony yaml包处理
  • 增加自定义异常类,后续准备将框架中的异常细分(好处是将来可以对异常做真对性处理)
  • 少量代码重构以及bug fix

下载ColaPHP 0.6beta,阅读ColaPHP文档,访问ColaPHP项目

下一个版本0.7beta开发代号:Recode,主要对代码做进一步重构优化。

Tags:

[视频]MongoDb In Action

February 23rd, 2010

上次OpenParty上分享MongoDb In Action的视频,Slides在这里,貌似偶有点结巴:)

Tags:

基于关联规则的推荐系统

February 21st, 2010

首先,要了解关联规则的几个概念,定义N为总事务数,N(A)N(B)分别为项集A、项集B出现的次数,N(AB)为项集A、项集B同时出现的次数,A、B为不相交项集A∩B=Ø,规则A→B表示由A推到B:

支持度(Support):

Support

支持度是一种重要度量,支持度低的规则很可能是偶然现象,对推荐意义不大,另外支持度是数据剪枝的一个重要依据。

置信度(Confidence):

Confidence

置信度,字面上的解释就是这个规则到底有多可信,对于给定的规则A→B,置信度越高,B出现在包含A的事务中的概率越高。

提升度(Lift):

Lift

Support(A→B)其实就是AB的联合概率P(AB),Support(A) 、 Support(B)分别为A、B的概率估计P(A)P(B),如果A、B相互独立,则P(AB) = P(A) × P(B),所以只有 Lift > 1 才表示A、B正相关,且越大越好。

为什么要引入提升度的概念呢?还是拿歌曲来做例子,比如歌曲A、歌曲C为小众歌曲,歌曲B为口水歌,共有10万个用户,有200个人听过歌曲A,这200个人里面有60个听过口水歌B,有40个人听过歌曲C,同时听过歌曲C的人数是300,听过口水歌B的人为50000,那么Confidence(A→B) = 0.3,Confidence(A→C) = 0.2,从置信度来看貌似A和B更相关,但是10W人里面有5W听过歌曲B,说明有一半的用户都喜欢歌曲B,但听过歌曲A的人里面只有30%的人喜欢歌曲B,很明显歌曲A和歌曲B负相关,计算Lift(A→B) = 0.6,小于1,负相关,Lift(A→C) = 100,远大于1,正相关。

当然,还有一些其他的度量因子,可自行参阅其他文档。

可以进入正题了,我们要实验的是一个文学类的网站数据,数据格式如下:

用户ID 图书ID

表示此用户阅读过该图书,我们首先要解决的问题是:喜欢图书A的用户还喜欢其他哪些图书?(图书之间的相关性)

推荐流程

  • 数据清理:对用户和图书分别计数,过滤掉一些超不活跃的用户和超冷门的图书
  • 计算两两图书之间的支持度、置信度、提升度,根据最低支持度、最低置信度、最低提升度剪枝,把低于最小值的规则扔掉
  • 对图书A进行推荐:找出图书A的所有规则,按照置信度降序排序,Top-N即为和图书A最相关的前N本图书

非常简单,关键的就是数据清理以及规则剪枝设置,这需要对业务熟悉一些,提升度的话,如果不确认,大于1即可。

结果示例:

古龙:剑毒梅香(中) 古龙:剑毒梅香(上)|古龙:剑毒梅香(下)|武林第一少年:血欲江湖|笑傲江湖之风清扬别传|草根续写:天龙八部续
古龙:剑毒梅香(下) 古龙:剑毒梅香(中)|古龙:剑毒梅香(上)|武林第一少年:血欲江湖|笑傲江湖之风清扬别传|恐怖宿舍惊魂夜:女生寝室|倚天屠龙记之复兴明教|至尊武神:六脉神剑闹武林|草根续写:天龙八部续
温瑞安:四大名捕猿猴月 四大名捕会京师:逆水寒|温瑞安:四大名捕铁布衫|四大名捕震关东-亡命|四大名捕破神枪: 惨绿|四大名捕破神枪-妖红|四大名捕震关东-追杀|温瑞安:四大名捕谈亭会|温瑞安:四大名捕开谢花|温瑞安:四大名捕碎梦刀|四大名捕走龙蛇|温瑞安:四大名捕猛鬼庙|温瑞安神州奇侠:人世间
异界玄奇:尸池 荒村血鬼洞房:剥皮新娘|真实恐怖:鬼宅小区|丫鬟不好当:王爷,请自重|人鬼恋:我的老婆不是人|灵异事件全曝光:诡异档案|恐怖的盗墓历险:荒村古墓|校园僵尸|古墓惊魂夜:坟岭村笔记|阴阳眼之鬼瞳:荒道门|极度恐怖乱坟头:墓地惊叫|盗墓传说|不解迷:殡仪馆里的化妆师|凶尸宿舍惊魂声:猛鬼校园|惊声尖叫:太平间美丽女尸|生化疯狂撕杀之丧尸异形|僵尸当街:遇上美女天师|生化异族的入侵:吸血传说|凶宅女尸:学院惊魂夜|棺木里的眼球:古井沉尸|校园恐怖女生寝室3:诡铃
变成有钱人并不难: 理财YS 快速发财: 怎样做无本生意|创业指南:三十六计|成功三宝:习惯、心态、人脉|掌控自己命运:读孙子兵法|改变你一生的30个招术|帮你成高手:口才决定成败|左右逢源的做人心机术|穷人与富人的差别|最快的致富秘诀: 赢在观念|做个聪明的老板: 经商要会说话|把话说得滴水不漏全集|职场:1分钟读懂对方心理|恋人浪漫短信|李嘉诚的谋局与处世|股票入门:股票认知大全|男人了解女人,女人了解男人|教你理财:理财高手|心机–做人的一种智慧|必修课:这样做女孩最命好|女人的身体·女人的智慧
……

不再多举例子了,目测感觉大多比较靠谱。

Simpler could be better.

Tags: ,

ColaPHP 0.5beta发布

January 24th, 2010

ColaPHP的第一个beta版本,代号:Practice,已经实践的优化,可以适量应用在实际项目中,相比较0.4alpha,比较大的修改如下:

  • 增加字符串加密助手,支持XOR、mcrypt加密,支持混淆
  • 增加分页类
  • 重构了HTTP请求类,可定制性更强
  • 重构了Validate类,增加批量校验
  • 其他代码重构以及bug fix

下载ColaPHP 0.5beta,阅读ColaPHP文档,访问ColaPHP项目

下一个版本0.6beta开发代号:Easy,将在易用性方面进一步优化。

Tags:

MongoDb In Action

January 23rd, 2010

This slide will tell you how to use MongoDb as MySQL in your application.

Tags: ,

Python处理MP3的歌词和图片

January 21st, 2010

一些MP3播放器(包括iphone、ipod、itouch、blackberry等)可以在播放mp3的时候显示专辑图片、歌词等信息而不需要额外的图片文件和歌词文件,仅仅一个mp3文件就搞定,比较有意思。除了用专门的软件(比如itunes)来制作这样的mp3,我们还可以用程序来批量生成。

查阅mp3头信息ID3V2的技术文档,发现可以往ID3信息里面加入歌词和图片信息(可以在页面上查找Lyrics、Attached picture就能发现相应的内容)。有了官方格式上的支持,我们要做的就是把歌词和图片加入到MP3文件中去。

测试一些开源的软件包,发现一个比较可靠的:eyeD3,由python语言编写,直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#coding=utf-8
import eyeD3
import re
 
# mp3文件
mp3_file = '/path/to/foobar.mp3'
# lrc歌词文件
lrc_file = '/path/to/foobar.lrc'
# 专辑图片
pic_file = '/path/to/foobar.jpg'
 
# 实例化eyeD3
tag = eyeD3.Tag()
 
# 绑定到mp3文件
tag.link(mp3_file)
 
# 去掉原文件中可能存在的图片
tag.removeImage()
 
# 去掉原文件中可能存在的歌词
tag.removeLyrics()
 
# 设定编码,非常重要,否则不支持中文
tag.encoding = '\x01'
 
# 添加图片
tag.addImage(3, pic_file, u'')
 
# 添加歌词,注意要utf-8编码,去掉lrc中时间信息
tag.addLyrics(re.sub('(\[.*?\][\n]*)+', '', unicode(open(lrc_file, 'r')).read(), 'utf8')))
 
# 更新到文件
tag.update()

代码非常简单,需要注意的是设定编码,不然歌词就乱码了。有了eyeD3之后,可以写个爬虫,从网上抓下歌词和图片直接灌进MP3文件里面,剩下的就是享受了。

Tags: , , , ,

还在路上

December 31st, 2009

又是一年算账的时候,去年的今天写了2009年的一些计划:网络(socket)/桌面(gui)编程;一个精巧的PHP框架;数据挖掘;多一些好朋友。socket/gui编程算是稍稍入门吧;PHP框架(ColaPHP)已经发了4个alpha版本,目前从实际项目中看表现还可以,可能下一个版本就进入beta阶段,beta意味着ColaPHP逐步趋于稳定;数据挖掘前半年做的比较多,进展不算太大;好朋友多了一些,此事甚为欣慰。

2009年技术上主要是代码方面的成长,重构的事情做的比较多,已不太相信过于花哨的玩意。脾气方面,”骄躁”二字少了些。回过头来看2009,不觉太多收获,亦不觉浮度。

2010年想要做的一些事情:学一门新语言;ColaPHP发一个GA版本;数据挖掘,做一个开源的推荐系统;更多的好朋友。

希望春天能在2010年到来。

ColaPHP-0.4-alpha发布

December 23rd, 2009

ColaPHP月度发布计划,基本上每月发一个release,相比较0.3alpha,比较大的修改如下:

  • 增加了动态路由模式,可不用定义URL规则
  • 增加对MySQL Master-Slave支持,可以由单数据库无缝迁移到主从模式
  • 去除框架中Smarty模板的绑定,可以在Controller中自行调用Smarty模板
  • Helper中增加了性能测试模块Benchmark.php
  • 增加对MongoDB的简单绑定Mongo.php
  • 性能进一步提升
  • 大量的代码重构以及bug fix

访问ColaPHP官方网站,下载0.4alpha,不过建议随时跟进我们的svn://colaphp.googlecode.com/svn/trunk/,ColaPHP一直在活跃开发。

ColaPHP 0.4alpha已完成预期目标,所有的函数都控制在20行以内。下一个版本0.5alpha版本开发代号:Practice,ColaPHP已经在一些实际项目中使用,0.5alpha将得到更多的实践优化

招募PHP极客加入ColaPHP,联系fuchaoqun#gmail.com。

Tags: ,

[视频] Music Recommender Systems

November 29th, 2009

上次去beta沙龙的视频,希望没有浪费大家的时间,感谢beta沙龙的组织工作。

Tags: , , , ,

Music Recommender Systems

November 17th, 2009

周末beta沙龙和大家分享的音乐智能推荐PPT,有些内容和上次的PPT差不多,这次主要和大家分享一个完整的数据挖掘流程,同样的,还是工程方面比较多,学术方面这里有很多大牛。

Tags: , , , , ,