Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱

曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开发语言是C/C++,但平时的很多文本数据处理任务都交给了Python。离开腾讯创业后,第一个作品课程图谱也是选择了Python系的Flask框架,渐渐的将自己的绝大部分工作交给了Python。这些年来,接触和使用了很多Python工具包,特别是在文本处理,科学计算,机器学习和数据挖掘领域,有很多很多优秀的Python工具包可供使用,所以作为Pythoner,也是相当幸福的。其实如果仔细留意微博,你会发现很多这方面的分享,自己也Google了一下,发现也有同学总结了“Python机器学习库”,不过总感觉缺少点什么。最近流行一个词,全栈工程师(full stack engineer),作为一个苦逼的创业者,天然的要把自己打造成一个full stack engineer,而这个过程中,这些Python工具包给自己提供了足够的火力,所以想起了这个系列。当然,这也仅仅是抛砖引玉,希望大家能提供更多的线索,来汇总整理一套Python网页爬虫,文本处理,科学计算,机器学习和数据挖掘的兵器谱。

一、Python网页爬虫工具集

一个真实的项目,一定是从获取数据开始的。无论文本处理,机器学习和数据挖掘,都需要数据,除了通过一些渠道购买或者下载的专业数据外,常常需要大家自己动手爬数据,这个时候,爬虫就显得格外重要了,幸好,Python提供了一批很不错的网页爬虫工具框架,既能爬取数据,也能获取和清洗数据,我们也就从这里开始了:

1. Scrapy

Scrapy, a fast high-level screen scraping and web crawling framework for Python.

鼎鼎大名的Scrapy,相信不少同学都有耳闻,课程图谱中的很多课程都是依靠Scrapy抓去的,这方面的介绍文章有很多,推荐大牛pluskid早年的一篇文章:《Scrapy 轻松定制网络爬虫》,历久弥新。

官方主页:http://scrapy.org/
Github代码页: https://github.com/scrapy/scrapy

2. Beautiful Soup

You didn’t write that awful page. You’re just trying to get some data out of it. Beautiful Soup is here to help. Since 2004, it’s been saving programmers hours or days of work on quick-turnaround screen scraping projects.

读书的时候通过《集体智慧编程》这本书知道Beautiful Soup的,后来也偶尔会用用,非常棒的一套工具。客观的说,Beautifu Soup不完全是一套爬虫工具,需要配合urllib使用,而是一套HTML/XML数据分析,清洗和获取工具。

官方主页:http://www.crummy.com/software/BeautifulSoup/

3. Python-Goose

Html Content / Article Extractor, web scrapping lib in Python

Goose最早是用Java写得,后来用Scala重写,是一个Scala项目。Python-Goose用Python重写,依赖了Beautiful Soup。前段时间用过,感觉很不错,给定一个文章的URL, 获取文章的标题和内容很方便。

Github主页:https://github.com/grangier/python-goose

二、Python文本处理工具集

从网页上获取文本数据之后,依据任务的不同,就需要进行基本的文本处理了,譬如对于英文来说,需要基本的tokenize,对于中文,则需要常见的中文分词,进一步的话,无论英文中文,还可以词性标注,句法分析,关键词提取,文本分类,情感分析等等。这个方面,特别是面向英文领域,有很多优秀的工具包,我们一一道来。
继续阅读

发表在 数据挖掘, 机器学习, 科学计算, 自然语言处理 | 标签为 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , | 2 条评论

翻译技术沙龙第十六次活动——“互联网技术驱动下的语言服务众包模式” 通知

互联网技术的飞速发展为语言服务行业带来了巨大的挑战和市场需求。信息爆炸在带来海量待译内容的同时,也造成翻译内容碎片化现象,并提出快速交付的要求。与此同时,越来越多的译者或准译者进入语言服务市场,寻求工作和学习的机会。在机器翻译仍旧无法突破质量桎梏的情况下,有着效率高、参与面广、质量相对较高、成本较低等特点的众包翻译模式恰恰能够满足市场的需求。

