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

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

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

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

首先安装: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

输出:为了吃

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源代码:

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源代码:

/*全句*/

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语言编程,【图片】教你快速制作一个简单的人工智能机器人(懂编程的人进来看)【科幻吧】_百度贴吧...相关推荐

  1. 教你快速制作一个简单的网页

    像下面这样一个简单的网页怎么制作呢? 通过这篇文章,可以让你基本掌握一个HTML的结构和常用标签的使用 需要用到的常用标签 <b> 加粗</b> ~~~~~~~~~~~~~~~ ...

  2. php如果实现日历的制作,教你如何制作一个简单的PHP日历

    PHP是一款功能强大的后端编程软件,我们在学习PHP的过程中要经过很多实际的战斗,现在让我们做一个日历来巩固PHP的基础,今天爱站技术频道小编为大家整理了教你如何制作一个简单的PHP日历,希望能帮到大 ...

  3. 实战教程|使用知晓云快速制作一个简单的个人博客

    我们在向大家征集开发课程大纲后,便陆续收到了很多建议.大家的热情与支持,是我们持续更新的动力. 由于大家的课程建议比较散,需要结合实际案例进行讲解,因此我们先从最简单的开始.本文将介绍如何通过知晓云的 ...

  4. 手把手教你制作一个简单的聊天机器人(图灵api)

    前言:在无聊的时候打打游戏.听听歌还不如来找个人来陪你聊天,今天来教大家制作一个聊天机器人,这样就不会无聊了,在线聊天机器人地址借愁哥哥机器人(可能有点丑,大家将就一下 (

  5. 教你如何制作一个简单的学生网页

    学生网页要求不能太高,老师在安排作业的时候会降低难度,一般是初学者的水平就可以了,我们在这里讲一讲如何简单制作一个学生静态网页,能够顺利通过考试. 准备工具 dreamwear 这是学习网页必备的软件 ...

  6. 【Houdini】如何利用黑白的图片在Houdini中快速制作一个立体的模型

    如何利用黑白的图片在Houdini中快速制作一个立体的模型 1.首先在Houdini右下角的Network中按tab创建一个Geometry 2.点击进入后,按tab创建一个trace 3.在trac ...

  7. 32位mips运算器logisim_大神教你制作一个简单的16位CPU

    如何制作一个简单的16位CPU,首先我们要明确CPU是做什么的,想必各位都比我清楚,百度的资料也很全..... 如果想要制作一个CPU,首先得明白下计算机的组成结构(或者计算机的替代品,因为并不是只有 ...

  8. 【Hyperledger Fabric入门】(一) 快速运行一个简单的Fabric网络2

    本文在Ubuntu18.04运行,fabric版本为2.3.0.本文篇幅较长,因此分为两篇.快速运行一个简单的Fabric网络1详见:link 目录 3. Orderer节点的启动 4. Peer节点 ...

  9. 流媒体视频服务:快速搭建一个简单的流媒体视频服务(一)

    快速搭建一个简单的流媒体视频服务 前言 系统组成 RTMP协议简介 Red5 概述 Red5 服务器搭建 前言 最近自己在研究有关于流媒体播放的技术,网上资料甚少.出于开源精神以及在查阅资料得到各位大 ...

最新文章

  1. java 移动页面中的图片上传_移动端图片操作——上传
  2. linux中安装vsftpd出现的问题
  3. $python爬虫系列(1)——一个简单的爬虫实例
  4. Windows azure国际版下通过 windows auzre powershell为VM分配绑定virtual ip address
  5. 使用parted命令对硬盘进行操作
  6. centos7 tomcat_centos7中利用logrotate工具切割日志,以tomcat日志为例
  7. Nginx 笔记与总结(11)Nginx + php-fpm + MySQL 安装 ecshop
  8. 网络七层协议 五层模型 TCP连接 HTTP连接 socket套接字
  9. 开源开放 | 图数据交互可视化分析框架 InteractiveGraph v0.3 版本发布
  10. 三菱plc可以用c语言编程吗,三菱PLC六种常用编程语言讲解
  11. YDOOK: USB 转 TTL 串口模块接线图
  12. 【游戏开发指路】Unity学习路线,三万字大纲(面试题大纲 | 知识图谱 | Unity游戏开发工程师)
  13. NanoMsg框架C++的相关函数介绍
  14. (转贴)联想员工亲历联想大裁员:公司不是家
  15. linu重置root密码(CentOS7)
  16. 电脑打印准考证图片显示不出来
  17. Atcoder题解与视频集
  18. MOSFET的基本知识
  19. 2015年macbookpro更换电池
  20. BibTex使用笔记

热门文章

  1. Zigbee的CC2530与烟雾传感器
  2. 模仿游戏中图灵设计的计算机叫什么,智能哲学:“第三问题”与图灵的“模仿游戏”...
  3. Rocksdb源码-读调用链路
  4. 文字也可以这样简单 这样优美的阅读
  5. 服装销售应如何掌握消费者心理
  6. Python标准库之 functools
  7. kdevelop怎么调试_Kdevelop的C++断点调试设置
  8. 一个比较漂亮的计算器
  9. 夜空中最亮的星:慕课网新手学习指南_慕课手记
  10. GBase 8s SQL 指南:教程———12 创建和使用SPL例程