intelligent web
这是我作为学生的最后一门课,最后一次提交作业,这门课让我受益匪浅,不只是学到什么知识,而是面对复杂问题时的一种思考方式,一种做事的态度,生活的态度。我怎么会选一门这么难的课,但是回想一下一路走来一直如此,我从来不捏软柿子。
这门课实际是为行业里一直在探索的知识管理(knowledge management)解决方案服务的,那位张扬的意大利教授就是研究这个领域的。而做成这件事的一个途径(而且目前看来是唯一的途径)就是利用尚未广泛应用的语义网框架及其衍生的技术。
于是,作业就是做一个语义信息抓取工具,简单地说就是抓取网络上分散的RDF数据。但是不知道老师是怎么想的,他又加进去了两个并不相关的功能,把抓取的数据与google map和twitter用户的tweets信息做整合输出,这是风马牛不相及的两个功能,难道他觉得我们的作业太简单了,又加进去了这两个功能?
这个系统实现的不是很理想,但是不妨记录一下我的解决思路,以示编程经验并不丰富的我也写过这样牛逼的程序。
1.首先要写一个域名内搜索程序,Jeff Heaton写的代码可以参考,写过搜索程序的人应该知道这个人,搜索之后可以自己写检索功能。
2.但Jeff Heaton的那个搜索只能解析HTML,而语义数据,主要是跟XML数据打交道,RDF也是基于XML语法格式表达的,这就需要在搜索程序中内置XML解析器。
3.你不用自己劳神费力的去写XML解析器(我最初的思路是自己写XML解析器,用DOM建模,用XPath遍历树形文档,现在想来真是初生牛犊不怕虎,真牛逼),Java类库中XML包提供两种不同的XML文档解析方式,一种是SAX Parser,一种是DOM Parser,解析原理不同,但是简单说来,如果解析的文件不大并且你编程水平有限的话,就用DOM模式。但如果解析文件很大,就只能用SAX模式解析,这是一种很复杂的基于输入字节流的解析方式,需要自己编写事件驱动程序。简单说来,DOM就是读入整个文档后整体解析,而SAX是读一点解析一点。而一个稍微复杂的XML文档的节点是很多的,整体解析是很没有效率且不现实的。但还好,我要处理的XML数据并不大,可以用DOM解析。当然Java提供JAXP进行更复杂专业的操作这里就不多说了。(当时写解析XML程序时卡了很久,没有仔细看那个关键的以url为参数的parse方法,然后找到那个方法再回头看那两种解析器后豁然开朗,还是因为没有写过这类程序没有经验)
4.当你成功将分散的XML数据解析成可处理的模型后,这里有一个拐点,就是你完全可以按处理XML的思路去处理RDF,也可以按照RDF的数据模型重新建模,但相比而言后者跟简单一点。惠普公司的语义网实验室提供了一个Java环境的语义工具开发框架叫Jena,总部就在英国的布里斯托。可以很方便的将建模后的XML文档作为参数解析成RDF数据模型。
5.从另一个语义网(DBpedia)抓取补充信息,惠普实验室的研发人员写过一篇详细介绍如何搜索RDF数据的文章,search RDF data with SPARQL。SPARQL就是语义网中的SQL,凡是提供SPARQL终端的网络都可以随意搜索其中你感兴趣的数据。
6.最后就是输出部分,比如抓取的某演员在某地某演出场地的信息,而演出场地的精确的经纬度信息可以从DEpedia中检索到,就需要嵌入google map交互地图输出显示,实际输出就是一个静态网页专辟一个div分区显示,需要熟悉google map javascript的公共接口,最新的接口版本是第三版,脚本语言本没有什么一目了然,主要是本地的数据与google后台数据进行融合以支持交互显示的问题,google提供了一个融合接口,叫Fusion Table API,不熟悉的话交互地图就做不出,我当时做到这里的时候已经开始骂娘了,这老师一句话,我们下面的做多少事啊。
7.最后是某机器程序生成的一些Twitter用户的tweets,如果其中提到某艺术家的名,则这些用户的微博信息也要整合到最后到静态网页输出。这个思路相对清晰,一个日本人写了一个Java的Twitter非标准包,叫Twitter4J,类库丰富功能强大,专门处理Twitter相关应用,结合Twitter公开的REST和search API可以很快写出搜索Tweets程序。
本来以为很快可以写完这篇关于intelligent webIT技术分享,结果还是写了一堆,要写这个语义信息抓取工具,需要熟悉相关网络协议(主要就是http),熟悉语义数据模型RDF,熟悉语义搜索语言SPARQL,熟悉语义开发框架就是惠普的那个Jena,熟悉Google的公共脚本接口和数据融合接口,熟悉Twitter公开的两类API,其实Google和Twitter这两个功能,我觉得完全是那个意大利人一拍脑门说给学生加点工作量吧,跟这个系统的主旨没什么关系。
最后,系统实现阶段回顾课件,我发现一些地方有很重要的点那位教授并没有讲,但是按道理如果要讲这个问题这个点是肯定要讲的,这应该不是忘了,而是故意不讲。我后来想了想,什么都讲的是小学,还是不讲的好,虽然学生要费点时间,真要都讲也讲不过来,这就是为什么把这个阶段叫研究生的原因。

本文来源 我爱IT技术网 http://www.52ij.com/jishu/826.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
