Archive for the ‘Techs’ Category

几个语义搜索站点和一些想法

Wednesday, May 30th, 2007 | 1 views

Read/Write Web上看到几个语义搜索的实践者。Cognition Search PowerSet,和 Lexxe。我第一个感觉是在忽悠。因为网络上靠忽悠,炒概念的人实在是太多了。这样的忽悠者,米国不比中国少。毕竟骗子处处有,被骗的傻子也处处有。

试了这几个站点, PowerSet并没有公开的发布它的搜索框,而是需要申请才有机会去体验一下它号称的Natural Language Search。据体验过的人说,搜索的时候词汇是限定的,而且其收录的站点也只是那些具有超高质量文章的站点。老实说,我看到Natural Language Search几个字的时候真是忍不住想笑,罢了罢了,还是要对实践者表示致敬。虽然不前不清楚它是在实践还是在忽悠。

Cognition Search有些低调,也提供了搜索框,但仅限于某几个特定的领域,Case Study ,Goverment, Political Blogs,能搜索的网站也是固定的而且及其有限。有一点比较有意思的是,当你搜完之后,它会试着给出一些你搜的关键词(往往搜索串的是谓语和宾语)的意义的备选项。你可以根据它给定的备选项来明确某个关键词的背后涵义,以帮助系统准确的理解搜索者的真正意图。Cognition Search做的工作蛮有意思的。

Lexxe给出了类似于Google的简洁的搜索界面,号称Powered By Advanced Natural Language Technology。我试了几个超简单英文疑问句,它的理解能力还是比较低下的,至于搜索结果,可能是索引量太少的缘故,惨不忍睹。有意思的是这个站点的图标是一个中文的“猎”字。

其实自然语言处理这回事,要一下子出来一个完全的解决方案是不现实的,但是在某一个小的领域,某一个小的应用还是不断的在发展的。当然了,如果目前的Web是语义Web了,我们理解网络上的文本信息也用不着自然语言处理这么麻烦。许多人在争论,哪一个成本更低一点,更加现实一点。这样的争论看来有些好笑,不管怎么看,这两个都是那么的不现实。但是,如果深入到其中的领域,你兴许就能体会到里面发生的深刻的变化和巨大的进步。类似于我这类的井底之蛙就只能坐着看看热闹了。

未来的网络-2007年语义技术会议

Monday, May 28th, 2007 | 1 views

http://www.readwriteweb.com/images/semantic_conf_may07.gif2007年的语义技术会议一周前在San Jose举办。Oracle是这次会议的主办方,记忆中Oracle对语义网技术相当热心,在digg上看到过一篇文章叫Oracle Blogs Homepage, Semantic Web Style,这个所谓的运行在语义网风格站点上的blog就是OTN,Oracle的官方blog。

这次会议一半的参加者是名不见经传的高科技小公司,我想称为高科技应该问题不大,搞语义网的小公司,如果不是正在忽悠的骗子,就是真正在忍受寂寞的高手,这两种类型都可以称为高科技。其余的一半都是超大型研究机构,比如NASA,美国国防部,美国空军,斯坦福大学,Lockheed Martin(不知道是什么)三个有点离谱的:波音,福特,沃尔玛(来干什么?凑热闹?)。正经一点的有微软,IBM,SUN,Google,Yahoo!,当然少不了主办方Oracle。什么样的听众都有,兴许大家都不想被时代拉在后面,看看这个所谓的下一代网络到底是怎么回事,发展到什么程度了?

会议的第一天主要是关于语义网的简介,理论背景相关技术介绍,学术氛围非常浓厚。呵呵,语义网大会上讨论的明星是OWL,一种来源与DAML+OIL的语言,名气很大。第二天主要介绍了一些现实的应用。特别需要提到的是Oracle允诺在他们的Oracle 10g数据库系统中支持RDF(!!!)。NASA的技术BOSS还谈到了他们的一个RDF数据浏览器,并允诺不久将以开源的形式公布。这个浏览器叫Japase。我恰好订阅了项目参与者Kendall Clark的blog。其他就没有什么好说的了,Yahoo!的Dave Beckett谈论了Yahoo!的语义网早期实践,其实没什么值得一说的。目前语义网真正发挥作用的还是医疗科学,出版部门等。

介绍两个小公司TextDigger,这是一个语义网搜索公司,干的活就如它的名字一样文本挖掘者。还有一个叫AskMeNow。也是干语义搜索这行的,服务蛮有意思的,可以去看下,不过它的服务偶们可能享受不到。

这篇post的资料主要来自于2007 Semantic Technology Conference - Showcased Big Internet Potential,如果您对这次语义网会议有兴趣的话,另外还可以看看这篇:BIANCA, 2007 Semantic Summer, and OWLED

什么是语义网?

Saturday, May 12th, 2007 | 1 views

语义网的真正目的是什么?
我认为它是一种愿景(vision),它提供一种把整个internet变成一个巨大的类似于关系型数据库的方法。从而更加方便的对整个internet进行数据挖掘。

The Semantic Web Will Never Work(语义网前景黯淡)

Friday, May 11th, 2007 | 1 views

