Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1524840
  • 博文数量: 465
  • 博客积分: 8915
  • 博客等级: 中将
  • 技术积分: 6365
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-30 15:05
文章分类

全部博文(465)

文章存档

2017年(33)

2016年(2)

2015年(4)

2014年(29)

2013年(71)

2012年(148)

2011年(178)

分类: IT业界

2011-08-31 16:55:37

获取更多的数据

在很多情况下,已有的数据就足以为自己的应用构建出有价值的智能。但在某些情况下,在应用中构建有价值的智能组件可能需要访问外部的信息。图1.6mashup网站HousingMaps)的截图。结合craigslisthttp:// )的房屋数据和Google的地图服务( maps/index.html),用户可以在这个网站中查看任何地理区域内待售或待租的房屋。

 

类似的,新闻网站也可以把新闻及事发地结合在一起,能从地图中获取位置信息,这对任何应用而言都是一种进步。但这并不意味着这是一个智能应用,除非能对这些从地图中获取的信息做一些智能的处理。

地图是一个很好的获取外部信息的例子,但在网络上还有很多其他的信息。让我们看看如何利用这些技术。

采集和信息抓取

爬虫(crawler)也被称为蜘蛛(spider),是用于从互联网上获取公开内容的程序。爬虫通常会访问一份URL列表,然后跟踪其中的每个链接。这个过程会不断地重复,重复次数被称为爬行深度(depth of crawling)。当爬虫访问完一个页面后,会将其内容存放到本地以做进一步的处理。这样可以收集大量的数据,但很快就会遇到存储和版权方面的问题。因此,在采集数据的时候一定要谨慎。在第2章中,我们会展示一个爬虫的实现。在附录中还有一个网络采集的整体介绍,其中总结了我们自己实现的爬虫和一些开源实现。

信息抓取(screen scraping)指的是从HTML网页中获取信息。这看上去很简单,但其实很烦琐。举个例子,要构建一个专用于外出就餐的搜索引擎(例如 foodiebytes.com),第一项工作就是要从各个餐厅的网页中获取菜单。信息抓取本身就能从本书介绍的技术中获益。在餐厅搜索引擎这个例子里,需要根据有用餐经验的食客们的评价对餐厅的优劣做出评估。有时候可以获得数值化的评分,但更多的情况是食客们的评论都是用自然语言写就的文章。逐篇地阅读这些评论,然后据此对餐厅进行排名显然是一个很糟糕的解决方案。在信息抓取的过程中应用智能技术可以实现评论的自动分类,并据此给餐厅打分,Boorahboorah.com)就是一个例子。

RSS

网站聚合(website syndication)是另一种获取外部数据的方法,这种方法无须使用爬虫反复地访问网站。通常,相对于常见的网页,结构化的聚合内容对机器更友好。常见的源格式有三种:RSS 1.0RSS 2.0Atom

顾名思义,RDF站点摘要(RDF Site SummaryRSS1.0源自资源描述框架[1]Resource Description FrameworkRDF),主要目的是让机器和人都可以理解网络上的信息。但是,人类可以推测内容的语义(单词或短语在特定语境中的含义),而机器则很难做到这一点。引入RDF的目的就是要对网络上的内容做出语义化的解释,从而可以根据具体的需求,从中解析出有用的数据。RSS 1.0的规范可在 resource.org/rss/1.0/站点找到。

