HarmonyOS学习路之开发篇—AI功能开发(关键字提取)

2023-10-15 08:53:34 浏览数 (1)

关键字提取概述

在日常生活中充满了各种各样的信息,这些信息千变万化。文本语言作为信息传递的一种载体,同样面临有用信息和无用信息糅杂在一起的问题。关键字提取帮助用户在众多文本信息中快速提取出关键信息和核心内容,节省时间提高效率。

运作机制

关键字提取API提供了一个提取关键字的接口,通过该API可以在大量信息中提取出文本想要表达的核心内容,可以是具有特定意义的实体,如:人名,地点,电影等。也可以是一些基础但是在文本中很关键的词汇。通过该API可以对提取的关键字按照在文本中所占权重由高到低排序。排序越靠前,权重越高,对文本的核心内容的提取越准确。

约束与限制

  • 当前只支持中文语境。
  • 关键字提取标题文本限制在100个字符以内,正文文本限制在5000个字符以内,关键词提取个数小于等于20。文本为UTF-8格式,格式错误不会报错,但分析结果会不正确。
  • Engine支持多用户同时接入,但是不支持同一用户并发调用同一个特性。如同一个特性被同一进程同一时间多次调用,则返回系统忙错误;不同进程调用同一特性,则同一时间只有一个进程业务在处理,其他进程进入队列排队。

关键字提取开发

场景介绍

  • 游记摘要 本API可以从用户编辑的游记长文本中提取出能反映其核心思想的关键词汇,关键词按关键到相对非关键的权重顺序输出,帮助用户快速从长文本中提取出关键信息,快速给游记文章关键信息选择对应的标签上传。
  • 新闻标签 用户在浏览文章时,对感兴趣的想做收藏,可以使用本API,提取出关键信息,生成对应的标签。用户下次想继续浏览收藏的文章时,不用打开文章,便可通过生成的标签快速了解到文章的核心内容。

接口说明

可用于从新闻和邮件里提取出关键字,便于用户快速获取新闻和邮件的主题。关键字可以为有意义的实体,比如,人名、电影,也可以为非实体的关键词汇,如,上课、考研。

主要接口

接口名

功能描述

ResponseResult getKeywords(String requestData, int requestType);

同步接口,可用于从新闻和邮件里,提取出关键字后便于用户快速获取新闻和邮件的主题。

ResponseResult getKeywords(final String requestData, final int requestType, final OnResultListener<ResponseResult> listener);

异步接口,可用于从新闻和邮件里,提取出关键字后便于用户快速获取新闻和邮件的主题。

void init(Context context, OnResultListener<Integer> listener, boolean isLoadModel);

绑定NLU服务必须调用初始化服务,使用多个nlu服务接口时,只需要调用一次,异步接口。

void destroy(Context context);

解绑服务,初始化过就在销毁时需要解绑,让资源及时释放。

接口输入值说明

requestData的JSON格式如下:

参数名

是否必选

类型

说明

title

false

String

文章的标题,字符数不超过100。

body

true

String

文章的正文,字符数不超过5000。

number

true

int

需抽取的关键字个数,数值在1到20之间。

callPkg

false

String

调用者名称。

callType

false

int

调用者类型: 0:普通应用(默认)1:快应用

callVersion callState

false false

String int

调用者版本号。 调用者状态: -1:未知(默认)0:前台1:后台

  • 0:普通应用(默认)
  • 1:快应用

callVersion callState false false String int 调用者版本号。 调用者状态:

  • -1:未知(默认)
  • 0:前台
  • 1:后台

requestType表示请求类型,取值可以从ohos.ai.nlu.NluRequestType选择。

类型

说明

static final int

REQUEST_TYPE_LOCAL=0,本地请求。

接口返回值说明

ResponseResult中responseResult为JSON字符串,体现关键字提取的结果:

参数名

是否必选

类型

说明

code

true

int

结果码。取值为: 0:成功1:系统正在初始化2:参数错误3:系统忙4:系统异常5:任务超时6:其它错误

message

true

String

错误信息

keywords

true

JSONArray

关键字列表,按照权重的顺序返回

  • 0:成功
  • 1:系统正在初始化
  • 2:参数错误
  • 3:系统忙
  • 4:系统异常
  • 5:任务超时
  • 6:其它错误

message true String 错误信息 keywords true JSONArray 关键字列表,按照权重的顺序返回

参考示例如下:

代码语言:javascript复制
{
    "code":0,
    "message":"成功",
    "keywords":[
        "上课",
        "一起"
    ]
}

开发步骤

在使用关键字提取API时,将实现关键字提取的相关的类添加至工程。

代码语言:javascript复制
import ohos.ai.nlu.ResponseResult;// 接口返回的结果类
import ohos.ai.nlu.NluClient;// 接口服务类
import ohos.ai.nlu.NluRequestType;// 接口请求类型
import ohos.ai.nlu.OnResultListener;// 异步函数,执行成功的回调结果类
import ohos.ai.nlu.util.NluError;// 接口返回码

使用NluClient静态类进行初始化,通过异步方式获取服务的连接。

  • context:应用上下文信息,应为ohos.aafwk.ability.Ability或ohos.aafwk.ability.AbilitySlice的实例或子类实例。
  • listener:初始化结果的回调,可以传null。
  • isLoadModel:是否加载模型,如果传true,则在初始化时加载模型;如果传false,则在初始化时不加载模型。
代码语言:javascript复制
NluClient.getInstance().init(context, new OnResultListener<Integer>(){
        @Override
        public void onResult(Integer result){
         // 初始化成功回调,在服务初始化成功调用该函数
        }
}, true);

调用获取关键词提取方法得到分析结果,同一个接口提供了同步和异步两个方法,开发者可根据自己需要选择。

  • 同步
代码语言:javascript复制
String requestData= "{number:2,body:'今天我们一起去上课吧',title:'一起去上课'}";
ResponseResult respResult = NluClient.getInstance().getKeywords(requestData, NluRequestType.REQUEST_TYPE_LOCAL);
if (null != respResult)
{
// 获取接口返回结果,参考接口文档返回使用
String result = respResult.getResponseResult();
}

title为可选参数 ,不填的时候只分析正文body。

  • 异步
代码语言:javascript复制
// 待分析文本
String requestData= "{number:2,body:'今天我们一起去上课吧',title:'一起去上课'}";
// 调用接口
NluClient.getInstance().getKeywords(requestData, NluRequestType.REQUEST_TYPE_LOCAL,new OnResultListener<ResponseResult>(){
    @Override
    public void onResult(ResponseResult respResult)
    {
    // 异步返回
    if(null != respResult && NluError.SUCCESS_RESULT == respResult.getCode())
        {
        // 获取接口返回结果,参考接口文档返回使用
        String result = respResult.getResponseResult();
        }
    }
});

使用结束调用destroy()方法释放进程资源,如果持续使用建议在进程结束时释放,释放后需要重复第二步才能再次使用。

0 人点赞