Ссылка на путь к обогащенным узлам с помощью контекста и свойств источника набора навыков поиска ВИ Azure

Во время выполнения набора навыков подсистема создает дерево обогащения в памяти, которое фиксирует каждое обогащение, например распознанные сущности или переведенный текст. В этой статье вы узнаете, как ссылаться на узел обогащения в дереве обогащения, чтобы передать выходные данные в подчиненные навыки или указать сопоставление полей вывода для поля индекса поиска.

В этой статье используются примеры для иллюстрации различных сценариев. Полный синтаксис см. в разделе "Контекст навыка" и язык языка примечаний ввода.

Базовые понятия

Перед рассмотрением синтаксиса давайте обсудим несколько важных концепций, чтобы лучше понимать примеры, приведенные далее в этой статье.

Срок Description
"обогащенный документ" Обогащенный документ — это структура в памяти, которая собирает выходные данные навыка по мере его создания и содержит все обогащения, связанные с документом. Подумайте о обогащенном документе как дереве. Как правило, дерево начинается на уровне корневого документа, и каждое новое обогащение создается из предыдущего в качестве дочернего элемента.
"node" В обогащенном документе узел (иногда называемый "заметкой") создается и заполняется навыком, например "text" и "layoutText" в навыке OCR. Обогащенный документ заполняется как обогащениями, так и исходными значениями исходного поля или метаданными, скопированными из источника.
"context" Область обогащения, которое представляет собой весь документ, часть документа или если вы работаете с изображениями, извлеченные изображения из документа. По умолчанию контекст обогащения находится на "/document" уровне, область для отдельных документов, содержащихся в источнике данных. При запуске навыка его выходные данные становятся свойствами определенного контекста.

Пути для различных сценариев

Пути указываются в свойствах контекста и источника набора навыков, а также в сопоставлениях полей выходных данных в индексаторе.

Снимок экрана: определение набора навыков с выделенными контекстом и исходными элементами.

Пример на снимке экрана иллюстрирует путь к элементу в коллекции Azure Cosmos DB.

  • context путь заключается /document/HotelId в том, что коллекция секционирована в документы /HotelId по полю.

  • source путь заключается /document/Description в том, что навык является навыком перевода, а поле, которое вы хотите перевести, является Description полем в каждом документе.

Все пути начинаются с /document. Обогащенный документ создается на этапе "взлома документов" выполнения индексатора, когда индексатор открывает документ или считывает строку из источника данных. Изначально единственным узлом в обогащенном документе является корневой узел (/document), и это узел, из которого происходят все другие обогащения.

