Microsoft.Recognizers.Text测试框架详解:如何编写和维护JSON测试规范

【免费下载链接】Recognizers-Text Microsoft.Recognizers.Text provides recognition and resolution of numbers, units, date/time, etc. in multiple languages (ZH, EN, FR, ES, PT, DE, IT, TR, HI, NL. Partial support for JA, KO, AR, SV). Packages available at: https://www.nuget.org/profiles/Recognizers.Text, https://www.npmjs.com/~recognizers.text 【免费下载链接】Recognizers-Text 项目地址: https://gitcode.com/gh_mirrors/re/Recognizers-Text

Microsoft.Recognizers.Text是一款强大的开源项目,提供多语言的数字、单位、日期时间等实体识别与解析能力。本文将深入剖析其JSON测试规范框架,帮助开发者轻松掌握测试用例的编写与维护技巧,确保识别功能的准确性和稳定性。

测试规范的核心价值与目录结构

测试规范是保证Microsoft.Recognizers.Text识别准确性的关键环节。项目采用JSON格式存储测试用例,通过结构化的数据定义输入文本、上下文参数和预期结果,实现跨语言、跨平台的一致性验证。

在项目根目录下,测试规范主要集中在Specs文件夹,按功能模块和语言划分:

  • DateTime:日期时间识别测试,如Specs/DateTime/English/DateTimeModel.json
  • Number:数字识别测试,包含多种语言支持
  • NumberWithUnit:带单位数字识别测试
  • Sequence:序列识别测试(如邮箱、URL等)

这种模块化的组织方式,使得开发者可以针对特定语言或功能模块进行精准测试,同时便于维护和扩展。

JSON测试用例的结构解析

每个JSON测试文件包含一系列测试用例对象,每个对象由InputContextResults三部分组成,形成完整的测试闭环。

基础结构示例

以下是Specs/DateTime/English/DateTimeModel.json中的典型测试用例:

{
  "Input": "I'll go back tomorrow 8:00am",
  "Context": {
    "ReferenceDateTime": "2016-11-07T00:00:00"
  },
  "Results": [
    {
      "Text": "tomorrow 8:00am",
      "Start": 13,
      "End": 27,
      "TypeName": "datetimeV2.datetime",
      "Resolution": {
        "values": [
          {
            "timex": "2016-11-08T08:00",
            "type": "datetime",
            "value": "2016-11-08 08:00:00"
          }
        ]
      }
    }
  ]
}

关键字段说明

  • Input:待识别的原始文本,模拟真实场景中的用户输入
  • Context:识别上下文参数,如ReferenceDateTime提供基准时间点
  • Results:预期识别结果数组,每个结果包含:
    • Text:识别到的实体文本
    • Start/End:实体在原始文本中的位置索引
    • TypeName:实体类型(如datetimeV2.datetime表示日期时间)
    • Resolution:实体解析结果,包含标准化表示(timex)和具体值

测试用例的编写指南

编写高质量的测试用例需要覆盖多种场景,包括典型输入、边界情况和多语言支持。以下是编写测试用例的实用指南:

覆盖多样化场景

  1. 基础功能验证:测试常见表达形式,如"I'll go back today"验证当前日期识别
  2. 模糊表达处理:测试歧义性输入,如"I'll go back Oct/2"可能解析为不同年份
  3. 上下文依赖测试:通过ReferenceDateTime验证相对时间识别,如"tomorrow"在不同基准时间下的解析结果
  4. 多语言支持:为每种支持语言编写对应测试,如中文测试位于Specs/DateTime/Chinese/目录

处理特殊标记

测试用例中可使用NotSupported标记指定不支持的平台,如:

{
  "Input": "Who are us presidents in 1990 s.",
  "NotSupported": "javascript, python",
  "Results": [...]
}

该标记用于标识特定平台暂不支持的测试用例,确保测试框架的兼容性。

测试规范的维护与扩展

随着项目迭代,测试规范需要持续维护以适应新功能和语言支持。以下是高效维护测试规范的最佳实践:

版本控制与评审

  • 将测试用例纳入版本控制,跟踪变更历史
  • 新增或修改测试用例时进行代码评审,确保准确性
  • 定期清理过时测试用例,保持测试集的有效性

利用工具辅助

项目提供的ValidationTool(位于Tools/src/ValidationTool/)可自动验证测试用例的格式正确性,减少人工检查成本。运行工具可以快速定位格式错误或不一致的测试用例。

多语言测试的扩展

添加新语言支持时,建议:

  1. 复制现有语言的测试模板
  2. 翻译Input字段并调整预期结果
  3. 针对目标语言的特殊表达习惯添加特有测试用例

测试框架与模式定义的协同工作

Microsoft.Recognizers.Text的测试框架与模式定义(YAML文件)紧密协作,共同确保识别功能的准确性。模式定义文件(位于Patterns/目录)定义了实体识别的规则,而测试用例则验证这些规则的实际效果。

YAML模式与代码映射示例

上图展示了YAML模式定义与C#代码的映射关系,测试用例则验证这种映射在实际输入下的表现。例如Patterns/English/English-Numbers.yaml定义数字识别模式,对应的测试用例在Specs/Number/English/目录下。

列表类型模式定义示例

列表类型的模式定义(如货币单位列表)通过测试用例验证其完整性和准确性,确保所有列出的单位都能被正确识别。

总结与最佳实践

Microsoft.Recognizers.Text的JSON测试规范框架为项目提供了可靠的质量保障机制。通过本文介绍的结构解析、编写指南和维护技巧,开发者可以:

  1. 编写覆盖全面的测试用例,包括典型场景和边界情况
  2. 利用结构化JSON格式确保测试用例的清晰性和可维护性
  3. 通过多语言测试用例支持国际化功能验证
  4. 结合模式定义文件,形成完整的测试闭环

遵循这些最佳实践,将帮助你高效维护测试规范,确保Microsoft.Recognizers.Text在不断迭代中保持卓越的识别准确性。

要开始使用或贡献测试用例,可通过以下命令克隆项目:

git clone https://gitcode.com/gh_mirrors/re/Recognizers-Text

探索Specs目录下的现有测试用例,开始编写你自己的测试规范吧!

【免费下载链接】Recognizers-Text Microsoft.Recognizers.Text provides recognition and resolution of numbers, units, date/time, etc. in multiple languages (ZH, EN, FR, ES, PT, DE, IT, TR, HI, NL. Partial support for JA, KO, AR, SV). Packages available at: https://www.nuget.org/profiles/Recognizers.Text, https://www.npmjs.com/~recognizers.text 【免费下载链接】Recognizers-Text 项目地址: https://gitcode.com/gh_mirrors/re/Recognizers-Text

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