智能机器⼈c语⾔编程,【图⽚】教你快速制作⼀个简单的⼈⼯智能机器⼈(懂编程的⼈进来看)【科。。。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
教你快速制作⼀个简单的⼈⼯智能机器⼈(懂编程的⼈进来看)
本⽂我⾸发于“⼈⼯智能吧”,叫做《机器⼈理解⼈类语⾔》和《计算机回答⼈类的提问》
这个机器⼈能理解你的语⾔,能和你对话,能学习知识。
⾸先安装:SQL Server,然后⽤SQL语⾔编程。
(⼀)计算机理解⼈类语⾔
说明:/* 符号 和 */ 符号之间的内容为注释内容。
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]%',变量)判定数字,去分直接宾语和间接宾语
*/
(⼆)计算机回答⼈类的提问
规范语法,是为了⽅便初学者学习,不规范语法也可以,但是代码就复杂多了,不适合给初学者看。
语法解释语⾔:主语 - 谓语 - 宾语 来表⽰ 动作执⾏者 - 动作 - 动作对象。
第⼀章 提问:主语、谓语、宾语
第⼀步:建⽴名词表和动词表。
在名词表添加词语:猫、⽼⿏,在动词表添加词语:追赶。
在名词表添加疑问词:谁,在动词表添加疑问词:怎样。
第⼆步:建⽴语法表:
第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
输出:为了吃
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论