В следующем списке приведено несколько распространенных примеров:

  • /documentявляется корневым узлом и указывает весь большой двоичный объект в служба хранилища Azure или строку в таблице SQL.
  • /document/{key} — это синтаксис документа или элемента в коллекции Azure Cosmos DB, где {key} находится фактический ключ, например /document/HotelId в предыдущем примере.
  • /document/content указывает свойство "content" большого двоичного объекта JSON.
  • /document/{field} — это синтаксис операции, выполняемой в определенном поле, например перевод /document/Description поля, показанный в предыдущем примере.
  • /document/pages/* или /document/sentences/* стать контекстом, если вы разбиваете большой документ на небольшие блоки для обработки. Если "контекст" имеет значение /document/pages/*, навык выполняется один раз на каждой странице в документе. Так как может быть несколько страниц или предложений, вы добавите /* их, чтобы поймать их все.
  • /document/normalized_images/* создается во время взлома документа, если документ содержит изображения. Все пути к изображениям начинаются с normalized_images. Так как в документе часто встроено несколько изображений, добавьте /*.

Примеры в оставшейся части этой статьи основаны на поле "содержимое", созданном автоматически индексаторами BLOB-объектов Azure в рамках этапа взлома документов. При обращении к документам из контейнера BLOB-объектов используйте такой формат, как "/document/content"поле "content" является частью документа.

Пример 1. Ссылка на простую аннотацию

Предположим, что в хранилище больших двоичных объектов Azure существует ряд файлов, содержащих ссылки на имена людей, которые вы намерены извлекать при помощи распознавания сущностей. В следующем определении "/document/content" навыка является текстовым представлением всего документа, и "люди" является извлечением полных имен для сущностей, идентифицированных как лица.

Так как по умолчанию для context задано значение "/document", в качестве ссылки на список пользователей можно указать "/document/people". В этом случае "/document/people" представляет собой аннотацию, которую теперь можно сопоставить с полем в индексе или использовать в другом навыке из того же набора навыков.

  {
    "@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
    "categories": [ "Person"],
    "defaultLanguageCode": "en",
    "inputs": [
      {
        "name": "text",
        "source": "/document/content"
      }
    ],
    "outputs": [
      {
        "name": "persons",
        "targetName": "people"
      }
    ]
  }

Пример 2. Ссылка на массив в документе

Этот пример основан на предыдущем и в нем показано, как вызвать действие обогащения несколько раз для одного и того же документа. Предположим, что в предыдущем примере был сформирован массив строк с именами 10 пользователей из одного документа. Логичным следующим шагом будет повторное обогащение, в ходе которого из полного имени будет извлечена фамилия. Так как существует 10 имен, это действие требуется вызвать в документе 10 раз (по одному для каждого пользователя).

Чтобы вызвать нужное количество итераций, задайте для параметра context значение "/document/people/*", где символ звездочки ("*") представляет все узлы в обогащенном документе в качестве потомков "/document/people". Хотя этот навык определен только один раз в массиве навыков, он вызывается для каждого элемента в документе до тех пор, пока все члены не будут обработаны.

  {
    "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
    "description": "Fictitious skill that gets the last name from a full name",
    "uri": "http://names.azurewebsites.net/api/GetLastName",
    "context" : "/document/people/*",
    "defaultLanguageCode": "en",
    "inputs": [
      {
        "name": "fullname",
        "source": "/document/people/*"
      }
    ],
    "outputs": [
      {
        "name": "lastname",
        "targetName": "last"
      }
    ]
  }

Если аннотации представляют собой массивы или коллекции строк, может потребоваться выполнить операции над определенными элементами, а не над массивом в целом. В приведенном выше примере создается аннотация с именем "last" в каждом узле, представленном параметром context. Если потребуется добавить ссылку на это семейство аннотаций, используйте синтаксис "/document/people/*/last". Если потребуется добавить ссылку на определенную аннотацию, используйте явный индекс: "/document/people/1/last" для ссылки на фамилию первого пользователя, определенного в документе. Обратите внимание, что в этом синтаксисе массивы "проиндексированы от 0".

Пример 3. Ссылка на элементы в массиве

Иногда необходимо сгруппировать все аннотации определенного типа для их передачи определенному навыку. Рассмотрим предполагаемый настраиваемый навык, который определяет наиболее распространенную фамилию среди всех фамилий, извлеченных в примере 2. Чтобы предоставить настраиваемому навыку только фамилии, укажите для параметра context значение "/document", а для входных данных — "/document/people/*/lastname".

Обратите внимание, что кратность "/document/people/*/lastname" превышает таковую для документа. В этом документе может быть 10 узлов последнего имени, а для этого документа существует только один узел документа. В этом случае система автоматически создаст массив "/document/people/*/lastname" , содержащий все элементы в документе.

  {
    "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
    "description": "Fictitious skill that gets the most common string from an array of strings",
    "uri": "http://names.azurewebsites.net/api/MostCommonString",
    "context" : "/document",
    "inputs": [
      {
        "name": "strings",
        "source": "/document/people/*/lastname"
      }
    ],
    "outputs": [
      {
        "name": "mostcommon",
        "targetName": "common-lastname"
      }
    ]
  }

Советы для устранения неполадок пути заметки

Если у вас возникли проблемы с указанием входных данных навыка, эти советы могут помочь вам перейти вперед:

  • Запустите мастер импорта данных по данным, чтобы просмотреть определения набора навыков и сопоставления полей, создаваемые мастером.

  • Запустите сеанс отладки в наборе навыков для просмотра структуры обогащенного документа. Вы можете изменить пути и другие части определения навыка, а затем запустить навык для проверки изменений.

См. также