digg搜Semantic Web的时候找到Clay Shirky写的一篇文章The Semantic Web,Syllogism,and Wordview。Clay Shirky认为语义网的世界观存在许多致命的错误而导致其难以应用。我总结下,他的观点大概如下:

  1. 三段论并不是很有用。三段论可以说是语义网的表达方式,思考方式。语义网支持者过分的高估了三段论对描述世界的有效性。虽然三段论的简单很吸引人,但是不是所有的文字的意思都是那么显而易见的,并且是,大部分的陈述都严重的依赖与上下文。相应的上下文又依赖于新的上下文,因此,要理解一句话,做推断需要难以克服的复杂性。
  2. 我们描述世界的方式并不精确,而常常是较为宽泛的,大概的。而语义网要求我们去精确的描述事物。如果语义网用我们这种并不精确的人类语言去做推理的基础,常常会出许多错误。
  3. 元数据(Meta-data)不是万灵药。
  4. 本体不是必要的。

Clay Shirky认为语义网技术同已成历史的Xanadu,Freenet一样,都是噱头,昙花一谢而已。

我刚接触语义网没有多久就开始做了个没有多大意义的应用,是用OWL DL来替代传统的数据库技术做为表示数据做为某种应用的底层(类似于数据库的作用),确实,OWL DL较传统的数据库表示更为合理。但是,需要花费的代价是巨大的,并且几乎不可真正使用。我不觉得这样的应用是语义网发展的方向,语义网在我可见的未来应当是在某些特定领域做为共享式的知识或者规则的表示更加合理一些,要成为下一代Web,不是很现实。

简单解决JSP中post乱码的问题

Thursday, May 10th, 2007 | 1 views

最近写JSP页面的时候又碰到了乱码问题,离前一次出现乱码的时间(问题解决方法)不是很久,编码问题是写程序永远难以避开的问题,有的时候百花齐放也未必是一件好事情。我做东西,喜欢全都做成UTF-8的形式。

这次的问题是这样的:在页面A的文本域里输入中文,然后通过POST方法传到页面B,在页面B中调用某个JavaBean,把相关的输入通过Jena提供的修改陈述的客体(或者主体)的方法将页面A中的输入持久化到本体。然后在C页面中再取出来显示,这时候发现显示的是乱码。A B C页面的编码方式皆为UTF-8。这中间涉及到的有可能产生编码问题的地方很多,经过分析,我认为应当是A页面POST到B页面的时候产生的问题,与本体,数据库没有关系(这之间的问题以前应该是已经解决了的)。

Tomcat默认POST的编码方式为ISO-8859-1这种西文方式,而非我需要的UTF-8,或者GB2312,GBK等。因此在POST传值的时候产生了乱码。解决这个问题的方法有不少,较为简单,但非长久之策的一个方法如下:将类似于 String name=request.getParameter(userName);这样的语句改成String name=new String((request.getParameter("birthday")).
getBytes("ISO-8859-1"),"utf8");
即可。这里UTF-8可以换成其他合适的编码。

这不是一个好的解决办法,更好的可以参考这个帖子

Wordpress2.0的一个bug?

Saturday, May 5th, 2007 | 1 views

我在写一篇post的时候觉得所见即所得的编辑器用起来有些痛苦,于是打算改回原来的编辑器,之前也改过一次。按以前的操作就是在Options->Writing->Users should use the visual rich editor by default把这个前面的钩去掉即可。类似于这样:

[div chenju]

Formatting:

[/div]重新更新即可了吧,可是更新之后进入Write Post时候出现的还是所见即所得的编辑器,我怕是由于缓存的关系,于是关了正操作的firefox,用 IE6重登录后进入一切还是如故,不知道为什么,上次这样使用的时候还是可以的。 哪位知道原因的可以帮忙说明一下么?先谢谢了。

Update:问题解决了,这并非是一个bug,还需要在Users/Your Profiles下将Users should use the visual rich editor by default去掉,这样总共有两个地方需要确认下。我是从这篇文章看到的,多谢了。483a0a66

Jena之外的选择:protégé-owl API

Monday, April 30th, 2007 | 1 views

一般做基于语义网的开发,Jena是最为常用的API,Jena提供了一整套完整的解决办法,特别是在对于本体的持久化方面,做的很不错。因此,一般做基于本体的应用常常采用Protege来制作本体,定义各种关系,然后在程序中采用Jena提供的API对本体进行操作。

Jena是极好的选择,但不是唯一的选择。大家写程序的时候可能常常会有这样的感觉,我在Protege中很轻松的做了这件事情,可是用Jena在程序中实现怎么这么麻烦。你可能会想到要实现几个跟Protege中一样的功能,但是你不知道怎么做。有没有Protege提供的API呢?有的,对于本体,Protege不仅仅提供了编辑软件,还提供了一整套的API,我翻过几下Protege源码,到处都用到了Jena,这个Protege的提供API是否是对Jena的再次封装,我还没细看,不大清楚。但使用的方便性据说是要好于Jena的,我想应当也是如此。另外,使用protégé-owl API有个较好的理由应该是程序可以利用protégé-owl API持久化到数据库的本体可以在直接在Protege软件中读取,既利用Protege软件做的OWL Database与利用这个protégé-owl API持久化后的格式是一致的,感性的讲,采用Protege持久化到数据库方式可能会比Jena持久化本体到数据库的方式性能方面要好一些。

