月度归档:2014年07月

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,对于中文,则需要常见的中文分词,进一步的话,无论英文中文,还可以词性标注,句法分析,关键词提取,文本分类,情感分析等等。这个方面,特别是面向英文领域,有很多优秀的工具包,我们一一道来。
继续阅读

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

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

“众包”概念自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$符号历史上就是勒让德首次引入的,而勒让德给出的这个伽玛函数的定义在历史上起了决定作用,该定义被法国的数学家广泛采纳并在世界范围推广,最终使得这个定义在现代数学中成为了既成事实。
继续阅读