文档管理中心
开发与测试开放能力APIAINatural Language Kit(自然语言理解服务)实体抽取

实体抽取

适用场景

实体抽取是自然语言处理服务的一项关键能力。通过综合分析上下文信息,从文本中准确识别出多种类型的实体:

  1. 日期时间(DATETIME):提取文本中的具体日期,如“2024年6月18日”等。

  2. 电子邮件(EMAIL):识别文本中的电子邮件地址,如“***@example.com”。

  3. 快递单号(EXPRESS_NO):抽取文本中的快递单号信息。

  4. 航班号(FLIGHT_NO):定位文本中的航班号,如“CA1234”等。

  5. 地址(LOCATION):从文本中提取详细的地址描述。

  6. 人名(NAME):找出文本中出现的人名信息。

  7. 手机号(PHONE_NO):识别文本中的手机号码。

  8. 网址(URL):抽取文本中的网址链接。

  9. 验证码(VERIFICATION_CODE):定位文本中的验证码数字。

  10. 身份证号(ID_NO):识别文本中的身份证号码信息。

通过准确抽取以上多种类型的实体信息,该项能力可以广泛应用于新闻阅读、信息检索、客户服务、社交聊天、金融运营等多种场景。例如,在新闻阅读场景中,可以对新闻正文进行实体抽取,并对人名、地名、时间、网址等关键实体信息进行高亮标识,帮助读者快速获取文章要点;在客服场景,通过抽取用户留言中的手机号、快递单号、验证码等信息,客服人员能够更高效地定位问题并给出解决方案。实体抽取为各行业的智能化应用提供了坚实的基础支持。

约束与限制

该能力当前不支持模拟器。

展开
AI能力 约束
实体抽取

- 支持的语言:简体中文、英文、繁体中文。

- 支持的实体:时间、地点、邮箱、快递单号、航班号、人名、电话号码、网址链接、验证码、证件号。

- 文本长度:不超过1000字符。

开发步骤

  1. 在使用实体抽取功能时,将实现实体抽取的类添加至工程。

    收起
    自动换行
    深色代码主题
    复制
    1. import { textProcessing, EntityType } from '@kit.NaturalLanguageKit';
  2. 配置输入文本框。

    收起
    自动换行
    深色代码主题
    复制
    1. private inputText: string = '张三的电话号码是12345';
    2. @State outputText: string = '';
    3. TextInput({ placeholder: '请输入文本', text: this.inputText })
    4. .height(40)
    5. .fontSize(16)
    6. .width('90%')
    7. .margin(10)
    8. .onChange((value: string) => {
    9. this.inputText = value;
    10. })
  3. 配置按钮,调用实体抽取textProcessing.getEntity接口。

    收起
    自动换行
    深色代码主题
    复制
    1. Button('获取实体结果')
    2. .type(ButtonType.Capsule)
    3. .fontColor(Color.White)
    4. .width('45%')
    5. .margin(10)
    6. .onClick(async () => {
    7. try {
    8. let result = await textProcessing.getEntity(this.inputText, {entityTypes: [EntityType.NAME, EntityType.PHONE_NO]});
    9. this.outputText = this.formatEntityResult(result);
    10. } catch (err) {
    11. console.error(`getEntity errorCode: ${err.code}, errorMessage: ${err.message}`);
    12. this.outputText = 'Error occurred while getting entities.';
    13. }
    14. })
  4. 在界面上展示实体抽取结果。

    收起
    自动换行
    深色代码主题
    复制
    1. private formatEntityResult(entities: textProcessing.Entity[]): string {
    2. if (!entities || !entities.length) {
    3. return 'No entities found.';
    4. }
    5. let output = 'Entities:\n';
    6. for (let i = 0; i < entities.length; i++) {
    7. let entity = entities[i];
    8. output += `Entity[${i}]:\n`;
    9. output += ` oriText: ${entity.text}\n`;
    10. output += ` charOffset: ${entity.charOffset}\n`;
    11. output += ` entityType: ${entity.type}\n`;
    12. output += ` jsonObject: ${entity.jsonObject}\n\n`;
    13. }
    14. return output;
    15. }

开发实例

收起
自动换行
深色代码主题
复制
  1. import { textProcessing, EntityType } from '@kit.NaturalLanguageKit';
  2. @Entry
  3. @Component
  4. struct Index {
  5. private inputText: string = '张三的电话号码是12345';
  6. @State outputText: string = '';
  7. build() {
  8. Column() {
  9. TextInput({ placeholder: '请输入文本', text: this.inputText })
  10. .height(40)
  11. .fontSize(16)
  12. .width('90%')
  13. .margin(10)
  14. .onChange((value: string) => {
  15. this.inputText = value;
  16. })
  17. Scroll() {
  18. Text(this.outputText)
  19. .fontSize(16)
  20. .width('90%')
  21. .margin(10)
  22. }
  23. .height('40%')
  24. // 调用实体抽取接口
  25. Row() {
  26. Button('获取实体结果')
  27. .type(ButtonType.Capsule)
  28. .fontColor(Color.White)
  29. .width('45%')
  30. .margin(10)
  31. .onClick(async () => {
  32. try {
  33. let result = await textProcessing.getEntity(this.inputText, {entityTypes: [EntityType.NAME, EntityType.PHONE_NO]});
  34. this.outputText = this.formatEntityResult(result);
  35. } catch (err) {
  36. console.error(`getEntity errorCode: ${err.code}, errorMessage: ${err.message}`);
  37. this.outputText = 'Error occurred while getting entities.';
  38. }
  39. })
  40. }
  41. }
  42. .width('100%')
  43. .height('100%')
  44. .justifyContent(FlexAlign.Center)
  45. }
  46. // 实体结果转义
  47. private formatEntityResult(entities: textProcessing.Entity[]): string {
  48. if (!entities || !entities.length) {
  49. return 'No entities found.';
  50. }
  51. let output = 'Entities:\n';
  52. for (let i = 0; i < entities.length; i++) {
  53. let entity = entities[i];
  54. output += `Entity[${i}]:\n`;
  55. output += ` oriText: ${entity.text}\n`;
  56. output += ` charOffset: ${entity.charOffset}\n`;
  57. output += ` entityType: ${entity.type}\n`;
  58. output += ` jsonObject: ${entity.jsonObject}\n\n`;
  59. }
  60. return output;
  61. }
  62. }
在 开发与测试 开放能力API 中进行搜索
请输入您想要搜索的关键词