LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1821|回复: 7

『原创』LumaQQ+OWL--第一步 智能的产生?谁知道呢

[复制链接]
发表于 2006-2-19 16:07:30 | 显示全部楼层 |阅读模式
就一点初步的理解,本体的目的在于信息整理与增进沟通,而聊天工具应该是一个极好的试验的平台和载体。最近才发现了OWL这个好东西和W3CHINA,再加上lumaQQ中的聊天机器人,我想“好像料差不多齐啦,试着做点菜吧”。不管是糊的还是焦的,请各位先尝尝吧(由于接触本体不久,下面的说明对技术术语的使用和理解可能都有偏差;再加编程实力有限,各位请不吝指教)。
由于是基于lumaQQ的,此代码也应该遵循GNU General Public License 许可证(简称GPL)吧。

今天W3CHINA和lumaqq论坛上都发了,各位同好串串门吧~~

目标:
总的来说就是在聊天机器人中加入本体逻辑,实现汉语的本体运算映射(比如“人是动物<--人是动物的subclass”),再利用聊天机器人<-->人与机器人之间的聊天扩大知识库

现在实现的:
lumaQQ部分:
离线状态下的人机对话(用同一帐号,后简称为“自话”)
robot部分加入owl:
1、实现class的父子关系
2、实现owl文件本地存取
3、机器人之间的初步交谈

下面有几个角色:
我-人       
baby、圆圆-2个帐号,开启了机器人
设想的用例是:
我向baby灌输名词概念,格式为1、“××!”,baby直接记住此定义,作为一个OntClass,不问“什么是”问题。
                                                                                                                2、“×1是×2”,baby查询现有库记住                                                                                                                                ---实现
baby将名词加入现有库,若宾语在现有库中没有,则问人“什么是'×2'”
                                                                                        若有则加入                                                                                                                                                                                                        ---实现
我向baby问“什么是××?”baby找现有库中所有××的父类×1、×2...,若有则以“'××'是一种'×1' 是一种'×2'”表达
                                                                                                        若无父类则问圆圆(以后可能做到向所有认识的robot发问)看她知不知道,如果知道就返回结果。--程序有误,未能实现
自话时(在聊天机器人菜单中添加了一项“talk to robot”),可以做以上3件事


我的安装可编译版本过程:
0、下载Jena-2.3,解压
1、下载lumaqq_2005_source_2006.01.30.02.00源码包
2、解压后在eclipse3.1.0中打开(File->Import->Existing Projects into Workspace,选解压所在目录,五个文件夹全部导入)
3、报N个错,Window->referece->Java->Compiler中Compiler compliance level选为5.0,重编译,只有warning了
这里可以先解决8打开lumaQQ中的聊天机器人
4、向jql_net_2005导入nobody.zip,其中是增加的几个文件和修改的DummyRobot(owl相关部分),在jql_net_2005工程上右键Import->Archive file,选nobody.zip,在下面的路径栏中填“/”,ok
5、编译后报N个错,缺jar包,加入Jena目录下的junit,jena,xercesImpl,icu4j_3_4,jakarta-oro-2.0.8包
                在jql_net_2005工程上右键->roperities->Java Build Path->Libaries->Add External JARS
注:
6、向LumaQQ_2005导入nobody_qq.zip(MenuHelper与SendIMWindow(直接在对话框中嵌入robot处理,呵呵,懒,问题也多,和发送信息混在一起了))
7、run->Java Application,main class栏中选edu.tsinghua.lumaqq.LumaQQ
Console窗口报异常!
Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-win32-3138 in java.library.path
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.loadLibrary0(Unknown Source)
        at java.lang.System.loadLibrary(Unknown Source)
        at org.eclipse.swt.internal.Library.loadLibrary(Library.java:123)
        at org.eclipse.swt.internal.win32.OS.<clinit>(OS.java:18)
        at org.eclipse.swt.widgets.Widget.<clinit>(Widget.java:69)
        at edu.tsinghua.lumaqq.LumaQQ.main(LumaQQ.java:121)
        解决:
                在run的配置窗口中,VM arguments栏中: -Djava.library.path=$(lumaqq解压路径)\LumaQQ_2005\dist_win32_x86\swt
                重编