下面给个例子,从这里看似乎与Jena没太大分别哦。

OWLModel owlModel = ProtegeOWL.createJenaOWLModel();
OWLNamedClass worldClass = owlModel.createOWLNamedClass("World");
System.out.println("Class URI: " + worldClass.getURI());

在看看下面几行代码,似乎是比Jena要舒服点,至少找类找属性等等不用自己一个一个去遍历了。

OWLNamedClass destinationClass = owlModel.getOWLNamedClass("Destination");
OWLObjectProperty hasContactProperty = owlModel.getOWLObjectProperty("hasContact");
OWLDatatypeProperty hasZipCodeProperty = owlModel.getOWLDatatypeProperty("hasZipCode");
OWLIndividual sydney = owlModel.getOWLIndividual("Sydney");

我在写程序的时候,对Jena的API进行了些简单的封装,也能提供类似的功能。

Effective Java以及其他

Sunday, April 29th, 2007 | 1 views

在4月24号收到了第二书店快递来的这两本书,发现第二书店的快递速度比china-pub要慢上一两天。又是一笔饭钱没了。

25号就准备回家呆几天,代码大全太厚,而Effective Java这本较薄的书正好带在路上解闷。传说中此书的中文翻译的不错,因此放心的买了中文版。

翻译的是潘爱民老师,我没读过他翻的其他书,不过名声不小。这本书翻的确实还可以,至少能读,有问题的地方不多,我读了1/3,没有找到几处要引起误解的地方。

Effective Java的作者是JOSHUA BLOCH,记得他也是Java Puzzlers的作者,喜欢纠缠语言的细节,探寻Java内部各种微妙的小径,微妙的陷阱。所谓微妙,就是说这些细节并不直观,甚至与直观相反。我的观点是,钻研这些细节不同于研究如何写茴香豆的茴字,而是不可或缺的。这些种种微妙的细处,在浩瀚的Java代码中处处可见,假若对此不是心知肚明,开发一个健壮的,可用的系统是十分困难的。工欲善其事,必先利其器。如果需要用Java语言来开发,掌握这门语言的种种细节还是十分必要。而类似Java Puzzlers这些书籍向我们极好的展示了这门语言细节之处,Effective Java的角度似乎更高一点。想要好好使用Java,我想这些书都是需要关注一下的。

Jena 数据库 Tomcat 怪异的问题及解决方法

Sunday, April 22nd, 2007 | 1 views

今天晚上做毕设,遇到了一个比较奇怪的问题。我们把自己做的类放在web-inf/classes/org/kylogs/sns下,然后把jena的相关包放在了web-inf/classes/com… web-inf/classes/edu/.. web-inf/classes/org….等等,按其package的安排放置,这样应当是合适的,JDBC的驱动也做这样的安排。可是,程序通过Jena提供的DBConnection来连接本体数据库,可是当我调用以下方法时出错:

[div code]public static OntModel getModelFromDB(IDBConnection con,String name){
ModelMaker maker = ModelFactory.createModelRDBMaker(con);
Model base=maker.getModel(name);
OntModel newmodel=ModelFactory.createOntologyModel(getModelSpec(maker),base);
return newmodel;
} [/div]具体出错是 maker.getModel(name); 这句,查看Expection栈给出的信息, java.lang.NullPointerException栈顶的是com.hp.hpl.jena.db.impl.PSet_TripleStore_RDB.class中的一个方法抛出的,经过分析它的源代码,发现抛出空指针的com.hp.hpl.jena.db.impl.PSet_TripleStore_RDB.SQLCache的一个实例,于是看了这个类的定义,然后又在前面一个类中找它的set方法,似乎都没有问题,更郁闷的是整个程序在eclipse中的终端中运行是正常的,把Expection栈给出的发生Expection类的源码都看了一通,还是毫无办法。

这个问题,初步分析肯定是包的放置问题,于是把classes文件下关于Jena和JDBC Driver相关的包全删除,而将它们的Jar文件拷到tomcat的lib下,重启tomcat,竟然通过了!我也不知道我为什么要这么做,但就是做了,更奇怪的是它竟然解决问题了。

这个问题的原因我目前还不是很明白,不过初步分析应该就是关于包载入顺序的关系,tomcat的bin下面有个bootstrap.jar文件,大概是定义了包的载入规则,至于细节,还不是很清楚。就此打住吧,不打算在这个问题上深究了,毕竟毕设没多少富余时间了。

关于

我叫陈炬,正在天津大学计算机学院->知识工程与科学研究所攻读硕士研究生。今年应届。您可以在我的自我介绍获得更多关于我的信息

订阅我的Blog


本站RSS地址| [这是什么?]
订阅到Google Reader | 订阅到 抓虾 阅读器 | 订阅到 鲜果 阅读器

其他blog

我还有一个英文blog,非常的无聊,琐碎,许多的语法错误。请谨慎访问。
Find entries :