词性标注概述
随着信息技术的发展,网络中的信息量成几何级增长逐步成为当今社会的主要特征。准确提取文本关键信息,是搜索引擎等领域的技术基础,而分词作为文本信息提取的第一步则尤为重要。
分词作为自然语言处理领域的基础研究,衍生出各类不同的文本处理相关应用。
词性标注包括分词以及为分词结果中的每个单词标注一个正确的词性(标注每个词是名词、动词、形容词或其他词性)。开发者可自定义分词的粒度。
运作机制
词性标注提供了文本自动分词并给出词性的接口。对于输入的一段文本,自动通过词性标注接口对其进行分词,并为分词结果中的每个单词标注一个正确的词性。词性标注提供不同的分词粒度,开发者可以根据需要自定义分词粒度。
约束与限制
当前只支持中文语境。
词性标注文本限制在500个字符以内,超过字数将返回参数错误,文本需要为UTF-8格式,格式错误不报错,但会导致分析结果错误。
Engine支持多用户同时接入,但是不支持同一用户并发调用同一特性。若同一特性被同一进程同一时间多次调用,则返回系统忙错误;不同进程调用同一特性,则同一时间只能处理一个进程业务,其他进程进入队列排队。
词性标注开发
场景介绍
应用于搜索引擎开发。对于搜索引擎来说,在上百亿的网页中找到所有结果没有意义,重要的是把最相关的结果呈现在最前面,也称为相关度排序。分词的准确与否,会直接影响到对搜索结果的相关度排序。
应用于语义分析相关软件的开发。在语义分析中,通过分词理解文本所要表达的正确含义,并通过词性标注得到词性,准确地判断出某个词是名词、动词、形容词等,使得语义分析更方便扩展。
接口说明
词性标注提供了getWordPos()接口,该接口可以根据分词粒度,为分词结果中的每个单词标注一个正确的词性。
主要接口
接口输入值说明
requestType表示请求类型,通过NluRequestType类定义如下:
requestData表示输入的文本信息,为JSON格式,如下表说明。
目前NLU支持的实体类别
接口返回值说明
返回值ResponseResult中responseResult为JSON字符串,体现词性标注的结果:
开发步骤
在使用词性标注的接口时,将实现词性标注的相关类添加至工程。
import ohos.ai.nlu.NluRequestType; import ohos.ai.nlu.NluClient; import ohos.ai.nlu.OnResultListener; import ohos.ai.nlu.ResponseResult;
使用NluClient静态类进行初始化,通过异步方式获取服务的连接。
context:应用上下文信息,应为ohos.aafwk.ability.Ability或ohos.aafwk.ability.AbilitySlice的实例或子类实例。
listener:初始化结果的回调,可以传null。
isLoadModel:是否加载模型,如果传true,则在初始化时加载模型;如果传false,则在初始化时不加载模型。
NluClient.getInstance().init(context, new OnResultListener<Integer>(){ @Override public void onResult(Integer result){ // 初始化成功回调,在服务初始化成功调用该函数 } }, true);
调用词性标注的接口。
采用同步方式进行词性标注:
String requestData = "{\"text\":\"我要看速度与激情\",\"type\":0}"; ResponseResult responseResult = NluClient.getInstance().getWordPos(requestData, NluRequestType.REQUEST_TYPE_LOCAL);
采用异步方式进行词性标注:
NluClient.getInstance().getWordPos(requestData, NluRequestType.REQUEST_TYPE_LOCAL, new OnResultListener<ResponseResult>() { @Override public void onResult(ResponseResult result) { //异步返回处理 } });
销毁NLU服务。
NluClient.getInstance().destroy(context);