现在可以run出来了
8、菜单中无“聊天机器人”,http://lumaqq.linuxsir.cn/article/how_to_add_robot.html  如何加机器人
9、“聊天机器人”-->“开始聊天机器人”,qq挂掉了,报异常:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.xerces.parsers.SAXParser.<init>(Lorg/apache/xerces/xni/parser/XMLParserConfiguration;)V
        at com.hp.hpl.jena.rdf.arp.impl.RDFXMLParser$MySAXParser.<init>(RDFXMLParser.java:55)
        at com.hp.hpl.jena.rdf.arp.impl.RDFXMLParser.create(RDFXMLParser.java:82)
        at com.hp.hpl.jena.rdf.arp.JenaReader.<init>(JenaReader.java:76)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at java.lang.Class.newInstance0(Unknown Source)
        at java.lang.Class.newInstance(Unknown Source)
        at com.hp.hpl.jena.rdf.model.impl.RDFReaderFImpl.getReader(RDFReaderFImpl.java:101)
        at com.hp.hpl.jena.rdf.model.impl.ModelCom.read(ModelCom.java:221)
        at com.hp.hpl.jena.ontology.OntDocumentManager.findMetadata(OntDocumentManager.java:953)
        at com.hp.hpl.jena.ontology.OntDocumentManager.initialiseMetadata(OntDocumentManager.java:912)
        at com.hp.hpl.jena.ontology.OntDocumentManager.<init>(OntDocumentManager.java:199)
        at com.hp.hpl.jena.ontology.OntDocumentManager.<init>(OntDocumentManager.java:181)
        at com.hp.hpl.jena.ontology.OntDocumentManager.<init>(OntDocumentManager.java:165)
        at com.hp.hpl.jena.ontology.OntDocumentManager.getInstance(OntDocumentManager.java:243)
        at com.hp.hpl.jena.ontology.OntModelSpec.getDocumentManager(OntModelSpec.java:317)
        at com.hp.hpl.jena.ontology.impl.OntModelImpl.getDocumentManager(OntModelImpl.java:192)
        at com.hp.hpl.jena.ontology.impl.OntModelImpl.<init>(OntModelImpl.java:163)
        at com.hp.hpl.jena.ontology.impl.OntModelImpl.<init>(OntModelImpl.java:130)
        at com.hp.hpl.jena.rdf.model.ModelFactory.createOntologyModel(ModelFactory.java:385)
        at com.hp.hpl.jena.rdf.model.ModelFactory.createOntologyModel(ModelFactory.java:344)
        at com.hp.hpl.jena.rdf.model.ModelFactory.createOntologyModel(ModelFactory.java:327)
        at edu.tsinghua.lumaqq.qq.robot.DummyRobot.<init>(DummyRobot.java:48)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at java.lang.Class.newInstance0(Unknown Source)
        at java.lang.Class.newInstance(Unknown Source)
        at edu.tsinghua.lumaqq.ui.helper.ConfigHelper.getRobot(ConfigHelper.java:402)
        at edu.tsinghua.lumaqq.ui.helper.MenuHelper$78.widgetSelected(MenuHelper.java:1427)
        at edu.tsinghua.lumaqq.widgets.menu.CMenuItem.fireSelectionEvent(CMenuItem.java:107)
        at edu.tsinghua.lumaqq.widgets.menu.CMenu.handleMouseUp(CMenu.java:344)
        at edu.tsinghua.lumaqq.widgets.menu.CMenu$1.handleEvent(CMenu.java:206)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:843)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3080)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2713)
        at edu.tsinghua.lumaqq.ui.MainShell.open(MainShell.java:398)
        at edu.tsinghua.lumaqq.LumaQQ.main(LumaQQ.java:151)
        解决:
                google出来好像说xerces版本冲突,于是lumaQQ_2005中依赖的jar包中删去xerces.jar,luma不要打我,俺不知道会有啥后果...先这么凑合吧
        再run!千万不要死...怎么还假死一下...
        呼呼~~终于ok了
        玩吧~~
       
