智能机器人c语言编程,【图片】教你快速制作一个简单的人工智能机器人(懂编程的人进来看)【科幻吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

教你快速制作一个简单的人工智能机器人(懂编程的人进来看)

本文我首发于“人工智能吧”,叫做《机器人理解人类语言》和《计算机回答人类的提问》

这个机器人能理解你的语言,能和你对话,能学习知识。

首先安装:SQL Server,然后用SQL语言编程。

(一)计算机理解人类语言

说明:/* 符号 和 */ 符号之间的内容为注释内容。

智能机器人c语言编程,【图片】教你快速制作一个简单的人工智能机器人(懂编程的人进来看)【科幻吧】_百度贴吧..._第1张图片

SQL源代码:

/*

设计语言:SQL

数据库名称:try

表名:verb,只有一列,列名:动词,数据类型:varchar(50)

表名:noun,只有一列,列名:名词,数据类型:varchar(50)

要找的动词和名词必须是动词表和名词表里已有的词

*/

/*全句*/

declare @s varchar(100)--全句的内容

set @s = '我很喜欢漫天飞雪的冬季'

/*寻找动词*/

declare @verb varchar(100)--要找的动词

set @verb = ''--默认为空

declare mouse cursor for select 动词 from [try].[dbo].verb--定义游标,叫做mouse

open mouse--打开游标

declare @cat varchar(100)--存储游标读出的数据

fetch next from mouse into @cat--读取下一条语句,并把游标获取的值存入cat变量

while @@fetch_status=0--SQL Server本身自带的全局变量,等于0表示读取下一条语句成功

begin--循环开始

set @cat = RTRIM(@cat)--注意:游标获得的@cat值,右边带有空格,必须用rtrim去除掉空格

if (CHARINDEX(@cat,@s)>0)--找到动词:@s变量包含@cat变量时,也就是数据库的动词@cat属于句子@s里

begin

set @verb = @cat--把cat变量的值(找到的动词)给verb变量

break--结束循环

end

else--还没找到动词

begin

fetch next from mouse into @cat--读取下一条语句,并把游标获取的值存入cat变量

end

end

close mouse--关闭游标

deallocate mouse--删除游标

if(@verb = '')--没有找到动词

print '句子不含动词'--输出

else--找到了动词

print '动词:' + @verb--输出

/*

函数说明:

截取函数:SUBSTRING(全句,截取的开始位置,截取长度)

判断词语在全句位置的函数:CHARINDEX(词语,全句)

测量变量字符串的长度:LEN(变量)

*/

declare @left varchar(100)--动词左边的内容

set @left = SUBSTRING(@s,1,CHARINDEX(@verb,@s)-1)--可以嵌套函数,把函数返回值作为SUBSTRING的参数

print '动词左边:' + @left

declare @right varchar(100)--动词右边的内容

set @right = SUBSTRING(@s,CHARINDEX(@verb,@s)+LEN(@verb),LEN(@s))

print '动词右边:' + @right

/*

用相同原理的方法,在@left里找主语(名词),相当于把@left作为全句变量@s进行分析

用相同原理的方法,在@right里找宾语(名词),相当于把@right作为全句变量@s进行分析

说明:建立形容词表和副词表,名词 + “的” = 定语,“在” + 名词 = 地点状语,用数量单位确定数词,PATINDEX('%[0-9]%',变量)判定数字,去分直接宾语和间接宾语

*/

(二)计算机回答人类的提问

智能机器人c语言编程,【图片】教你快速制作一个简单的人工智能机器人(懂编程的人进来看)【科幻吧】_百度贴吧..._第2张图片

规范语法,是为了方便初学者学习,不规范语法也可以,但是代码就复杂多了,不适合给初学者看。

语法解释语言:主语 - 谓语 - 宾语 来表示 动作执行者 - 动作 - 动作对象。

智能机器人c语言编程,【图片】教你快速制作一个简单的人工智能机器人(懂编程的人进来看)【科幻吧】_百度贴吧..._第3张图片

第一章 提问:主语、谓语、宾语

第一步:建立名词表和动词表。

在名词表添加词语:猫、老鼠,在动词表添加词语:追赶。

在名词表添加疑问词:谁,在动词表添加疑问词:怎样。

第二步:建立语法表:

第1列:主语。

第2列:谓语。

第3列:宾语。

第4列:时间状语。

第5列:地点状语。

第6列:目的状语。

第7列:原因状语。

第8列:条件状语。

第9列:结果状语。

为了简单的讲解,语法表不考虑定语(形容词、数词、名词所有格)和副词,也不考虑间接宾语。

第三步:用户教导:猫追赶老鼠。(先教导,后提问)

第四步:计算机语义理解:

请先阅读我之前发表的文章《计算机理解人类语言(源代码)》