简易资讯聚合(Really Simple SyndicationRSS 2.0)是基于Netscape的富站点摘要(Rich Site Summary0.91的,至少也是重载了后者的首字母缩写RSS,它的目的是简化基于RDF的格式。它采用了一种基于XML格式的聚合专用语言,但没有XML命名空间和RDF引用。现在,几乎所有的主流网站都提供了RSS 2.0,而且对个人用户和非盈利机构的非商业性使用都是免费的。Yahoo!RSS源站点(http://developer.yahoo.com/rss)上有很多相关的介绍,你可以在 harvard.edu/rss上找到RSS 2.0的规范和其他相关信息。

最后要介绍的是基于Atom的聚合。RSS 2.0中存在的一些缺陷使得人们开始开发互联网工程任务组(Internet Engineering Task ForceIETF)的RFC 4287)中所描述的标准。Atom并不是基于RDF的,它兼具RSS 1.0的灵活性和RSS 2.0的简洁。从本质上说,它是实现现有标准的功能和尽可能满足向后兼容性的妥协产物。然而,Atom已经像RSS 2.0一样广受欢迎。大部分网络聚合器(例如Yahoo!Google)都同时提供这两种格式的源。在IBM Developer Works上可以找到更多有关Atom聚合格式的信息:ibm.com/ developerworks/xml/standards/x-atomspec.html

RESTFUL服务

RESTRepresentational State Transfer)是Roy T. Fielding[2]在其博士论文中提出的。这是一种为分布式、超链接的媒介构建应用的软件架构风格。REST是一种无状态的C/S架构,它将每个服务都映射成一个URL。如果非功能性需求不是很复杂,而且不需要跟服务提供商签订正式的协议,REST就是一个便捷地访问互联网上各种服务的不错选择。关于这种重要技术的更多信息,可以参考Leonard RichardsonSam Ruby撰写的RESTful Web Services一书。

很多网站都提供了RESTful服务,你可以在自己的应用中使用这些服务。Digg提供了能接受REST请求的API),并且提供XMLJSONJavaScript和序列化PHP等多种不同类型的反馈。通过这个API,可以获取符合各种要求的新闻、用户、好友或用户的粉丝等。

Facebook API也是类REST风格的接口。所以,无论是什么编程语言,都可以与这个激动人心的平台进行交流。你要做的只是把HTTPGETPOST请求发送给Facebook API REST服务器。Facebook API有很好的文档,本书稍后也会用到这些API。详细信息请参考http://wiki.developers.facebook.com/index.php/API

Web服务

Web服务是用于应用之间相互交流的API,它有大量的Web服务框架,其中很大一部分是开源的。Apache Axis)是一个简单访问对象协议(Simple Access Object ProtocolSOAP)的开源实现,该协议“可以用于在无中心分布式环境中的节点间交换结构化、类型化的信息。”[3]Apache Axis是一个很流行的框架,在第2版中做了全新的设计,Apache Axis2支持SOAP 1.1SOAP 1.2,以及使用广泛的REST风格的Web服务,还有大量的其他功能。

另一个值得一提的Apache项目是Apache CXFhttp://incubator.apache.org/cxf/),这是IONACeltixCodehaus XFire结合的产物。Apache CXF支持的标准有:JAX-WS 2.0JAX-WSAJSR-181SAAJSOAP 1.11.2WS-I Basic ProfileWS-SecurityWS-AddressingWS-RMWS-PolicyWSDL 1.1 2.0。它还支持多种传输机制、绑定和格式。如果考虑使用Web服务,就应该看看这个项目。

除了这些数量众多的Web服务框架,还有更多的Web服务提供商,几乎每个公司都在使用Web服务整合各种各样的应用,这些应用的功能各不相同,所使用的技术也千差万别。这种情况有可能是公司合并的结果,也有可能是因为大型公司内部的开发工作协调不到位。纵向地看,几乎所有的大型金融投资机构都在使用Web服务来实现无缝整合。Xignite)就提供了金融方面的各种Web服务,SAP、甲骨文、微软等软件巨头也为Web服务提供支持。总之,基于Web服务的整合无处不在,而且作为主要的整合技术,它在智能应用的设计中也是重要的基础构件。

至此,你一定已经对如何改进自己的应用有了一些想法,或者已经对下一次激动人心的创业有了新的创意。我们已经确保获得了所有必要的数据,至少我们能访问到这些数据。现在来看看这些我们将要添加到应用中的智能,以及它们跟其他已熟悉的概念之间的关系。

 

本文节选自《智能WEB算法》一书。

图书详细信息:http://blog.chinaunix.net/space.php?uid=13164110&do=blog&id=2237174


 

 

 

阅读(525) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~