就一点初步的理解,本体的目的在于信息整理与增进沟通,而聊天工具应该是一个极好的试验的平台和载体。最近才发现了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~ |