“众包”概念自2006年出现以来,在语言服务、电商以及物流等领域的成功案例层出不穷。如今,TextMaster等国外众包平台日趋成熟,国内平台发展迅速,充分体现了众包模式的价值;而Facebook、Twitter等网站依托众包模式在短时间内实现多语种本地化,《哈利波特7》等畅销书的众包翻译尝试举得成功,亦说明众包翻译模式必将对传统翻译模式造成冲击。
继续阅读

发表在 自然语言处理 | 留下评论

[火光摇曳]神奇的伽玛函数(下)

原文链接: http://www.flickering.cn/?p=203

五、$ \Gamma(n) = (n-1)!$ 还是 $ \Gamma(n) = n! $ ? 

伽玛函数找到了,我们来看看第二个问题,为何伽玛函数被定义为满足 $\Gamma(n)=(n-1)!$? 这看起来挺别扭的,如果我们稍微修正一下,把伽玛函数定义中的 $t^{x-1}$ 替换为 $t^x$
$$ \Gamma(x) = \int_0^{\infty} t^{x}e^{-t}dt , $$
这不就可以使得 $\Gamma(n)=n!$了嘛。估计数学界每年都有学生问这个问题,然而答案却一直有一些争议。

欧拉最早的伽玛函数定义还真是如上所示,选择了$\Gamma(n)=n!$,事实上数学王子高斯在研究伽玛函数的时候, 一直使用的是如下定义:
$$ \Pi(x)=\int_{0}^\infty t^x e^{-t}\,dt ,$$
然而这个定义在历史上并没有流传开来。

Legendre

勒让德肖像水彩画

欧拉在伽玛函数的推导中实际上引入了两类积分形式
$$ \int_0^1 t^{x}(1-t)^{y}dt, \quad \quad \int_0^{\infty} t^{x}e^{-t}dt $$
现在我们分别称为欧拉一类积分和欧拉二类积分。勒让德追随欧拉的脚步,发表了多篇论文对欧拉积分进行了深入的研究和推广,不过在勒让德的研究中,对积分中的参数做了 $-1$的移位修改,主要定义为
$$ B(x, y) = \int_0^1 t^{x-1}(1-t)^{y-1}dt $$

$$ \Gamma(x) = \int_0^{\infty} t^{x-1}e^{-t}dt .$$
$B(x,y)$ 现在称为贝塔积分或者贝塔函数。其中$\Gamma(x)$ 的这个定义选择导致了 $ \Gamma(n) = (n-1)!$ 。实际上伽马函数中的$\Gamma$符号历史上就是勒让德首次引入的,而勒让德给出的这个伽玛函数的定义在历史上起了决定作用,该定义被法国的数学家广泛采纳并在世界范围推广,最终使得这个定义在现代数学中成为了既成事实。
继续阅读

发表在 自然语言处理 | 留下评论

[火光摇曳]神奇的伽玛函数(上)

原文链接: http://www.flickering.cn/?p=163

一、开篇

数学爱好者们汇集在网络论坛上的一大乐事就是对各类和数学相关的事物评头论足、论资排辈。如果要评选历史上最伟大的数学家,就会有一大堆的粉丝围绕高斯、黎曼、牛顿、欧拉、阿基米德等一流人物展开口水战;如果要讨论最奇妙的数学常数,$e, \pi, \phi=\frac{\sqrt{5}-1}{2} $ 肯定在候选队列中;如果要推举最美丽的数学公式,欧拉公式 $e^{i\pi} + 1= 0$ 与和式 $ 1 + \frac{1}{2^2} + \frac{1}{3^2} + \frac{1}{4^2} + \cdots = \frac{\pi^2}{6} $ 常常被数学爱好者们提及;如果有人追问最神奇的数学函数是什么? 这个问题自然又会变得极具争议,而我相信如下这个长相有点奇特的伽玛函数
$$ \Gamma(x)=\int_0^{\infty}t^{x-1}e^{-t}dt $$
一定会出现在候选队列中。

