QQ小强,基本原理就是有一个根据汉语语法规则的对照表。
例如,你说:"去死吧",在程序中就会在对照表中找到与"死"有关的记录,然后对比"去死",确认与"去死"相关的记录,随机找出一条(这样对话就不会重复)。
如果句子过长,例如,"我今天很不开心",找出句子中的"主谓宾",这将语句分为:"我","不","开心",逐一组合与答复对应表进行匹配,再将初步筛选的记录针对"我不开心"进行最近似比较,最终确认回复的记录。
如果是短语/词汇就相对简单,只需要最多2层筛选就可确认。
补充一点,在一个句子中,确认主语是非常关键的,这样,可以决定回复的对象,例如:"你",那么,回复是,一定会有"我",如果主语为"我",那么回复中,则确定对象为"你"。
其次,是逻辑判断,即"是"、"否"、"不是"、"可能"、"不"、"肯定"等,来确定后面附带的名词或动词的含义(即相应动词或名词所关联的对应表)。
例子分析:"你去死吧",提取关键字:"你"(主语)、"死"(动词)
主语对应表:
主语"你" 关联回复:我
主语"你" 关联回复:那么你
动词对应表:
动词"死" 关联回复:不要死
动词"死" 关联回复:想死吗
动词"死" 关联回复:为什么想死
动词"死" 关联回复:死是很可怕的
经过筛选后,按照主谓宾格式输出:
我不要死
那么你想死吗
那么你为什么想死
我为什么想死
我死是很可怕的
。。。。。。。。。
等组合。
例子二:
输入语句:我今天非常不开心,提取关键字:"我","不","开心"
主语对应表:
主语"我" 关联回复:你
主语"我" 关联回复:那么我
动词与逻辑对应表:
1 动词"开心" 逻辑:不 关联回复:想想忧伤的事情
2 动词"开心" 逻辑:不 关联回复:世界上还有很多人更不幸
3 动词"开心" 逻辑:不 关联回复:感到难过
4 动词"开心" 逻辑:是 关联回复:也很开心
5 动词"开心" 逻辑:是 关联回复:值得庆贺
经过主语、逻辑、动词筛选后,按照主谓宾格式输出只会输入:1-3(逻辑字段为: 不):
你想想忧伤的事情
你世界上还有很多人更不幸
你感到难过
上面的回复就太勉强了,如果想让句子生动、流畅,那么就需要加入更多的动词、形容词、名词等词性的分析和相应的回复对应表。此外,如让想让你的机器人更强大,就要做到"记忆推论"功能,也就是将之前的对话作记忆,将新的对话建立在记忆的基础上。这样问题就复杂了。
此文是我回复 http://community.csdn.net/Expert/topic/3353/3353319.xml?temp=.3312952 贴的整理。
抛砖引玉,希望和大家共同探讨。