自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 Design Pattern

很多程序员用面向对象语言写了多年的代码, 仍然不知道设计模式为何物, 这不奇怪, 设计模式并不是非有不可,可是它能让代码变的更美好。 程序员大可闷头堆代码, 复制粘贴, 然后不断的感慨代码难以维护, 难以复用, 难以扩展, 而继续不思进取。 当然也可以选折不断去追求更美好, 更合理的代码, 把自己从bug调试, 需求变动等噩梦中拯救出来, 进而真正体会到编码的乐趣。 你如果选折后者那么

2011-06-17 17:35:00 3287

原创 基本数据结构(算法导论)与python

Stack, QueueStack是后进先出, LIFO, 队列为先进先出, FIFO在python中两者, 都可以简单的用list实现,进, 用append()出, Stack用pop(), Queue用pop(0), pop的时候注意判断len(l) 对于优先队列, 要用到前面讲到的堆链表和多重数组这些数据结构在python中就没有存在的价值, 用list都能轻松实现散列表为了满足实时查询的需求而产生的数据结构, 查询复杂度的期望是O(1), 最差为O(n)问题描述, 对于n

2011-05-26 17:28:00 18447 1

原创 排序算法python实现

Merge Sort def mergeSort(data):     length = len(data)     if length 0 and len(r)>0:         if l[0] > r[0]:             data.append(l.pop(0))         else:             data.append(r.pop(0))                   if len(l) >0:       data.extend(l)     else:   

2011-05-15 21:37:00 5828

原创 Python常用模块

查找帮助dir(string) #可以查看模块所有的成员变量和函数#下面的代码可以把变量和函数分开放到list里面for fv in dir(string):    name="string.%s"%fv    if callable(eval(name)):        funOrC.append(fv)    else:        vars.append(fv)有两个函数需要说明,eval, 功能是将字符串生成语句执行, 比如eval('string.strip()')可以把字符串转化为真正的函数

2011-05-14 10:08:00 3256

原创 An Introduction to Asynchronous Programming and Twisted (笔记)

前篇为了更好的理解Twisted研究了异步处理. 我所关心的不是怎么样用Twisted去编写异步处理server或client, 我更关心Twisted是怎么样用python实现这个异步框架, 他design的高明之处在哪里. 本来准备自己去看看Twisted的源码, 但今天发现了这篇Blog, 感叹牛人处处有啊 http://krondo.com/?page_id=1327 Twisted Introduction (Dave Peticolas) http://blog.sina.com.cn/s/bl

2011-05-14 10:05:00 4258 1

原创 从Twisted谈起异步处理

Twisted is event-based, asynchronous framework, Twisted是基于事件的, 异步处理平台. 所以我们想要很好的理解Twisted, 就先来看看什么是异步处理? Why Asynchronous? There are only two ways to have a program on a single processor do 'more than one thing at a time'. Multi-threaded programming is the

2011-05-05 15:15:00 4289

原创 boilerpipe(Boilerplate Removal and Fulltext Extraction from HTML pages) 源码分析

开源Java模块boilerpipe(1.1.0), http://code.google.com/p/boilerpipe/ 使用例子, URL url = new URL("http://www.example.com/some-location/index.html"); // NOTE: Use ArticleExtractor unless DefaultExtractor gives better results for you String text = ArticleExtractor.IN

2011-04-13 13:30:00 7301

原创 decruft(A library to extract meaningful data from a webpage) 源码分析

开源Python模块, http://code.google.com/p/decruft/ decruft使用example, from decruft import Document #import urllib2 #f = urllib2.open('url') f = open('index.html', 'a') print Document(f.read()).summary() 分析一下summary的实现, 总体来说并没有什么复杂的理论, 主要就是根据段落中的word number, link

2011-04-13 11:33:00 3545

原创 Python标准模块logging