通过语义理解得知:提问句的“猫”是主语,存入语法表的主语列, “追赶”是谓语,存入语法表的谓语列,“老鼠”是宾语,存入语法表的宾语列。

第五步:提问和回答。

用户提问:谁追赶老鼠

计算机分析:

通过语义理解代码,计算机得知该句的主语是“谁”,存入变量@zhuyu中,谓语是“追赶”,存入变量@weiyu中,宾语是“老鼠”,存入变量@binyu中。

IF(@zhuyu = ‘谁’)

SELECT 主语 FROM 语法表 WHERE 谓语 = @weiyu AND 宾语 = @binyu

输出:猫

IF(@weiyu = ‘怎样’)

SELECT 谓语 FROM 语法表 WHERE 主语 = @zhuyu AND 宾语 = @binyu

输出:追赶

IF(@binyu = ‘谁’)

SELECT 宾语 FROM 语法表 WHERE 主语 = @zhuyu AND 谓语 = @weiyu

输出:老鼠

同理,还可以提问:猫怎样老鼠,猫追赶谁。

第二章 提问状语:时间、地点、目的、原因、条件、结果

第一步,教导:

要求:教导时,状语和主句用逗号隔开。主句:猫追赶老鼠。

教导时间状语:昨天,猫追赶老鼠。

标志词:昨天。

教导地点状语:在操场,猫追赶老鼠。

标志词:在。

教导目的状语:猫追赶老鼠,为了吃。

标志词:为了。

教导原因状语:由于猫饿了,猫追赶老鼠。

标志词:由于。(不用在主句加“所以”)

教导条件状语:如果猫饿了,猫追赶老鼠。

标志词:如果。

教导结果状语:猫追赶老鼠,结果猫吃了老鼠。

标志词:结果。

第二步,计算机确定壮语:

确定主句和状语:根据逗号,把主句和状语分开,包含谓语的句子为主句,不包含谓语的句子为状语。

分割方法在《计算机理解人类语言(源代码)》一文中,已经讲解了。

截取函数:SUBSTRING(全句,截取的开始位置,截取长度)

判断词语在全句位置的函数:CHARINDEX(词语,全句)

测量变量字符串的长度:LEN(变量)

按照逗号分割句子,逗号左边的部分存入@left,逗号右边的部分存入@right。

如果@left包含谓语,@left就是主句,@right就是状语,@right赋值给@zhuangyu。

如果@right包含谓语,@right就是主句,@left就是状语,@left赋值给@zhuangyu。

如果@zhuangyu包含时间状语标志词:昨天,则把该状语存入语法表的时间状语列,主句存入同一行的主、谓、宾列。

如果@zhuangyu包含地点状语标志词:在,则把该状语存入语法表的地点状语列,主句存入同一行的主、谓、宾列。

如果@zhuangyu包含目的状语标志词:为了,则把该状语存入语法表的目的状语列,主句存入同一行的主、谓、宾列。

如果@zhuangyu包含原因状语标志词:由于,则把该状语存入语法表的原因状语列,主句存入同一行的主、谓、宾列。

如果@zhuangyu包含条件状语标志词:如果,则把该状语存入语法表的条件状语列,主句存入同一行的主、谓、宾列。

如果@zhuangyu包含结果状语标志词:结果,则把该状语存入语法表的结果状语列,主句存入同一行的主、谓、宾列。

判断一句话是否包含某个词的方法在《计算机理解人类语言(源代码)》一文中,已经讲解了。

如果CHARINDEX(特定的词,全句)>0表示全句包含该词。

第三步:提问和回答:

要求:提问时,状语和主句用逗号隔开。主句:猫追赶老鼠。

提问:什么时间,猫追赶老鼠

通过语义理解得知:提问句的“猫”是主语, “追赶”是谓语,“老鼠”是宾语,“什么时间”是状语。然后把状语部分的内容放入变量@zhuangyu中,主语存到@zhuyu中,谓语存到@weiyu中,宾语存到@binyu中。

IF(@zhuangyu = ‘什么时间’)

SELECT 时间状语FROM 语法表 WHERE主语 = @zhuyu AND谓语 = @weiyu AND 宾语 = @binyu

输出:昨天

IF(@zhuangyu = ‘什么地点’)

SELECT 地点状语FROM 语法表 WHERE主语 = @zhuyu AND谓语 = @weiyu AND 宾语 = @binyu

输出:在操场

IF(@zhuangyu = ‘什么目的’)

SELECT 目的状语FROM 语法表 WHERE主语 = @zhuyu AND谓语 = @weiyu AND 宾语 = @binyu

输出:为了吃

IF(@zhuangyu = ‘什么原因’)

SELECT 原因状语FROM 语法表WHERE主语 = @zhuyu AND谓语 = @weiyu AND 宾语 = @binyu

输出:由于猫饿了

IF(@zhuangyu = ‘什么条件’)