伽玛函数不是初等函数,而是用积分形式定义的超越函数,怎么看都让人觉得不如初等函数自然亲切。然而伽玛函数也被称为阶乘函数,高等数学会告诉我们一个基本结论:伽玛函数是阶乘的推广。通过分部积分的方法,容易证明这个函数具有如下的递归性质
$$\Gamma(x+1) = x \Gamma(x)$$
由此可以推导出,对于任意的自然数$n$
$$\Gamma(n) = (n-1)! .$$
由于伽玛函数在整个实数轴上都有定义,于是可以看做阶乘概念在实数集上的延拓。

如果我们继续再学习一些数学,就会惊奇地发现这个具有神秘气质的伽玛函数真是才华横溢。她栖身于现代数学的各个分支,在微积分、概率论、偏微分方程、组合数学, 甚至是看起来八竿子打不着的数论当中,都起着重要的作用。 并且这个函数绝非数学家们凭空臆想的一个抽象玩具,它具有极高的实用价值,频繁现身于在现代科学尤其是物理学之中。

笔者对数学的涉猎很有限,主要是从概率统计中频繁地接触和学习这个函数,不过这个函数多年来一直都让我心存疑惑:

  • 都说$n!$ 和伽玛函数是近亲,可是从相貌上这两个数学公式都差了十万八千里,历史上数学家们是如何找到这个奇特的函数的?
  •  现代数学对伽玛函数的定义使它满足 $\Gamma(n) = (n-1)!$,既然号称是$n!$ 的推广,为何定义伽玛函数的时候不让它满足$\Gamma(n) = n!$?这看起来不是更加舒服自然吗?
  •  伽玛函数是唯一满足阶乘特性的推广函数吗?
  •  伽玛函数在各种概率分布的密度函数中频繁出现,伽玛函数本身是否有直观的概率解释?

带着这些疑问,笔者翻阅了许多讲解伽马函数历史和应用的资料,发现伽玛函数真是一个来自异族的美女,与生俱来携带着一种神秘的色彩。你要接近她并不难,然而她魅力独特,令你无法看透。从她出生开始,就吸引着众多一流的数学家对她进行解读。 历史上伽玛函数的发现,和数学家们对阶乘、插值以及积分的研究有着紧密的关系,而这最早要从著名的沃利斯公式讲起。
继续阅读

发表在 自然语言处理 | 留下评论

NLPJob 主站上线

NLPJob之前主要以博客的模式在运作,虽然这个圈子的招聘很热闹,每次的招聘信息大家也响应的很热烈,但是毕竟博客这种人工模式比较低效,加之自己之前忙于其他的事情,这个博客慢慢的也淡了。前段时间,打开nlpjob的联系邮箱(nlpjob01 at gmail.com) 看了一下,赫然发现躺了很多邮件,包括招聘方的,也包括求职者的,由于自己的疏于搭理,冷落了这批同学,自己深感自责。所以,这段时间我在考虑把 NLPJob 的主站上线,考虑找个开源的或者自己动手写一个心中比理想的小众招聘网站来服务这个圈子。恰好清明的时候遇到了Jobberbase,试用后的立马觉得就是它了,所以这两天和同事一起着手定制和汉化,现在终于可以和大家打招呼了,欢迎大家试用,也欢迎大家多提建议。

www.nlpjob.com

这是一个完全自助式的互联网公司招聘平台,不需要任何注册信息。只需要在招聘和求职的时候留下相关的邮箱即可,我们的平台讲通过邮件服务为招聘者和求职者建立相关的联系

使用的时候招聘的同学可以直接发布职位,请注意,为了防止Spam,第一次发布职位的时候需要我们后台进行验证,如果验证通过,以后发布讲一路绿灯,畅通无阻,主要参照物将是邮箱。求职的同学可以在这个平台上直接申请相关的职位,求职信息及简历讲通过我们的平台邮件发送到招聘者的信箱之中。

