分词概述
随着信息技术的发展,网络中的信息量成几何级增长逐步成为当今社会的主要特征。准确提取文本关键信息,是搜索引擎等领域的技术基础,而分词作为文本信息提取的第一步则尤为重要。
分词作为自然语言处理领域的基础研究,衍生出各类不同的文本处理相关应用。
基本概念
分词模块提供了文本自动分词的接口,对于一段输入文本,可以自动进行分词,同时提供不同的分词粒度。开发者可以根据需要自定义分词粒度。
约束与限制
当前只支持中文语境。
分词文本限制在500个字符以内,超过字符数限制将返回参数错误。文本需要为UTF-8格式,格式错误不会报错,但分析结果会不准确。
Engine支持多用户同时接入,但是不支持同一用户并发调用同一特性。若同一个特性被同一进程同一时间多次调用,则返回系统忙错误;不同进程调用同一特性,则同一时间只能处理一个进程业务,其他进程进入队列排队。
分词开发
场景介绍
分词相关接口可以应用于搜索引擎开发。对于搜索引擎而言,最重要的是如何把全网搜索的结果进行筛选,并按相关程度进行排序。分词的准确与否,常常直接影响到搜索结果的相关度排序。
分词相关接口可以应用于用户选择文本的场景。原始文本只能按字选择,如果使用分词,用户选中文本的时候可以按词选择。
接口说明
分词API的主要功能是将一个汉字序列切分成一个一个单独的词,可自定义分词的粒度。
主要接口
接口输入值说明
requestType表示请求类型,通过NluRequestType类定义如下:
类型 |
说明 |
static int |
REQUEST_TYPE_LOCAL = 0,本地请求。 |
requestData表示输入的文本信息,为JSON格式,如下:
参数名
是否必选
值类型
说明
text
是
String
待分析的文本,utf-8,文本长度不超过500个字符。
type
否
long
分词的粒度,默认为0。取值包括:
0:基本词,粒度较小。如“我要看速度与激情”,分成“我/要/看/速度/与/激情”。
1:在基本词的基础上,做实体合并。例如:“我要去江宁万达广场看速度与激情”,分成“我/要/去/江宁万达广场/看/速度/与/激情”。
对于没有可合并实体的文本信息,其分词效果与type为0的分词效果相同。例如:“明天下午3点一起看电影”,分成“明天/下午/3点/一起/看/电影”。
9223372036854775807(2的63次方减1):在type为1的基础上,把实体时间、地点等整体结构合并,出现符号隔开不合并,并把一些常用短语合并。如“形容词+的”,“单字动词+单字名词”等,简化句子成分。
例如“明天下午三点到五点我在江宁瑞都金逸影城看电影”,分成“明天下午三点/到/五点/我/在/江宁瑞都金逸影城/看/电影”。
目前NLU支持的实体类别:
接口返回值说明
返回值ResponseResult中responseResult为JSON字符串,体现分词的结果:
开发步骤
1. 在使用分词API时,将实现分词的相关类添加至工程
import ohos.ai.nlu.NluRequestType; import ohos.ai.nlu.NluClient; import ohos.ai.nlu.OnResultListener; import ohos.ai.nlu.ResponseResult;
2. 使用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);
3. 调用分词方法得到分析结果,接口提供同步和异步两个方法,开发者可根据自己需要选择。
同步
String requestData = "{\"text\":\"今天天气不错,我们一起看电影吧\\n\",\"type\":0}"; ResponseResult responseResult = NluClient.getInstance().getWordSegment(requestData, NluRequestType.REQUEST_TYPE_LOCAL);
异步
NluClient.getInstance().getWordSegment(requestData, NluRequestType.REQUEST_TYPE_LOCAL, new OnResultListener<ResponseResult>() { @Override public void onResult(ResponseResult result) { // onResult deal } });
4. 解绑服务。
NluClient.getInstance().destroy(context);