用Python做文本摘要

本文是系列的第三篇。 文本摘要 以下新闻来自雷锋网 Yahoo收购新闻摘要应用Summly 宗仁 2013-03-26 07:53 没有评论 标签:Summly 新闻摘要 Yahoo 昨日宣布收购新闻摘要移动公司Summly,价格可能为3000万美金,App本身允许你快速浏览和分享新闻,创始人Nick D’Aloisio17岁,曾获得Horizons Ventures, betaworks, Shakil Khan, Matt Mullenweg, Troy Carter的投资,而且跟新闻集团合作来采集内容。 Summly采用了自然语言处理算法,可将新闻内容提炼为不足400字的短句。用户可以快速浏览新闻话题,遇到感兴趣的内容再点击进入原始链接阅读全文。Summly在苹果AppStore应用商店中的下载量已超过50万次。 自从玛丽莎·梅耶(MarissaMayer)上任CEO后,雅虎几乎在任何事情上都恢复了步调。就在五天前,该公司收购了社交推荐公司Jybe,并获得了随同这次收购一起回到公司的前雅虎职员。 以下是雅虎在其官方博客上发布的声明: 今天我们很高兴地告诉大家,我们将收购Summly,一家本着简化我们获得信息的方式,使之更快、更容易、更简单的精神创立的移动产品公司。 尼克·德洛伊西奥在15岁时就在伦敦的家中开发了Summly应用。其始于一种见解——我们生活在一个信息世界里,需要新的方式简化我们寻找对我们很重要的报道,只需看一眼。移动设备正在改变我们的日常生活和工作,用户不但改变了他们消费的信息,也改变了信息的数量。 这篇新闻有两个值得注意的地方,第一,文本摘要很有价值;第二,技术不会很难,毕竟15岁的孩子都可以开发。 下面我们就来看看做文本摘要的大致思路。 大致思路 文本摘要 顾名思义,就是找出一部分重要的句子。 这句话有三个逻辑重点。 1. 找出一部分重要的句子 也就是说要把文章切成句子。比较直观的想法是根据标点符号以及空格、换行符等。断句这个问题,英文反而比中文要复杂,例如句号.和单引号'都是有多个意思的,都不一定能标明一句话的结尾。 2. 找出一部分重要的句子 如何衡量一篇文章里的每句话是否重要?怎样量化这个重要性?有以下思考的角度。 根据位置(标题、导语、段首段尾) 一般来说,文章尤其是新闻的标题、节标题、导语和段首段尾比较重要。对于html解析而言,就是title、h1、h2、a、strong等标记中的文字更重要。 根据内容 内容方面,需要把粒度细分到词的重要程度,如果一句话中的词很重要,那么这句话很重要。 那么就有下面的两个问题: 怎么获得一句话中的词?也就是分词问题。 词的重要程度如何衡量? 下面分别来介绍这两个问题。 2.1 分词 就是在词与词之间插入标记,一般是空格。英文文本不需要这一步,本来就有空格。但中文没有,而且一词多义现象很多, 语法结构还会随着词的位置而变化,因此中文分词是一个比较独特的问题。 但是中文分词和语音识别很像,因为语音信号在词与词之间也是没有空格的,因此可共用技术(HMM,CRF)。 Python比较好的中文分词工具有: 结巴分词 genius分词 2.2 词的重要程度如何衡量? 词频(TF) 需要去掉词频太高的词(停用词) 固定搭配的频率 N-Gram 词性 名词、动词一般比副词、形容词重要 ...

2014年3月26日

Python web api

本文是系列的第二篇。 rest服务 这里有简介 json Json Json与pojo Python处理json的库 import json #基本库 import simplejson #需用pip安装 Json->python object: json.loads(string_of_json) Python object->json: Json.dumps(json, indent=2) #indent为缩进空格数 Requests:http for humans 这里有中文简介 个人认为,requests是对Python价值观最好的体现。 示例2 pm2.5 问题:寻找可用的api,获取城市的pm2.5及空气质量数据 知识点:用requests写rest客户端 子问题1:寻找可用的api 通过google,找到这个有态度的网站 子问题2: 使用api 子问题3:结果缓存与定时获取 代码如下 # encoding=utf-8 u''' pm25.py Usage: pm25.py <cityname> Options: <cityname> 城市名 ''' from docopt import docopt def wget_pm25(city): token="5j1znBVAsnSf5xQyNQyq" import requests as r result=r.get("http://www.pm25.in/api/querys/pm2_5.json",params={ "city":city, "token":token, }) return result.json() def needs_refresh(filename,timeout=3600): return False import os,time mtime=os.path.getmtime(filename) now=time.time() return now-mtime>timeout def get_pm25(city): filename='pm25.data.{}.json'.format(city) import os,json data=None if os.path.isfile(filename) and not needs_refresh(filename): data=file(filename,'r').read() data=json.loads(data) else: data=wget_pm25(city) if type(data)==type({}): print data['error'] return -1 else: file(filename,'w').write(json.dumps(data,indent=2)) return data[-1]["pm2_5"] if __name__ == '__main__': args=docopt(__doc__) cities=args['<cityname>'] print get_pm25(args['<cityname>']) 示例3 使用flask-rest搭建rest服务 flask-rest 是一个使用flash框架搭建rest服务的工具,使用方法如下: ...

2014年3月25日

Python 初探

最近在公司做了一些python的技术分享,都是比较基础的东西,用到的一些题材还挺有意思的,和大家分享。 本文是系列的第一篇。 第二篇:Python web api 第三篇:用Python做文本摘要 起源 作者 Guido Van Rossum (GvR) “仁慈的终身独裁者” 得名 “1989年12月,我在寻找一门“课余”编程项目来打发圣诞节前后的时间。我的办公室会关门,但我有一台家用电脑,而且没有太多其它东西。我决定为当时我正构思的一个新的脚本语言写一个解释器,它是 ABC 语言的后代,对 UNIX / C 程序员会有吸引力。作为一个略微有些无关想法的人,和一个蒙提·派森(Monty Python)的飞行马戏团的狂热爱好者,我选择了 Python 作为项目的标题。” 每个人都会 1999年,Guido向DARPA阐述Python语言的特性: 简单、直观、强大 开源,以便任何人都可以为它做贡献 代码像纯英语那样容易理解 适用于短期开发的日常任务 这些想法中的一些已经成为现实。Python 已经成为一门流行的 编程语言,尤其是在互联网环境下。 特性 交互式命令行(Interactive console) Python可以单步直译运行。运行Python解释器进入交互式。 命令行的环境,你可以在提示符号»>旁输入代码,按Enter键输出结果: >>>print("Hello, Python!") Hello, Python! 有点像Shell 脚本的执行方式。 不只是脚本 “脚本语言”如Linux shell script、windows batch file等,只能处理简单的任务。 而Python是面向对象编程(OOP)的,支持异常处理和类型检查。Python的支持者较喜欢称它为一种高阶动态编程语言 强大易用的标准库 核心库不超过10Mb Html、Xml解析:BeautifulSoup, Expat 字符串处理:字典、数组切片、正则表达式 re 单元测试: PyUnit 代码版本控制: PySVN 网络访问: urllib2 图形模块: Tkinter、PyTCL、WxPython 串行化、多线程等 扩展标准库十分容易 ...

2014年3月24日