另外特别需要注意的是,请猎头同学在发布职位的时候务必开头注明是猎头职位,否则讲无法通过验证或者将做删除处理。

如果您需要讲招聘信息置顶或者推荐到首页,请通过邮箱或者微博私信和我们取得联系,商讨相关事宜:

邮箱: nlpjob01@gmail.com
微博:@NLPJob

发表在 随笔 | 标签为 , , , , , , | 留下评论

顺丰海淘SFBuy首次体验-美国亚马逊海淘Kindle DX转运全攻略

虽然家里早已有一个6寸多的Kindle,但是发现阅读一些英文pdf书籍和paper还是很不方便,所以一直想搞一个大一点的Kindle。虽然知道海淘已经有一段时间,但是一直没有尝试,即使前段时间决定要买一个9.7寸的Kindle DX (Kindle DX, Free 3G, 9.7″ E Ink Display, 3G Works Globally) ,也跑到淘宝上了解了一下海外代购的价钱。不过促使我第一次开启海淘之旅的还是由于顺丰海淘SFBuy的走起:

SFBuy开淘走起!

SFBuy 自4月10日正式开放客户体验,请点击 “SFBuy邀请码获取” 或 “顺丰分享” 获取邀请码进行SFBuy注册,为了感谢您对SFBuy的支持,在4月30日前成功注册的客户我们将赠送一个月贵宾会员服务,欢迎您来注册!
我们将为您献上更贴心、更安全、更实惠、更快速的海淘转寄服务,通过SFBuy,海淘商品从美国转寄至中国内地只须7-10个工作日,运费低至三折,还可享受30天的免费仓储服务等。凭借顺丰速运超过20年的物流服务经验及稳定的技术保障,确保您海淘的宝贝安全到家。

所以在4月11号发现顺丰海陶SFBuy开放注册后,立即注册了一个账号,并且很快的在美国亚马逊(Amazon)上下单了Kindle DX (Kindle DX, Free 3G, 9.7″ E Ink Display, 3G Works Globally) ,也就在那天,发了这样一条微博:

今天无意间发现顺丰的海淘开放注册了, 就通过邀请码的方式注册了一个帐号,然后在美国亚马逊上下单了一个9.7寸的Kindle DX, 第一次正式体验海淘,这里将继续记录这次顺丰海淘之旅。

昨天拿到 Kindle DX , 相当开心,整个过程历经了12天,期间还由于 Amazon 周末在美国投递没有成功耽误了两天,所以补充了如下的微博:

52nlp:10美元的手续费//@52nlp: 刚刚拿到kindle,开始的时候由于周末UPS在美国没有投递成功耽误了两天外,其他都比较顺利,回头写个小总结。

这几条微博得到了很多同学的回应,今天还有同学评论也下单了 Kindle DX , 所以觉得很有必要在这里把这次顺丰海淘及转运的整个过程记录一下。这次海淘也Google了很多资料,发现网上有很多海淘攻略,也有很多美国亚马逊 Amazon 海淘攻略,但是关于顺丰海淘SFBuy的资料不是太多,主要也就是官网上提供了一些海淘攻略,所以也就有了本文的题目:顺丰海淘SFBuy首次体验-美国亚马逊海淘Kindle DX转运全攻略 。好了,以下将尽可能的详细说明整个顺丰海淘亚马逊 Kindle DX 的过程,希望对以后有相似需求的同学有些帮助,其实海淘也很简单
继续阅读

发表在 随笔 | 标签为 , , , , , , , , , , , , , , , , , , , , , , , , , | 14 条评论

DigitalOcean使用小记

晚上看到微博上的@developerWorks同学推荐DigitalOcean, 赫然发现自己使用DigitalOcean大概也一年了(2013年2月28日开始),自从前段时间把52nlp搬牵过来之后,我在国外的vps就只有DigitalOcean了。所以在微博上简短回复了一下:

上半年就开始用DO了,52nlp前段时间也搬到DO了,用的是10美元每月的Plan, 彻底告别了linode。