SELECT 条件状语FROM 语法表 WHERE主语 = @zhuyu AND谓语 = @weiyu AND 宾语 = @binyu

输出:如果猫饿了

IF(@zhuangyu = ‘什么结果’)

SELECT 结果状语FROM 语法表 WHERE主语 = @zhuyu AND谓语 = @weiyu AND 宾语 = @binyu

输出:结果猫吃了老鼠

计算机回答人类提问 SQL源代码:

智能机器人c语言编程,【图片】教你快速制作一个简单的人工智能机器人(懂编程的人进来看)【科幻吧】_百度贴吧..._第4张图片

declare @sen varchar(100)

set @sen = '猫追赶老鼠'

/*

语义理解。具体代码见:计算机理解人类语言(源代码),此处省略

通过语义理解,得知主语、谓语、宾语,然后存入相应的变量

*/

declare @zhuyu varchar(100)

declare @weiyu varchar(100)

declare @binyu varchar(100)

/*因为省略了语义理解代码,所以下面的赋值,我手工填写*/

set @zhuyu = '猫'

set @weiyu = '追赶'

set @binyu = '老鼠'

/*

建立一张表,表名sentence(数据库名:try)

第1列,列名:主语,数据类型:varchar(50)

第2列,列名:谓语,数据类型:varchar(50)

第3列,列名:宾语,数据类型:varchar(50)

*/

insert into [try].[dbo].sentence values(@zhuyu,@weiyu,@binyu)--按照主、谓、宾,插入sentence表

/*提问*/

declare @ask varchar(100)

set @ask = '谁追赶老鼠'--提问的内容,不用加问号

/*

语义理解。具体代码见:计算机理解人类语言(源代码),此处省略

通过语义理解,得知主语、谓语、宾语,然后存入相应的变量

注意:名词表里必须先加入“谁”,动词表里必须先加入“怎样”,然后再执行此代码,否则语义理解会失败

因为省略了语义理解代码,所以下面的赋值,我手工填写

*/

set @zhuyu = '谁'

set @weiyu = '追赶'

set @binyu = '老鼠'

/*计算机回答提问*/

declare @answer varchar(100)

IF(@zhuyu = '谁')--对主语进行提问

BEGIN

SET @answer = (SELECT 主语 FROM [try].[dbo].sentence WHERE 谓语 = @weiyu AND 宾语 = @binyu)

PRINT '回答: ' + @answer

END

IF(@weiyu = '怎样')--对谓语进行提问

BEGIN

SET @answer = (SELECT 谓语 FROM [try].[dbo].sentence WHERE 主语 = @zhuyu AND 宾语 = @binyu)

PRINT '回答: ' +@answer

END

IF(@binyu = '谁')--对宾语进行提问

BEGIN

SET @answer = (SELECT 宾语 FROM [try].[dbo].sentence WHERE 主语 = @zhuyu AND 谓语 = @weiyu)

PRINT '回答: ' +@answer

END

分割状语和主句 SQL源代码:

智能机器人c语言编程,【图片】教你快速制作一个简单的人工智能机器人(懂编程的人进来看)【科幻吧】_百度贴吧..._第5张图片

/*全句*/

declare @m varchar(100)--全句的内容

set @m = '在学校,我看见一只猫'

if (CHARINDEX(',',@m)>0)--找到逗号:@m变量包含逗号时

begin

declare @l varchar(100)--逗号左边的内容

set @l = SUBSTRING(@m,1,CHARINDEX(',',@m)-1)--可以嵌套函数,把函数返回值作为SUBSTRING的参数

print '逗号左边:' + @l

declare @r varchar(100)--逗号右边的内容

set @r = SUBSTRING(@m,CHARINDEX(',',@m)+LEN(','),LEN(@m))

print '逗号右边:' + @r

end

if (CHARINDEX('在',@l)>0)--如果句子中包含“在”字

print '逗号左边为地点状语'

if (CHARINDEX('在',@r)>0)

print '逗号右边为地点状语'

if (CHARINDEX('昨天',@l)>0)--如果句子中包含词语“昨天”

print '逗号左边为时间状语'

if (CHARINDEX('昨天',@r)>0)

print '逗号右边为时间状语'

if (CHARINDEX('为了',@l)>0)

print '逗号左边为目的状语'

if (CHARINDEX('为了',@r)>0)

print '逗号右边为目的状语'

if (CHARINDEX('由于',@l)>0)

print '逗号左边为原因状语'

if (CHARINDEX('由于',@r)>0)

print '逗号右边为原因状语'

if (CHARINDEX('如果',@l)>0)

print '逗号左边为条件状语'

if (CHARINDEX('如果',@r)>0)

print '逗号右边为条件状语'

if (CHARINDEX('结果',@l)>0)

print '逗号左边为结果状语'

if (CHARINDEX('结果',@r)>0)

print '逗号右边为结果状语'

你可能感兴趣的:(智能机器人c语言编程)