开发Python, 一直以来都是使用自己编写的logging模块. 比较土...... 今天发现python的标准模块的这个功能做的挺好, 记录一下, 以后使用模块来进行logging. 对于这个模块的介绍网上也很多, 我也不用自己写了, 比较好的如下, http://crazier9527.iteye.com/blog/290018    Python的标准logging模块 http://blog.endlesscode.com/2010/06/03/python-logging-module/   P

2011-04-07 16:00:00 75210 6

原创 Zope简介

之前一直使用Django在开发web应用, 觉得Django易学, 好用. 后来看到Zope, 觉得两者的scope有重合, 所以大概学习了下Zope, 记录一下. 了解Zope可以先看看这篇Blog, zope系列一: zope的悲剧 (http://www.douban.com/group/topic/11400495/) Zope(Z Object Publishing Environment)是一个企业级的web应用服务器的开发平台, 它很强大, 也比较复杂, 所以从某种程度上而言, 它无法被Pyt

2011-03-01 11:08:00 13403

原创 Python之道 (大道至简)

The Zen of Python 1.Beautiful is better than ugly. 2.Explicit is better than implicit. 3.Simple is better than complex. 4.Complex is better than complicated. 5.Flat is better than nested. 6.Sparse is better than dense. 7.Readability counts. 8.Special cases

2011-02-23 15:50:00 4369

原创 海量文档查同或聚类问题 -- Locality Sensitive Hash 算法

考虑一下这个场景, 使用网络爬虫高速爬取大量的网页内容, 如果想把这些网页进行实时聚类, 并从中提取每个网页聚类的主题. 我们应该怎么样去做对于普通或常见的聚类算法, 比如K-means, 或Hierarchical 聚类, 无法适用于这个常见, 对于这些聚类算法无法进行incremental聚类, 即在聚类开始前必须知道整个数据集, 而这个场景中的数据集是随着爬虫不断增多的. 而且这些聚类算法的performance 不够高, 比如对于K-means 需要不断的partition 以达到比较好的聚类效

2011-02-22 15:56:00 9961 2

原创 Inside C++ object Model--构造函数

Default Constructor Construction构造函数是干啥的, 是在构造类对象的时候, 给程序员进行对象初始化操作的机会. 不仅如此, 同时也是给编译器进行对象初始化的机会. 当然程序员和编译器的扮演的角色是不一样的, 考虑的问题也是不一样的. 当程序员觉得这个类对象没有任何初始化的必要时, 他就不会特意去声明构造函数.那么对于一个类, 当程序员没有声明任何构造函数的时候, 编译器有可能会为该类声明一个default 构造函数. 之所以是'有可能', 是因为编译器也是很懒的, 如果他

2010-12-28 14:39:00 3225

原创 Inside C++ object Model--多态(Object-Oriented)

C++支持如下三种programming paradigms(程序设计典范):1. Theprocedural modelas programmed in C, and, of course, supported within C++. 2. The abstract data type (ADT) model in which users of the abstraction are provided with a set of operations (the public interfa

2010-12-17 15:41:00 2554

原创 Inside C++ object Model--对象模型概述

在C中, "数据"和"处理数据的操作"是分开声明的, 语言本身并没有支持"数据和函数"之间的关联性. 这种称为"procedural", 由一组算法函数所驱动, 他们处理的是共同的外部数据. 而C++, 则在程序风格, 更在程序的思考上有明显的差异, 它以ADT或class hierarchy的数据封装建立数据和操作的关联性. 在软件工程的眼光来看更为合理.但是程序员往往出于效率和简易性考虑而选择C.那么使用C++是否就一定意味着低效了...其实C++在布局以及存储时间上的额外负担主要是由"virtual"

2010-12-16 17:14:00 2976

原创 C语言 -- 函数内局部数组

直接看这个例子void test(){    char b[25];    printf("%s/n",b);    b[0]= 'a';    b[1] = 'b';    b[2] = 'c';    b[3]= '/0';    printf("%s/n",b);}对于上面的test函数, 如果连续调用两次, 会得到什么样的输出答案是:???abcabcabc这是我实际测出的值, 我当时很迷惑, 为什么b是局部数组, 当数组结束时这部分内存就被释放了, 而第二次

2010-12-09 11:08:00 7700

原创 Python调用C/C++的种种方法

<br />Python是解释性语言, 底层就是用c实现的, 所以用python调用C是很容易的, 下面就总结一下各种调用的方法, 给出例子, 所有例子都在ubuntu9.10, python2.6下试过.<br /> <br />1. Python 调用 C (base)<br />想在python中调用c函数, 如这儿的fact<br />#include <Python.h><br /><br />int fact(int n)<br />{<br />  if (n <= 1)<br /

2010-12-07 09:59:00 127740 1

原创 COM本质论 笔记

COM本质论的第一章看了很多遍, 看了忘, 忘了看, 一直觉得写的太好了, 看了有醍醐灌顶的感觉, 最终觉得这么忘下去不是个事, 尤其年纪大了, 还是来记些笔记吧.这本书属于如果你不是COM的设计者, 没有那种陪COM一路走来的过程, 是绝对写不出来的. 个人认为任何复杂的理论, 只要你了解它的始末, 都可以用比较容易理解的方式描述出来, 这就是科普的可行性. 某些故作高深的专家, 所谓的那些不知其所云的书和文章, 真是让人深深的鄙视...本书的这一章主要是描述了从C++静态库, 一直演化到COM的C++原

2010-11-30 16:35:00 4262

原创 C专家编程 笔记

C语言中的符号重载C语言非常的简洁, 以至于不愿意用太多的符号, 这样有很多符号在不同的地方有不同的含义这样会让用户很困惑, 这是c的语言特性, 也是设计上的一些失误static    在函数内部,表示该变量的值在各个调用间一直保持延续性;对于函数,表示该函数只在本文件中可见extern用于变量,表示该变量在其它地方定义;用于函数定义, 表示全局可见(属于冗余的)void    用于参数列表中,表示该函数参数为空,如int main(void);用于返回值,表示该函数返回

2010-11-25 15:16:00 2761

原创 C语言易混淆关键词详解-const, static, extern, typedef, 声明

Const Const关键词并不能把一个变量变成一个常量, 在符号前加上const表示这个符号不能被赋值, 即他的值对这个符号来说是只读的, 但并不代表这个值不能用其他方法去改变. 通过下面的例子就能比较好理解, int i = 5; const int *a = &i; *a = 8;   //报错, 只读不能赋值 i = 10;   //OK Const最有用处的地方是用它来限定函数的形参, 来表明该函数不能修改实参指针所指向的数据. 同上面的理解, 并不表示这个数据是常量, 在函数外是可以修改的. 如

2010-11-19 16:10:00 6385 1

原创 Programming Collecive Intelligence 笔记 Making Recommendations

现在recommendation是非常普遍的一项技术, 在网上购物Amazon会推荐你可能感兴趣的商品,在电影,音乐网站,会推荐你可能喜欢的音乐或电影。那么这儿就来看看,这些推荐是怎么样实现的Collaborative Filtering日常生活中,最简单的获取推荐的方法就是问朋友,你可能知道某些朋友的品位比较高,爱好和你比较相像。不过这种方法并不是一直管用,因为朋友知道的毕竟是很有限的, 相信每个人都会有很纠结不知道去哪儿吃饭,或不知道什么商品更值得买的时候。那么这时候就需要一个Collaborative

2010-10-20 10:22:00 1026

原创 Hadoop- The Definitive Guide 笔记2

PigPig raises the level of abstraction for processing large datasets. With MapReduce, there is a map function and there is a reduce function, and working out how to fit your data processing into this pattern, which often requires multiple MapReduce sta

2010-09-26 15:59:00 3318

原创 Hadoop- The Definitive Guide 笔记

首先我们为什么需要Hadoop?The good news is that Big Data is here. The bad news is that we are struggling to store and analyze it.面对海量的数据,我们需要高效的分析和存储他们,而Hadoop可以做到这点,This, in a nutshell, is what Hadoop provides: a reliable shared storage and analysis system. The sto

2010-09-21 11:12:00 3155

原创 Extracting Information from Text With NLTK

因为现实中的数据多为‘非结构化数据’,比如一般的txt文档,或是‘半结构化数据’,比如html,对于这样的数据需要采用一些技术才能从中提取出有用的信息。如果所有数据都是‘结构化数据’,比如Xml或关系数据库,那么就不需要特别去提取了,可以根据元数据去任意取到你想要的信息。那么就来讨论一下用NLTK来实现文本信息提取的方法,first, the raw text of the document is split into sentences using a sentence segmenter, and ea

2010-09-08 16:58:00 5484 1

原创 Classify Text With NLTK

<br />Classification is the task of choosing the correct class label for a given input.<br />A classifier is called supervised if it is built based on training corpora containing the correct label for each input.<br /> <br />这里就以一个例子来说明怎样用nltk来实现分类器训练和

2010-09-03 18:09:00 9621

原创 POS Tagging

POS tagging:part-of-speech tagging, or word classes or lexical categories. 说法很多其实就是词性标注。那么用nltk的工具集的off-the-shelf工具可以简单的对文本进行POS tagging>>> text = nltk.word_tokenize("And now for something completely different")>>> nltk.pos_tag(text)[('And', 'C

2010-08-26 17:35:00 24890 1

原创 索引构造

顾名思义这章就是要谈怎样构造索引的问题,或者说在有限内存和有限时间内,怎么样高效的对大数据集构造索引文件。一旦有了这个索引文件,那么索引的压缩,基于索引的排序,前面的章节都已经讲过。链接列表先来看看最一般的方法,在内存中构建这样的数据结构,包含一个term字典,这个字典本身可以用数组,hash表,二分查找树来实现,字典中的每项,都包含一个指向term的倒排列表的指针,那么对于一个term的倒排列表一般用单项链表来实现,因为这个是动态的,就是说每一项包含文档号,文档内频率,和下一项指针。然后遍历每一篇文档,对

2010-08-06 17:47:00 1396

原创 查询

查询就是如何利用建好的索引来找到想要的文本,那么会介绍两种查询,一种是布尔查询(Boolean Query),另一种是排名查询(Ranked Query).布尔查询包含了一个术语列表,这些术语通过布尔操作符相连(and,or,not),查询的答案是满足规定条件的文档。布尔查询的缺点是会不可避免的返回很多无关的答案,而且查询一些小的变动会导致结果完全不同。因为布尔查询是机械的,必须精确匹配布尔表达式的文档才是候选结果。如‘data AND compression’ 和 ‘text AND co

2010-07-23 16:41:00 2051 1

原创 算法概论-堆排序

在看搜索引擎做查询结果排序的用到了堆排序,特来复习一下。那么在深入堆排序之前先来列举一下常见的排序方法,Insertion sort,最简单直观的排序方法,时间复杂度最坏O(n2),in place(Recall that a sorting algorithm sorts in place if only a constant number of elements of the input array are ever stored outside the array.)就是说除了输入数组,仅

2010-07-21 11:36:00 1366

原创 索引

在这个信息爆炸的年代, 信息索引的重要性不言而喻。现在主要的索引结构就是倒排索引,又称为记录文件(posting file),词汇索引(concordance)。其他的还有签名文件(signature file), 和 位图(bitmap)。倒排索引在结构上分为,倒排列表(inverted list)和字典, 倒排列表就是记录一列指针, 每个指针表示了术语所在的文档的编号,甚至是在文档中的位置。而字典就是记录了术语和倒排列表的对应关系。举个例子,cold (2;1,4)表示cold这个词出现

2010-06-21 17:37:00 1015

原创 Managing Gigabytes--文本压缩

开门见山,文本压缩可以归纳为两大类, 符号方法和字典方法, 下面分别介绍下:1)符号方法,symbolwise method普通编码方式是每个字符都采用相同位数编码, 比如asc码, 每个字符都是8位编码。那么现在要压缩,就是要用更少的位数来表示字符。显而易见, 我们只须用较小的位数来表示高概率字符, 用较长的位数来表示低概率字符,这样平均下来就可以实现压缩。那么这里面就有两个点:a)怎么来确定每个待编码字符的概率,这就是概率模型问题。所谓概率模型就是为编码器提供的概率分布函数,我们必须保证编码器,和解码器

2010-05-31 15:51:00 2238

原创 Lucene in action 笔记 term vector

Leveraging term vectors所谓term vector, 就是对于documents的某一field,如title,body这种文本类型的, 建立词频的多维向量空间.每一个词就是一维, 这维的值就是这个词在这个field中的频率. 如果你要使用term vectors, 就要在indexing的时候对该field打开term vectors的选项:Field op

2010-01-06 14:25:00 10572 5

原创 Lucene in action 笔记 case study

一. Nutch作为用lucene实现的开源search engine怎么使用lucene的了.Nutch用了许多个的lucene indexes放在不同的server上, 因为是面对Web-scale的, document数目在1-10billion量级, 非常的多, 必须用许多机器同时去进行index和search操作. 而且在query的时候需要快速反应, 不能因为某个server

2009-12-24 11:03:00 1002

原创 Lucene in action 笔记 analysis篇

Analysis, in Lucene, is the process of converting field text into its most fundamental indexed representation, terms. 这个分析的步骤不一定的, 一般会包含如下:extracting words, discarding punctuation, removing accent

2009-12-07 17:21:00 1884

原创 Lucene in action 笔记 search篇

一. 用lucene怎么完成search1. 创建IndexSearcherIndexSearcher searcher = new IndexSearcher(directory);2. 生成需要搜索的词Term t = new Term("subject", "ant");3. 创建查询Query query = new TermQuery(t);4. search

2009-12-04 11:06:00 1038

原创 Lucene in action 笔记 index篇

一. Index之前要做什么1. 将要index的内容转化为文本你要处理的文件可能是PDF, word, html, OK通通转化成文本, lucene只能处理文本2.分析文本在index之前, 必须对文本做一系列的分析, 对文本的token化, 就是分词. 然后滤掉一些没有区分度的词, 如stop word这个地方涉及语言相关性. 不同语言的处理会不同. 英文还要处理大小写,

2009-12-02 15:47:00 3052

原创 数论(算法概述)

1. 模运算模运算很有用, 最常用的是钟表.还有二进制负数的补码, 有2n 个数, [-2n-1 , 2n-1 -1]正数当然直接表示成2进制即可, 对于负数就需要用补码, 即[1, 2n-1] 的二进制表示的取反再加一.以前对这个补码不理解, 所以也一直记不住, 其实:Any number in the range -2n-1 to 2n-1 - 1

2009-11-18 15:51:00 1989

原创 关于Restful Web Service的一些理解

对于restful web service,刚开始确实是个不太好理解的概念。看了些文章,总是在描述和解释restful的原则:1)显式地使用HTTP方法。2)无状态。3)公开目录结构式的 URI。4)传输 XML、JavaScript Object Notation (JSON),或同时传输这两者。可是为什么要这样, 除了这种web service还有没有其他类型的web

2009-10-10 15:54:00 4671

原创 高效算法的常用技术(算法导论)

对于高效算法, 有些比较简单的技术, 如分治法, 随机化, 和递归求解技术.这边介绍些更为复杂的技术, 动态规划, 贪心算法当对于复杂问题设计算法时, 首先会想到使用分治法来解决, 分而治之, 一个很有哲理性的思路, 再复杂的问题都可以不断分解到你可以轻松解决的粒度, 把所有简单问题都解决完后, 组合在一起就得到了复杂问题的解, 可以看出其中典型的递归求解的思路. 使用分治法的

2009-09-10 17:58:00 2098

原创 初次开博, 自己记录一下.

想把自己学习的心得记下, 不写太容易忘, 发现写在本子上太容易丢, 于是想到写博客, 还能和大家分享一下.

2009-09-09 15:38:00 534

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除