自从08年底52nlp开张以来,依次用过便宜好用的虚拟主机host2ez, 朋友免费赞助的小空间,Godaddy上免费附赠的空间(但是带广告),国外的老鹰主机(Hawkhost),以及用信用卡注册免费使用一年的AWS(但是一直没用上),直到遇见口碑极高的Linode,花上20多美元/每月搞一个完全自主拥有root权限的VPS(Virtual Private Server)后,发现自己已经离不开VPS了,虽然没有了Cpanel之类的控制面板可用(貌似也可以自己安装),但是更享受这种完全自主的命令行控制和Root权限。之后接触并玩过的VPS还有目前使用的阿里云和DigitalOcean

Linode大概使用了有两年,期间几乎没有出过什么问题,感觉非常棒,不过印象去年也是微博上某个朋友推荐我用DigitalOcean,号称配置SSD VPS( SSD cloud server, SSD云主机),了解了一下它的配置,发现最低配5美元/每月的Plan(512MB内存,1核,20G SSD硬盘, 1TB流量)和我每月20多美元的Linode Plan的配置基本旗鼓相当(不过目前linode最低配已经升级为1G内存…,印象也是这一年期间逐步加量不加价的,有竞争就是好啊),不过国外便宜的VPS有很多,不能因为便宜就放弃Linode,所以在没有放弃Linode的前提下选了一个Digital Ocean中最便宜的5美元/月的Plan玩一下,在这个上面诞生了“我爱公开课”,“挖课”等网站,也跑了一个python flask网站,课程图谱的前身:CourseraReview,从2013年2月28号到目前为止,基本上还没有出现过什么问题,感觉还不错,也欢迎大家体验这几个网站。

注,这里更新一下关于Linode的一些信息(2014.5.12):

网友 Efin 留言:

“我正在使用Linode的东京节点,用了刚一个礼拜,暂时未发现问题。
Linode现在最低配置是2G, 价格还是20刀/月。如果出现什么问题,可能会考虑试试这个DO。”

所以特意去linode主页看了一下,最低配不仅升级了内存到2g,而且也换了ssd,价格上现在看Digitalocean目前也没啥优势,之后两家pk的应该还是服务。对于老牌的Linode和新锐DigitaoOcean来说,目前都很放心,所以选择权再于你自己了。唯一区别的是linode最低配是20美元起步,DigtialOcean 5美元起步,后者更适合新人入门

2013年年底,终于决定告别用了2年多的Linode,不是因为Linode不好,而是性价比没有DigitalOcean好,刚好这篇对比DO和Linode的英文文章“Digital Ocean vs. Linode”也道出了我的心声,这哥们也使用了2年的Linode,但是最终决定告别Linode,投向DigitalOcean的怀抱。所以除了之前5美元的vps外,我又为52nlp选了一个DigitalOcean中最流行的10美元/月的Plan或者官方说法是”Droplets”,下面是我的后台截图,2个DigitalOcean Droplets:
继续阅读

发表在 随笔 | 标签为 , , , , , , , , , , , , , , , , , , , , , , , , , , , , | 16 条评论

中文分词入门之字标注法全文文档

将“中文分词入门之字标注法”这个系列整理成了一个PDF文档放到微盘中了,感兴趣的同学可以下载:

微盘:中文分词入门之字标注法.pdf
百度网盘:中文分词入门之字标注法.pdf

如果愿意看网页,也可以从这个标签进入:字标注中文分词

另外在上一节关于CRF中文分词的介绍中,通过CRF++训练了一个CRF中文分词模型,实际训练的时间比较长,为了方便大家测试,也把这个CRF模型上传到微盘了,感兴趣的同学可以下载:crf_model

注:原创文章,转载请注明出处“我爱自然语言处理”:www.52nlp.cn

本文链接地址:http://www.52nlp.cn/中文分词入门之字标注法全文文档

