机器学习服务助应用内文本语种在线和离线检测

当用户有跨语种交流或内容翻译的需求时,应用需要能自动检测文本的语种再进行翻译。
HMS Core 机器学习服务的语种检测服务提供在线语种检测和离线语种检测,既支持检测单语种文本,也支持检测混合语种文本,涵盖南非荷兰语、阿拉伯语等百种语言。接入语种检测服务,App 可以轻松实现翻译语种检测、网页语种检测,混合语种场景中语种检测等,帮助 App 提升用户体验。

语种检测流程
输入文本,机器学习服务语种对该文本自动进行语种进行检测,然后返回对应语种编码和相应的置信度,或者返回一个置信度最高的语种编码给开发者的应用。最终在开发 app 页面呈现出翻译出的文本。
up-762a1ec8d5d19520b9cea379863f682768d.png
效果演示 up-bffa6cb263aa6cc9a13760c78612fe9334f.gif

1. 开发准备
在进行开发前需要配置 HMS Core SDK 的 Maven 仓地址
  1. repositories {
  2.     maven {
  3. url'https://cmc.centralrepo.rnd.huawei.com/artifactory/product_maven/' }
  4. }
集成在线语种检测服务 SDK,示例代码如下
  1. dependencies{
  2.     implementation 'com.huawei.hms:ml-computer-language-detection:3.4.0.301'
  3. }

2. 编辑工程集成
2.1 设置应用的鉴权信息
  1. 可以通过api_key或者Access Token来设置应用鉴权信息。
  2. 通过setAccessToken方法设置Access Token,在应用启动时初始化设置一次即可,无需多次设置。
  3. MLApplication.getInstance().setAccessToken("your access token");
  4. 通过setApiKey方法设置api_key,在应用启动时初始化设置一次即可,无需多次设置。
  5. MLApplication.getInstance().setApiKey("your ApiKey");
2.2 创建语种检测器
  1. // 方式一:使用默认的参数配置创建语种检测器。
  2. MLRemoteLangDetector mlRemoteLangDetector = MLLangDetectorFactory.getInstance()
  3.     .getRemoteLangDetector();
  4. // 方式二:使用自定义的参数配置创建语种检测器。
  5. MLRemoteLangDetectorSetting setting = new MLRemoteLangDetectorSetting.Factory()
  6.     // 设置语种检测的最低置信度阈值。
  7.     .setTrustedThreshold(0.01f)
  8.     .create();
  9. MLRemoteLangDetector mlRemoteLangDetector = MLLangDetectorFactory.getInstance()
  10.     .getRemoteLangDetector(setting);
2.3 进行语种检测
异步方法示例代码
  1. // 方式一:返回多个语种检测结果,包括语种编码以及置信度,sourceText表示待检测的文本,长度需小于5000个字符。
  2. Task<List<MLDetectedLang>> probabilityDetectTask = mlRemoteLangDetector.probabilityDetect(sourceText);
  3. probabilityDetectTask.addOnSuccessListener(new OnSuccessListener<List<MLDetectedLang>>() {
  4.     @Override
  5.     public void onSuccess(List<MLDetectedLang> result) {
  6.         // 成功的处理逻辑。
  7.     }
  8. }).addOnFailureListener(new OnFailureListener() {
  9.     @Override
  10.     public void onFailure(Exception e) {
  11.         // 失败的处理逻辑。
  12.         // Recognition failure.
  13.         try {
  14.             MLException mlException = (MLException)e;
  15.             // 获取错误码,开发者可以对错误码进行处理,根据错误码进行差异化的页面提示。
  16.             int errorCode = mlException.getErrCode();
  17.             // 获取报错信息,开发者可以结合错误码,快速定位问题。
  18.             String errorMessage = mlException.getMessage();
  19.         } catch (Exception error) {
  20.            // 转换错误处理。
  21.         }
  22.     }
  23. });
  24. // 方式二:返回置信度最高的语种编码,sourceText表示待检测的文本,长度需小于5000个字符。
  25. Task<String> firstBestDetectTask = mlRemoteLangDetector.firstBestDetect(sourceText);
  26. firstBestDetectTask.addOnSuccessListener(new OnSuccessListener<String>() {
  27.     @Override
  28.     public void onSuccess(String s) {
  29.         // 成功的处理逻辑。
  30.     }
  31. }).addOnFailureListener(new OnFailureListener() {
  32.     @Override
  33.     public void onFailure(Exception e) {
  34.         // 失败的处理逻辑。
  35.         // Recognition failure.
  36.         try {
  37.             MLException mlException = (MLException)e;
  38.             // 获取错误码,开发者可以对错误码进行处理,根据错误码进行差异化的页面提示。
  39.             int errorCode = mlException.getErrCode();
  40.             // 获取报错信息,开发者可以结合错误码,快速定位问题。
  41.             String errorMessage = mlException.getMessage();
  42.         } catch (Exception error) {
  43.             // 转换错误处理。
  44.         }
  45.     }
  46. });
同步方法示例代码
  1. // 方式一:返回多个语种检测结果,包括语种编码以及置信度,sourceText表示待检测的文本,长度需小于5000个字符。
  2. try {
  3.     List<MLDetectedLang> result= mlRemoteLangDetector.syncProbabilityDetect(sourceText);
  4. } catch (MLException mlException) {
  5.     // 失败的处理逻辑。
  6.     // 获取错误码,开发者可以对错误码进行处理,根据错误码进行差异化的页面提示。
  7.     int errorCode = mlException.getErrCode();
  8.     // 获取报错信息,开发者可以结合错误码,快速定位问题。
  9.     String errorMessage = mlException.getMessage();
  10. }
  11. // 方式二:返回置信度最高的语种编码,sourceText表示待检测的文本,长度需小于5000个字符。
  12. try {
  13.     String language = mlRemoteLangDetector.syncFirstBestDetect(sourceText);
  14. } catch (MLException mlException) {
  15.     // 失败的处理逻辑。
  16.     // 获取错误码,开发者可以对错误码进行处理,根据错误码进行差异化的页面提示。
  17.     int errorCode = mlException.getErrCode();
  18.     // 获取报错信息,开发者可以结合错误码,快速定位问题。
  19.     String errorMessage = mlException.getMessage();
  20. }
2.4 检测完成后,释放资源。
  1. if (mlRemoteLangDetector != null) {
  2.     mlRemoteLangDetector.stop();
  3. }
语种检测功能包含端侧和云侧,以上示例仅为云侧功能。

来源:HMS Core