aiml解析之 LINUX C++ RebeccaAIML解析 测试程序 支持中文处理

最近在弄一些和aiml处理相关的工作,修改别人的工具包,遇到一些问题,记下来,供有需要的人参考使用,也欢迎留言讨论!

1.  官网下载RebeccaAIML包: http://www.alicebot.org/downloads/programs.html


http://rebecca-aiml.sourceforge.net/

这里下载一些依赖包,也可以在线安装这些依赖包的高级版本,我的系统安装给定版本的依赖包后不好用,还是在线安装高级版本的qt4和X11后好用。

2. 安装Boost工具包

3. 解压下载的工具包到你的linux系统相应文件夹,这里假设解压到/path/路径下,按照/path/RebeccaAIML/doc/linuxINSTALL.txt文档中的说明方法安装

进入路径/path/RebeccaAIML/build_files/autoconf/

./configure

make

make install

4.在/path/RebeccaAIML/src/rebecca/AIMLFacade.cpp  GraphBuilder.cpp  StringPimple.cpp文件中的catch(exception &e)报错:exception存在歧义

solution:对所有头文件#include<exception.h> 外的exception参数前面加上命名空间 std:: 。分析报错原因可能是引文定义了多个命名空间引起的。

5.  一些源码使用了boost的过期函数,也会报错,解决方法就是对过期函数用新的名词替代

solution: /src/rebecca/impl/GraphBuilderAIML.cpp

native_file_string() 替换成string()

string( iter->leaf() ) 替换成 ( iter->path().filename() ).string()

6. src/rebecca/impl/GraphBuider.cpp

报错:类型转换错误 不能将bool* 型转换成 void* 型

把源程序191、228行的nativeFileFormat() 参数 native去掉。查了一下boost库的path类,貌似没有带有两个参数的,这里不知道为什么这个函数有两个参数,去掉一个后就不报错了。至于真正的原因还不得而知。

7. /src/samples/console/console.cpp  consoleHtmlCoverter_tag_layer/consoleAIMLConverter.cpp 文件中exit() 函数报错

solution: 在报错文件中添加头文件 #include <stdlib.h>

8. usr/bin/ld: can't find -lXt 错误

之前安装官网下载的qt包不好用,如果报错就用yum命令在线安装高级版本的包,还有X11 。如果还报错好不到/usr/X11/一类的错误,就手动建立以下,把需要的lib文件拷贝一份过去。貌似需要重启下才好用。

9. 报关于doxgen的错误

在线安装doxgen包

10. 重新 ./configure 如果没有错误就 make 没有错误再 make install

11. 一定注意每次修改一个错误后重新make,看下类似的错误有没有在所有文件中改完,如果没有错误并且安装完成那么在你系统的usr/lib 或者usr/local/lib下面应该有RebeccaAIML的lib文件

我的系统在usr/local/lib下面生成了如下文件

这样这个解析包就算安装完成,可以在你系统的任何位置写你的测试程序啦,当然依照样例使用解析接口的时候不要忘记链接库的引入,加入-lrebecca-mt 即可

测试程序可以根据/RebeccaAIML/src/tests/graph-building下面的main.cpp函数自己更改编写,还要注意的是aiml库文件默认是放在main函数路径下面的./aiml/test

里面。

12. 经过测试,英文完全好用,中文文档不可用,改变编码方式也不行,很头疼啊,没办法,还是想出一个不是办法的办法:

先找到简体中文GB2312汉字与编码对照表:http://wenku.baidu.com/view/0ef57bfb04a1b0717fd5dd1a.html

然后将中文以编码的方式存放,每次读取数据时先转换编码,然后输出是再解码,这样就相当于处理的是英文,但是可以显示中文啦,这样做的一个弊端就是中文的

aiml库文件变得可读性很差。


如果读者有什么好的建议或意见处理中文aiml格式文档,欢迎留言交流!


你可能感兴趣的:(aiml解析之 LINUX C++ RebeccaAIML解析 测试程序 支持中文处理)