在处理大型文档时,文本分段技能(Text Split Skill)是Azure搜索中一个非常有用的功能。它允许我们将文本内容分成更小、更易于管理的片段,从而提高搜索和数据处理的效率。让我们通过一个实例来详细探讨如何在Azure搜索中实现和应用文本分段技能。

文本分段技能的概述

文本分段技能的主要作用是将长文本内容根据指定的规则(如页面或句子)分割成更小的文本块。这对于需要对大段文本进行分析、翻译或索引的场景尤为重要。通过这种方式,文本内容可以被更精确地处理和检索。

创建文本分段技能

首先,我们需要定义一个技能集(Skillset),其中包含文本分段技能。下面是一个示例定义:

{
  "@odata.type": "#Microsoft.Skills.Text.SplitSkill",
  "textSplitMode": "pages",
  "maximumPageLength": 1000,
  "pageOverlapLength": 100,
  "maximumPagesToTake": 1,
  "defaultLanguageCode": "en",
  "inputs": [
    {
      "name": "text",
      "source": "/document/merged_content"
    },
    {
      "name": "languageCode",
      "source": "/document/language"
    }
  ],
  "outputs": [
    {
      "name": "textItems",
      "targetName": "mypages"
    }
  ]
}
  • textSplitMode: 定义分段模式,这里选择了按页面分段。
  • maximumPageLength: 每个页面最大字符数。
  • pageOverlapLength: 页面之间的重叠部分长度。
  • maximumPagesToTake: 最多取的页面数。
在索引器中引用技能集

接下来,我们需要在索引器中引用这个技能集。索引器负责从数据源中提取数据,并通过技能集处理这些数据:

{
  "@odata.context": "https://mssearchser.search.windows.net/$metadata#indexers/$entity",
  "@odata.etag": "\"0x8DC690CB8941711\"",
  "name": "terminal-indexer",
  "description": "",
  "dataSourceName": "terminal-data",
  "skillsetName": "terminal-skillset",
  "targetIndexName": "azureblob-index",
  "parameters": {
    "batchSize": null,
    "maxFailedItems": 0,
    "maxFailedItemsPerBatch": 0,
    "base64EncodeKeys": null,
    "configuration": {
      "dataToExtract": "contentAndMetadata",
      "parsingMode": "default",
      "imageAction": "generateNormalizedImages"
    }
  },
  "outputFieldMappings": [
    {
      "sourceFieldName": "/document/mypages/*",
      "targetFieldName": "textItems"
    }
  ]
}
  • skillsetName: 引用我们之前定义的技能集。
  • outputFieldMappings: 将技能集的输出映射到索引中的字段。
应用实例

假设我们有一份包含数千字的法律文档,通过文本分段技能,我们可以将其分成每段1000个字符的页面。这种分割方式可以:

  1. 提高搜索效率:用户搜索时,可以精确匹配到特定的段落,而不是整个文档。
  2. 便于数据分析:可以针对每个段落进行单独的分析或翻译工作。
  3. 增强用户体验:用户在浏览文档时,可以快速定位到感兴趣的部分。

例如,如果文档内容涉及到“合同条款”,我们可以这样处理:

{
  "values": [
    {
      "recordId": "1",
      "data": {
        "text": "本合同于2023年10月1日签订,甲方为XXX公司,乙方为YYY公司。合同条款如下:第一条,合同期限自签订之日起至2024年9月30日止。",
        "languageCode": "zh"
      }
    }
  ]
}

经过文本分段技能处理后,输出可能如下:

{
  "values": [
    {
      "recordId": "1",
      "data": {
        "textItems": [
          "本合同于2023年10月1日签订,甲方为XXX公司,乙方为YYY公司。合同条款如下:第一条,合同期限自签订之日起至2024年9月30日止。",
          "第一条,合同期限自签订之日起至2024年9月30日止。"
        ]
      }
    }
  ]
}

通过这种方式,我们不仅实现了文本的有效分割,还为后续的数据处理和搜索提供了便利。

总结

文本分段技能在Azure搜索中的应用不仅提高了文本处理的效率,还增强了数据的可检索性和分析的精确性。通过上述实例,我们可以看到如何通过简单的配置来实现复杂的文本处理任务。希望这篇博客能帮助你更好地理解和使用Azure搜索中的文本分段技能。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