我的一点自话记录:
(baby)  2006-02-19 15:37:28

(baby)  2006-02-19 15:37:29
‘人’是一种‘东西’ 是一种‘动物’ 是一种‘生物’
(baby)  2006-02-19 15:41:04
帅哥
(baby)  2006-02-19 15:41:04
什么是帅哥?
(baby)  2006-02-19 15:41:28
帅哥是男人
(baby)  2006-02-19 15:41:28
‘帅哥’是一种‘男人’ 是一种‘东西’ 是一种‘动物’ 是一种‘生物’ 是一种‘人’
(baby)  2006-02-19 15:44:16
女人!
(baby)  2006-02-19 15:44:16
哦!
...
...我躲砖头~~躲飞斧 呵呵 够土的 大家见笑呵
       
好玩的事情,不想一个人玩了,请大家一起吧!
还有好多想做但不知能不能做的事情没写,大家一起侃吧!

注:没有将class文件替换到可单独运行的lumaQQ中进行测试
附件说明:两个源码包,两个owl是两个孩子产生的,都没仔细看...~o~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2006-2-20 16:06:24 | 显示全部楼层
老大,压缩包里面有文件不能解压的,是不是和名字是中文的有关,看看吧,谢谢了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-20 17:42:10 | 显示全部楼层

rar的问题?费解中...

刚试过,在eclipse是里可以导入的。
我那时候心血来潮搞了中文类名,sorry啦,下面的包里的nobody_en是英文类名的导出压缩包。

Post by icebuddy
老大,压缩包里面有文件不能解压的,是不是和名字是中文的有关,看看吧,谢谢了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-21 20:24:38 | 显示全部楼层

初步的设想

初步设想如下图,“大人”就是qq用户,“孩子”就是聊天机器人

现在就有的几个问题,
        qq方面,前提是尽量减少对qq的影响和对lumaQQ的修改,利用现有的功能实现。
                1、孩子之间的问题死循环对问如何解决
                2、当无法回答或者无法理解时,孩子产生的问题如何实现网络的广播(喊一嗓子)。首先是如何区分孩子和大人,其次是用什么形式发出问题。想到的是用好友验证的信息发出问题,因为一开始都不是好友。
        关键是“理解”方面,现在很迷茫。想从有限的推理入手。
        现在可以说是在可行性分析,也不知道会不会有过不去的坎...。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2006-2-21 23:59:20 | 显示全部楼层
能不能对你的附件的使用说详细一点啊?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-22 00:50:47 | 显示全部楼层
nobody.rar里的nobody.zip是在“我的安装可编译版本过程”第4步导入的,nobody_qq.zip是第6步导入的,还有两个.owl文件是我测试时产生的C盘根目录下的RDF文件,具体格式请参考http://bbs.w3china.org/index.asp上相关文章,我正开始学习,打算用lumaqq这个平台做试验,觉得很直观,和现实联系紧,也能增加些趣味。
回复 支持 反对

使用道具 举报

发表于 2006-2-22 12:16:41 | 显示全部楼层
说的简单点吧
我现在用linux
用j2sdk-1.5-update6+lumaqq
现在我要实现你的机器人
用最简单的方法(不编译什么东西只装你的插件)怎么实现
你说的导入是不是还要用什么编译器啊?
那我就不玩了
回复 支持 反对

使用道具 举报

发表于 2006-2-24 20:48:17 | 显示全部楼层
interesting
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表