发表在 中文信息处理, 中文分词, 自然语言处理 | 标签为 , , , , , , , , , , , , , , | 8 条评论

中文分词入门之字标注法4

上一节主要介绍的是利用最大熵工具包来做字标注中文分词,这一节我们直奔主题,借用条件随机场工具“CRF++: Yet Another CRF toolkit”来完成字标注中文分词的全过程。

关于条件随机场(CRF)的背景知识,推荐参考阅读一些经典的文献:《条件随机场文献阅读指南》,另外再额外推荐一个tutorial:《Classical Probabilistic Models and Conditional Random Fields》, 这份关于CRF的文档分别从概率模型(NB,HMM,ME, CRF)之间的关系以及概率图模型背景来介绍条件随机场,比较清晰:

While a Hidden Markov Model is a sequential extension to the Nave Bayes Model, Conditional Random Fields can be understood as a sequential extension to the Maximum Entropy Model.

如果这些还不够过瘾,推荐课程图谱上收录的Coursera创始人之一Daphne Koller的“概率图模型公开课”,相信拿下这门课之后,对于上述概率模型,会有一种“一览众山小”的感觉。
继续阅读

发表在 中文分词, 条件随机场 | 标签为 , , , , , , , , , , , , , , , , , , | 2 条评论

中文分词入门之字标注法3

最近要整理一下课程图谱里的中文课程,需要处理中文,首当其冲的便是中文分词的问题。目前有一些开源的或者商用的中文分词器可供选择,但是出于探索或者好奇心的目的,想亲手打造一套实用的中文分词器,满足实际的需求。这些年无论是学习的时候还是工作的时候,林林总总的接触了很多实用的中文分词器,甚至在这里也写过一些Toy级别的中文分词相关文章,但是没有亲手打造过自己的分词器,甚为遗憾。目前自己处于能自由安排工作的阶段,所以第一步就是想从中文信息处理的桥头堡“中文分词”入手,打造一个实用的中文分词器,当然,首先面向的对象是课程图谱所在的教育领域。

大概4年前,这里写了两篇关于字标注中文分词的文章:中文分词入门之字标注法,文中用2-tag(B,I)进行说明并套用开源的HMM词性标注工具Citar(A simple Trigram HMM part-of-speech tagger)做了演示,虽然分词效果不太理想,但是能抛砖引玉,也算是有点用处。这次捡起中文分词,首先想到的依然是字标注分词方法,在回顾了一遍黄昌宁老师和赵海博士在07年第3期《中文信息学报》上发表的《中文分词十年回顾》后,决定这次从4-tag入手,并且探索一下最大熵模型和条件随机场(CRF)在中文分词字标注方法上的威力。这方面的文献大家可参考张开旭博士维护的“中文分词文献列表”。这里主要基于已有文献的思路和现成的开源工具做一些验证,包括张乐博士的最大熵模型工具包(Maximum Entropy Modeling Toolkit for Python and C++)和条件随机场的经典工具包CRF++(CRF++: Yet Another CRF toolkit)。

这个系列也将补充两篇文章,一篇简单介绍背景知识并介绍如何利用现成的最大熵模型工具包来做中文分词,另外一篇介绍如何用CRF++做字标注分词,同时基于CRF++的python接口提供一份简单的 CRF Python 分词代码,仅供大家参考。至于最大熵和CRF++的背景知识,这里不会过多涉及,推荐大家跟踪一下课程图谱上相关的机器学习公开课

这次使用的中文分词资源依然是SIGHAN提供的backoff 2005语料,目前封闭测试最好的结果是4-tag+CFR标注分词,在北大语料库上可以在准确率,召回率以及F值上达到92%以上的效果,在微软语料库上可以到达96%以上的效果。不清楚这份中文分词资源的同学可参考很早之前写的这篇文章:中文分词入门之资源。以下我们将转入这篇文章的主题,基于最大熵模型的字标注中文分词。
继续阅读

发表在 中文分词, 最大熵模型 | 标签为 , , , , , , , , , , , | 4 条评论