返回

如何使用 Azure 文本拆分技能集存储片段页面来源?

python

使用 Azure 文本拆分技能集存储片段页面来源

简介

将文本拆分技能应用于 Azure AI 搜索后,可以将 PDF 按照页面进行拆分。但是,当数据正确分块并编入索引后,将无法识别页面来源。本文将探讨如何使用 PageNumberOutput 技能将页面来源另存为元数据密钥或在搜索期间或之后获取页面编号。

解决方案:使用 PageNumberOutput 技能

Azure 文本拆分技能集中提供了 PageNumberOutput 技能,该技能可以将页面编号输出到指定的元数据密钥。使用此技能时,需要执行以下步骤:

1. 添加 PageNumberOutput 技能

将 PageNumberOutput 技能添加到现有技能集中:

{
  "@odata.type": "#Microsoft.Skills.Text.PageNumberOutputSkill",
  "name": "#3",
  "description": "Output page numbers to metadata",
  "context": "/document",
  "inputs": [
    {
      "name": "text",
      "source": "/document/content"
    }
  ],
  "outputs": [
    {
      "name": "pageNumber",
      "targetName": "page_number"
    }
  ]
}

2. 配置输出映射

在现有索引投影中,将 page_number 元数据密钥映射到 PageNumberOutput 技能的输出:

{
  "targetIndexName": "vector",
  "parentKeyFieldName": "parent_id",
  "sourceContext": "/document/pages/*",
  "mappings": [
    {
      "name": "pageNumber",
      "targetName": "page_number",
      "source": "/document/metadata_storage/page_number"
    },
    ...
  ]
}

3. 保存技能集

保存具有附加技能的更新后的技能集。

示例代码

以下示例代码展示了如何使用 PageNumberOutput 技能将页面编号存储在元数据密钥中:

Document document = new Document();
document.setContent("This is a sample document with multiple pages.");

// Create a skillset with the PageNumberOutput skill
Skillset skillset = new Skillset();
skillset.addSkill(new PageNumberOutputSkill());

// Create an indexer with the skillset
Indexer indexer = new Indexer();
indexer.setSkillset(skillset);

// Index the document
indexer.index(document);

// Get the indexed document
IndexedDocument indexedDocument = indexer.getIndexedDocument(document.getId());

// Get the page number metadata
int pageNumber = indexedDocument.getMetadata().get("page_number");

// Print the page number
System.out.println("Page number: " + pageNumber);

其他注意事项

  • PageNumberOutput 技能仅适用于文本拆分技能集。
  • 页码从 1 开始。
  • 如果无法确定页面编号(例如,当文档是单页时),PageNumberOutput 技能将输出 -1。
  • 可以通过编辑技能集配置更改 PageNumberOutput 技能的输出密钥名称。

结论

通过使用 PageNumberOutput 技能,可以将页面来源存储在元数据密钥中。这在需要跟踪搜索结果中页面的来源时非常有用。

常见问题解答

  1. 如何将 page_number 元数据密钥添加到现有索引投影中?
    解答: 编辑现有索引投影,并添加以下映射:

    {
      "name": "pageNumber",
      "targetName": "page_number",
      "source": "/document/metadata_storage/page_number"
    }
    
  2. PageNumberOutput 技能仅支持页面编号吗?
    解答: 是的,PageNumberOutput 技能只输出页面编号。

  3. 如果文档没有页面,PageNumberOutput 技能会输出什么?
    解答: 如果文档没有页面,PageNumberOutput 技能将输出 -1。

  4. 可以更改 PageNumberOutput 技能输出密钥的名称吗?
    解答: 是的,可以在编辑技能集配置时更改输出密钥的名称。

  5. 除了页面编号之外,可以存储其他元数据吗?
    解答: 除了页面编号外,还可以使用其他技能将其他元数据存储在技能集中。