-
个人简介:
PHP开发者,高可用性、分布式集群实践者,伪Python、GAE开发者,伪Linux系统管理员,伪MySQL管理员
2009年8月至今服务于阿里巴巴云计算公司
2008年8月至2009年7月31日服务于博客大巴
-
归档
- 2012 年一月
- 2011 年十一月
- 2011 年九月
- 2011 年八月
- 2011 年七月
- 2011 年六月
- 2011 年五月
- 2011 年三月
- 2011 年二月
- 2011 年一月
- 2010 年十二月
- 2010 年十一月
- 2010 年十月
- 2010 年九月
- 2010 年八月
- 2010 年七月
- 2010 年六月
- 2010 年五月
- 2010 年四月
- 2010 年三月
- 2010 年二月
- 2010 年一月
- 2009 年十二月
- 2009 年十一月
- 2009 年十月
- 2009 年九月
- 2009 年八月
- 2009 年七月
- 2009 年六月
- 2009 年五月
- 2009 年四月
- 2009 年三月
- 2009 年二月
- 2009 年一月
- 2008 年十二月
- 2008 年十一月
- 2008 年十月
- 2008 年九月
- 2008 年八月
- 2008 年七月
- 2008 年六月
- 2008 年五月
- 2008 年四月
- 2008 年三月
- 2008 年二月
- 2008 年一月
- 2007 年十二月
- 2007 年十一月
- 2007 年四月
-
杂项
作者归档:崔玉松
TF-IDF及文本相似性度量
TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与文本挖掘的常用加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,互联网上的搜寻引擎还会使用基 于连结分析的评级方法,以确定文件在搜寻结果中出现的顺序。 在一份给定的文件里,词频(term frequency,TF)指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被正规化,以防止它偏向长的文件。(同一个词语在长文件里可能会 比短文件有更高的词频,而不管该词语重要与否。)对于在某一特定文件里的词语 ti 来说,它的重要性可表示为: 以上式子中 ni,j 是该词在文件dj中的出现次数,而分 母则是在文件dj中所有字词的出现次数 之和。 逆向文件频率(inverse document frequency,IDF)是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到: 其中 |D|:语料库中的文件总数 : 包含词语ti的文件数目(即的 文件数目) 然后 某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词 语,保留重要的词语。 =================文本相似性度量======================= 方法一:向量空间模型 在向量空间模型中,文本泛指各种机器可读的记录。用D(Document)表示,特征项(Term,用t表示)是指出现在文档D中且能够代表该文档内容的 基本语言单位,主要是由词或者短语构成,文本可以用特征项集表示为D(T1,T2,…,Tn),其中Tk是特征项,1<=k<=N。例如一篇 文档中有a、b、c、d四个特征项,那么这篇文档就可以表示为D(a,b,c,d)。对含有n个特征项的文本而言,通常会给每个特征项赋予一定的权重表示 其重要程度。即D=D(T1,W1;T2,W2;…,Tn,Wn),简记为D=D(W1,W2,…,Wn),我们把它叫做文本D的向量表示。其中Wk是 Tk的权重,1<=k<=N。在上面那个例子中,假设a、b、c、d的权重分别为30,20,20,10,那么该文本的向量表示为 D(30,20,20,10)。在向量空间模型中,两个文本D1和D2之间的内容相关度Sim(D1,D2)常用向量之间夹角的余弦值表示,公式为: 其 中,W1k、W2k分别表示文本D1和D2第K个特征项的权值,1<=k<=N。 在自动归类中,我们可以利用类似的方法来计算待归类 文档和某类目的相关度。例如文本D1的特征项为a,b,c,d,权值分别为30,20,20,10,类目C1的特征项为a,c,d,e,权值分别为 40,30,20,10,则D1的向量表示为D1(30,20,20,10,0),C1的向量表示为C1(40,0,30,20,10),则根据上式计算 出来的文本D1与类目C1相关度是0.86 方法二:字符串相似度 对于象字符串计算相似度的算法有很多,常用的有最大公共字串,编辑距离等。 编辑距离就是用来计算从原串(s)转换到目标串(t)所需要的最少的插入,删除和替换的数目,在NLP中应用比较广泛,如一些评测方法中就用到了 (wer,mWer等),同时也常用来计算你对原文本所作的改动数。编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫 … 继续阅读
2011年总结
忙了一年,终于可以休息下了,2011年对工作上的总结就是“忙”,上半年还好,下半年忙得吐血,每次报销打车票的时候,才看到原来自己两个月里有80%以上的时间都是晚上10店以后回家的,甚至有几次凌晨回家,9点又到公司的记录,真的在玩命。回头看看2011年初的对2010年的总结,发现自己已经职业了很多。 2011年其实没啥总结的,团队的业务还行,年中的时候试图换个岗位尝试一下没玩过的东西,结果没去成,感觉还挺有意思的。 2011年初的几个愿望基本上都没有实现,时间倒是确实不多,但是总体来说,如果够刻苦总是能找些时间的,2011年读了很多书,数据库和搜索引擎的最多,甚至有考数据库认证的打算,书看完了,却没时间去考试。算了,不考也罢。 2011年整体来说,过得还算顺利,没胖也没瘦, 身体还好,没生什么大病,去了一两次医院。 2012看来没有世界末日的迹象,日子还是得过。2012事情很多,要静下心来做一件自己想做而没有做的事情,可能很难,希望能坚持。2012我希望能够将持续集成引入自己的项目中,让自动化代替部分人工,测试的同事太辛苦,也为了让自己睡个安稳觉。2012年依然有值得期待的书籍,读10本书是必须的。2012得换个手机,旧手机一直没坏,换掉觉得浪费。2012要多认识些朋友,都世界末日了,在黄泉路上大家有个伴。2012多活跃一些,多写点博客。2012希望下班后能早点回家。2012希望自己和亲人身体都好,这才是革命的本钱。
Python Web Server Gateway Interface v1.0.1 不完整翻译
Contents 简介 基本原理与目标 概述 应用接口 服务器接口 中间件 : 同时扮演两种角色的组件 详细说明 environ 变量 输入和错误流 start_response() 可调用者 Handling the Content-Length Header Buffering and Streaming Middleware Handling of Block Boundaries The write() Callable Unicode Issues Error Handling HTTP 1.1 Expect/Continue Other HTTP Features … 继续阅读
Mysql中union和order by的问题及优先级
在Mysql的参考手册中,并没有对union和order by的优先级进行说明 它建议的方法是,对SQL语句加上(),这样能使SQL的语义更清晰 例如,需要对union后的结果进行order by,则: (SELECT a FROM tbl_name WHERE a=10 AND B=1) UNION (SELECT a FROM tbl_name WHERE a=11 AND B=2) ORDER BY a LIMIT 10; 如果,需要对单个SQL语句进行order by,则应把order by子句放入圆括号中,如下: (SELECT a FROM tbl_name WHERE a=10 AND B=1 ORDER BY … 继续阅读
使用supervisor和nginx发布tornado程序
tornado先天对异步(no-bolocking)处理能力,非常适合作为Web服务。tornado在linux平台使用epoll来实现异步事件的处理,性能非常好。但是python做为一个脚步语言,单进程执行,无法利用多CPU,对当今的多核CPU是一个很大的浪费。为提高性能,提高CPU利用率,一般会将tornado程序允许cup*n个。 怎样才能放便启动多个tornado程序呢,我们可以用supervisor来管理多个tornado应用。supervisor安装非常方便,easy_install supervisord就可以。 以下是supervisor的配置,我在一台服务器上配置了四个tornado服务。 config ; supervisor. [group:gisapp] programs=gis-8001,gis-8002,gis-8003,gis-8004 [program:gis-8001] command=python /home/gis/gis/gisserver.py –port=8001 directory=/home/gis/gis/ autorestart=true redirect_stderr=true stdout_logfile=/home/gis/gis/logs/gis_server-8001.log stdout_logfile_maxbytes=500MB stdout_logfile_backups=50 stdout_capture_maxbytes=1MB stdout_events_enabled=false loglevel=warn [program:gis-8002] command=python /home/gis/gis/gisserver.py –port=8002 directory=/home/gis/gis/ autorestart=true redirect_stderr=true stdout_logfile=/home/gis/gis/gis_server-8002.log stdout_logfile_maxbytes=500MB stdout_logfile_backups=50 stdout_capture_maxbytes=1MB stdout_events_enabled=false loglevel=warn [program:gis-8003] command=python /home/gis/gis/gisserver.py –port=8003 directory=/home/gis/gis/ … 继续阅读
淘宝在数据处理领域的项目及开源产品介绍
淘宝在数据存储和处理领域在国内互联网公司中一直保持比较靠前的位置,而且由于电子商务领域独特的应用场景,淘宝在数据实时性和大规模计算及挖掘方面一直在国内保持着领先,因此积累了很多的实践的经验和产品。 TimeTunnel 基于Hbase打造的消息中间件,具有高可靠、消息顺序、事务等传统特性,还能按时间维度反复订阅最近历史的任意数据 高性能的broker,单节点达2万TPS,实际支持上千长链接并发 承载海量的数据传输,日同步数据达10TB,并且包含淘宝主营收入等关键性数据 在各IDC内,部署了超过2000个客户端,覆盖全网日志传输 Scribe、flume、activemq、ZeroMQ?我们可以做得更强大 TBFS 基于Hdfs 0.20进行全面改造,设计目标:单个集群可达10000台服务器,支持10亿文件、100PB的数据的存储 领先于社区的全新设计,彻底解决namenode单点问题,并可实现集群在线升级 期待你来挑战:snapshot、异地数据复制、多级的cache、软硬链接支持 Hbase 基于Hbase0.90.3进行改造,目前有上百台的Hbase服务器,支淘宝7个online应用,online数据存储达100T 支持本地化数据计算、二级引索 期待你来挑战:无阻塞的compact、更多的事务支持、更短的请求响应时间、更强大的索引(Lucene for hbase) Mapreduce 基于Hadoop0.19改造,最大单个集群规模达2000台服务器,兼容hadoop0.20 绝大多数API 实际存储数据超过10PB,日运行mapreduce job达5万个 期待你来挑战:更高效任务调度、更优雅的计算资源管理、更灵活的分布计算模型 Hive 基于hive0.6改造,修改的patch达上百个,支持SQL中间结果复用等众多特性 支持淘宝几乎所有的商业数据分析任务,是各行业数据分析师和数据开发工程师必备的技能 期待你来挑战:Hive & Pig能混合编程?现在不能,你敢想就可以来做! Taobao-pamirs-schedule taobao-pamirs- schedule是一个基于分布式环境的多线程任务处理框架。目的是让一种批量任务或者不断变化的任务,能够被动态的分配到多个主机的JVM,不同的线程组中并执行。所有的任务能够被不重复,不遗漏的快速处理。它将需要执行的任务抽象成一致的任务模型,进行统一的管理和监控。运用schedule,任务能够比较均匀的分发到多台机器上进行处理,并且可以动态的进行水平扩展。 QLExpress 一个轻量级的脚本引擎,作为一个嵌入式规则引擎在业务系统中使用。让业务规则定义简便而不失灵活。让业务人员就可以定义业务规则。 支持标准的JAVA语法,还可以支持自定义操作符号、操作符号重载、函数定义、宏定义、数据延迟加载等。 UIC Uic是个海量数据的高稳定高并发高响应高可靠高一致性的系统。海量数据:现在整个用户中心的注册用户数接近6亿,加上地址,支付宝绑定数据,接近20亿。现在通过分库分表存在了16个库1024张表里面。高稳定,高可靠:用户中心是淘宝最为核心的系统之一,一个完整的交易流程需要访问UIC高达几十次,所以UIC的稳定是整个淘宝的重中之重,我们为了UIC的稳定做了很多容灾的方案,包括多机房的备份,缓存的容灾,mysql的容灾,流量的控制等等,可以说UIC的核心就是各种容灾体系和在各种极端情况的下解决措施高并发,高响应:每天访问UIC的数据在200亿左右,我们使用了tair做为缓存,使用protobuf序列化, 尽可能的提高缓存的命中率,现在用户数据的命中率在99%。 … 继续阅读
MySQL写入优化
innodb_buffer_pool_size 如果用Innodb,那么这是一个重要变量。相对于MyISAM来说,Innodb对于buffer size更敏感。MySIAM可能对于大数据量使用默认的key_buffer_size也还好,但Innodb在大数据量时用默认值就感觉在爬了。 Innodb的缓冲池会缓存数据和索引,所以不需要给系统的缓存留空间,如果只用Innodb,可以把这个值设为内存的70%-80%。和 key_buffer相同,如果数据量比较小也不怎么增加,那么不要把这个值设太高也可以提高内存的使用率。 innodb_additional_pool_size 这个的效果不是很明显,至少是当操作系统能合理分配内存时。但你可能仍需要设成20M或更多一点以看Innodb会分配多少内存做其他用途。 innodb_log_file_size 对于写很多尤其是大数据量时非常重要。要注意,大的文件提供更高的性能,但数据库恢复时会用更多的时间。我一般用64M-512M,具体取决于服务器的空间。 innodb_log_buffer_size 默认值对于多数中等写操作和事务短的运用都是可以的。如果经常做更新或者使用了很多blob数据,应该增大这个值。但太大了也是浪费内存,因为1秒钟总会 flush(这个词的中文怎么说呢?)一次,所以不需要设到超过1秒的需求。8M-16M一般应该够了。小的运用可以设更小一点。 innodb_flush_log_at_trx_commit (这个很管用) 抱怨Innodb比MyISAM慢 100倍?那么你大概是忘了调整这个值。默认值1的意思是每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时的。特别是使用电 池供电缓存(Battery backed up cache)时。设成2对于很多运用,特别是从MyISAM表转过来的是可以的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬 盘,所以你一般不会丢失超过1-2秒的更新。设成0会更快一点,但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统 挂了时才可能丢数据。 上面是网上看的,我发现慢查询日志内有很多update和insert的查询,就把innodb_flush_log_at_trx_commit改成了2,效果很明显,改成0会更明显,但安全性比较差。做下面的操作启动mysqld就生效: vim /etc/my.cnf innodb_flush_log_at_trx_commit=2 也可以在mysqld运行时执行: set GLOBAL innodb_flush_log_at_trx_commit = 2 下面是mysql手册上innodb_flush_log_at_trx_commit的解释: 如果innodb_flush_log_at_trx_commit设置为0,log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行;但是,这种模式下,在事务提交的时候,不会有任何动作。如果 innodb_flush_log_at_trx_commit设置为1(默认值),log buffer每次事务提交都会写入log file,并且,flush刷到磁盘中去。如果innodb_flush_log_at_trx_commit设置为2,log … 继续阅读
mysql分页limit 优化
mysql的分页比较简单,只需要limit offset,length就可以获取数据了,但是当offset和length比较大的时候,mysql明显性能下降 1.子查询优化法 先找出第一条数据,然后大于等于这条数据的id就是要获取的数据 缺点:数据必须是连续的,可以说不能有where条件,where条件会筛选数据,导致数据失去连续性 实验下 Sql代码 mysql> set profiling=1; Query OK, 0 rows affected (0.00 sec) mysql> select count(*) from Member; +———-+ | count(*) | +———-+ | 169566 | +———-+ 1 row in set (0.00 sec) mysql> pager grep !~- PAGER set to ’grep !~-’ mysql> select * from Member limit 10, 100; 100 rows in set (0.00 sec) mysql> select * from Member where MemberID >= (select MemberID from Member limit 10,1) limit 100; 100 rows in set (0.00 sec) mysql> select * from Member limit 1000, 100; 100 rows in set (0.01 sec) mysql> select * from Member where MemberID >= (select MemberID from Member limit 1000,1) limit 100; 100 rows in set (0.00 sec) mysql> select * from Member limit 100000, 100; 100 rows in set (0.10 sec) mysql> select * from Member where MemberID >= (select MemberID from Member limit 100000,1) limit 100; 100 rows in set (0.02 sec) mysql> nopager PAGER set to stdout mysql> show profiles\G *************************** 1. row *************************** Query_ID: 1 Duration: 0.00003300 Query: select count(*) from Member *************************** 2. row *************************** Query_ID: 2 Duration: 0.00167000 … 继续阅读
因域名解析问题不能访问三天
如果你能看到本文,证明域名新的解析成功了,天朝真的什么都很有意思。 本博客的域名fendou.org 之前在国内注册的,后来转移到godaddy去了,今年早些时候传言要白名单了,随后真的不能访问,于是乎又将DNS服务器换到国内的DNSPOD,还好DNSPOD解析不需要备案,但是懒得改IP,直接cname到一个还在godaddy上解析的域名,结果这个域名现在也被白名单了,这几天各种纠结的事情缠身,也没怎么看博客,结果就杯具了好几天,现在改成直接使用A记录指向国内的主机,先凑合着用,等周末的时候弄到GAE(Google App Engine)上去吧,由于众所周知的原因,GAE这么好的平台,居然和谐了,还得再弄个境外的服务器做反向代理。另外一个纠结的问题是,本博客主域直接使用的裸域,没有www,GAE不能绑定裸域又是杯具……搬到GAE上最多就是国内不能正常访问而已,好歹数据还在,只要Google 没倒闭,一切都是安全的,Google倒闭的那一天,或许和谐从此消失,换成了民主
对我影响最大的基本技术书(一)
日子一天天过去,人也慢慢变懒了,虽然有每天坚持阅读的习惯,慢慢的动手实践的次数少了很多,不是没有时间,是实在不想动,肩膀和手腕都很痛,脖子也痛,游泳和台球能有明显治疗效果,有类似职业病的朋友不妨试试,现在越来越多的公司会放一些健身设备在公司,尽量利用吧,反正折腾坏了也不用自己赔。 我一直想给我过去的一段技术路做一个小结,后来发现哪有什么总结,不过是拾人牙慧而已,就好比泥瓦匠和建筑设计师的区别,那么就总结一些对我现在影响比较大的几本书吧,没有哪个影响最大的问题,按时间排序或许比较公平。 这是我除了教科书之外遇到的第一本我认为最好的书,我对对象的理解,对方法,对属性,对OOP对编译器,对Java甚至以后的面向对象语言的特点都打了很好的基础。我天生不怎么聪明,光对象这个概念就在图书馆发呆、翻书,研究有了将近一个月。读这本书是因为当初觉得谭浩强那本C语言写的太垃圾了,学完了都不知道能干嘛,纯粹为了学习而学习,学到最后很多人都放弃了,因为不知道有什么用。当初读英文原版是因为图书馆找不到中文版,美国亚洲基金会赠送给我们大学图书馆的书,有很多很多好书,很多是国外名校的原版教材,可惜其他学科完全看不懂,太多专业名词。 我能走向IT技术这条路正是因为本书,黄忠成 老师深入浅出的讲解,真的让我当时刚入门的小伙子一下子豁然开朗,因为读了这本书,我一下子走到了好多人的前面,当时我读大二,和已经毕业多年的人交流的时候,他们常常被我问住,而我知道的答案,他们却不知道,这让我的信心得到了极大的膨胀。时不时安慰自己一下原来天生就是个搞编程的料。在B/S模式大行其道的今天,估计很多人不知道这本书了,现在回想起来,这本五六年前的书,放到今天,仍然有很多指导意义,优秀的架构思想依然可以应用到B/S模式上。也因为本书,我曾经一度自卑的小心灵慢慢得到了更多的精神上的YY,看是平视曾经仰视的人,这对我后来的生活改变很大。也许黄先生看到此文也会差异,一本技术书籍居然能对人影响如此之大。好书就是好书,不管影响的是技术还是精神,最终都会影响读者的生活。 这本书应该无数的人都熟悉,程序员走向高级程序员必读之书。作为一个编程人员,如果你没读过真的很遗憾。或许你可以先看下云风关于代码大全的读书笔记,电子版也有很多地方可以下到,但我依然建议你去买一本,偶尔翻翻也无妨,每次都会有新的收获。第一次看到这本书的时候,我以为这本书是一本代码示例,也没当回事,后来听朋友极力推荐此书,跑到学校边的书店找到此书,才知道被书名给骗了,或许说被书的翻译者给骗了,或许翻译成编程宝典,编程手册。此处的Code应该不是代码的意思。花了将近两个月的时间才读完,再花了一个半月的时间重读了一遍,从小学到读完大学,我唯一一次记读书笔记正是这本书,没办法,不记笔记的话很多东西消化不掉。而且也确实有太多值得记的东西了。 夜深了,明晚接着写,肩膀又隐隐作痛,悲剧