《实战案例分享》关于语音识别的功能实现分析(一)---结构化思维

2019-07-25 15:34:24 浏览数 (1)

前言

我们在前面已经介绍了关于语音识别的应用,这一章我们在介绍一下实现人工智能语音识别的处理方式。

先上视频效果

先看一下视频实现的效果

从上面的视频我们可以看到在条码扫描界面,通过语音识别的功能我们实现了

  • 商品的扫描录入
  • 商品的数量和价格的修改
  • 商品的价格修改

还有应该加入的商品查询定位功能在视频上没有体现出来。

思路分析

从视频中我们看到了通过语音识别我们实现单据里面商品的增、删、改、查。那单据的实现方式里面我们是怎么实现的呢?我们可以拆分成两个核心:

  • 怎么做?(How)
  • 做什么?(What)

怎么做

这里其实也是我们所说的操作指令,核心的指导就是增、删、改、查

做什么

视频中我们对单据的操作中可以看到,有几个关键点:商品信息是什么?数量是多少?价格是多少?


根据这两个核心内容,我们可以用思维导图的方式来看看实现效果

通过上面的导图,我们可以看到,操作方式里面的四种不同类型,我们可以整合到一起,而商品信息,数量,价格则都是关键信息,所以我们可以把听到的语音输入直接分为四大元素:

  1. 操作方式元素
  2. 商品信息元素
  3. 数量元素
  4. 价格元素

代码实现

类创建

首先我们根据上面分出的四大元素,建立一个类,用于把识别后的信息放置到对应的元素属性里面

我们建了一个CRecognition的类,

  • typeid就是我们的操作方式,设置到int的类型
  • Keyword就是关键词,也是就是我们的商品信息,因为如果找不到对应商品,数量和价格都没有意义了
  • qty就是数量,类型用float,有可能存在小数的问题
  • price就是价格,也是float类型

语义分析类

然后我们在建一个RecognizeText的类,用于语义的分析

首先先看一下视频中一句录入的语句

上面的一整句“录入14002001数量13价格4块6”我们用四大元素把这句话进行拆分就应该是“录入”,"14002001",“数量13”,“价格4块6”

想到完全的实现识音的人工智能现在我们还没达到那个水平,所以一般的功能性录入我们就要求客户使用时有一个规定,当时也是要我们自己规定的符合人性化才行。


关键词

录入方式

增:录入、输入

删:删除

改:修改、更新

查:查询、查找

我们把比较常用的关键词进行整合,放入一个String的数组里面

商品信息 (商品、编码、条码)

数量 (数量)

价格 (价格、进价)

然后把后面的三个关键词也放入另一个String数组里面


语义分割

上面这个GetKeywordfromStr是我们的分割关键词的核心方法。

参数说明:

  • textstr:就是我们说出来的整句话
  • strarray:这个是我们前面定义的关键词数组
  • istype:这个参数是我们输入是不是操作方式的关键词。这个参数下面会说到

看到这个找到关键词后,前面加上我们自己定义的分隔符“|”,根据我们上面这句话录入14002001数量13价格4块6

把两个关键词放进去后效果应该是“|录入14002001|数量13|价格4块6”

可以看出来操作方式,数量,价格都根据关键词区分出来了,但是我们的核心商品信息没有区分出来,根据人们的习惯,数量,价格这样的关键词会说,但是像商品信息,太严格按要求,对手户体验不好,而且如果我们说操作方式的指令后,再说这个就有点多此一举了,所以就有了刚才这个函数里面的第三个参数istype

这也是为什么我们把操作方式了词组和别的区分开了,因为在这个词组中我们可以加上输入参数让其知道这个是操作指令的词组,在这样的词组后面我们需要加上“|”分隔符。


看一下调用方式

可以看到我们调用的两次,第一个是词语里面的关键词,第二个是操作方式里面的关键词,这里面我加了几个Log.i用来输出tmpstr让我们看一下他能过加入分割符后输出的字符串效果,我们运行一下看看

可以看到上面,我们说出的原话进来后,通过第一次调用商品的关键词后把原语句分割为“录入14002001|数量15|价格4块6”,然后再通过调用操作方式的关键词把语句分割为“|录入|14002001|数量15|价格4块6”

这样我们就把语音输入的语义完美的分割来了,这章就先说到这里,下一章我们继续说一下怎么解析这个分割完后语义,然后把它转换成我们定义的那个类,再进行数据的处理。


-END-

0 人点赞