先把目录与思路写在这儿,有机会慢慢补.
aiml如何支持中文补充完毕
请先参考我的github上pyaiml的代码
https://github.com/lemontreeshy/PyAIML
请允许我先废话介绍一下aiml的解析过程
xml解析这一部分,我就不多说了,主要是xml.sax进行的.
将问题转为词语列表这一步,由于aiml只支持空格分隔的语言,如英语,法语等等,对于中文的
支持力度差了一点,不过我们可以利用中文分词插件来将中文切割成空格分隔的字符串.
import jieba as jb
def splitChinese(s):
result = jb.cut(s)
ret = '|'.join(result)
return ret.split("|")
这段代码利用jieba分词天然能够区分中英文的优势,省去了判断中英文的过程,不过我还是要解释一下如何区别中英文(在unicode编码情况下)
def isChinese(c):
# http://www.iteye.com/topic/558050
r = [
# 标准CJK文字
(0x3400, 0x4DB5), (0x4E00, 0x9FA5), (0x9FA6, 0x9FBB), (0xF900, 0xFA2D),
(0xFA30, 0xFA6A), (0xFA70, 0xFAD9), (0x20000, 0x2A6D6), (0x2F800, 0x2FA1D),
# 全角ASCII、全角中英文标点、半宽片假名、半宽平假名、半宽韩文字母
(0xFF00, 0xFFEF),
# CJK部首补充
(0x2E80, 0x2EFF),
# CJK标点符号
(0x3000, 0x303F),
# CJK笔划
(0x31C0, 0x31EF)]
return any(s <= ord(c) <= e for s, e in r)
返回值为True即为中文,False为英文.
至于在代码何处调用splitChinese,参考链接里的aiml/AimlParser.py文件.