Skillkontext und Eingabeanmerkungssprache
Dieser Artikel ist die Referenzdokumentation zu Skillkontext und Eingabesyntax. Es ist eine vollständige Beschreibung der Ausdruckssprache, die zum Erstellen von Pfaden zu Knoten in einem angereicherten Dokument verwendet wird.
Azure AI Search-Skills können die Daten aus der Datenquelle und aus der Ausgabe anderer Skills verwenden und anreichern. Der Datenarbeitssatz, der den aktuellen Zustand der Indexerarbeit für das aktuelle Dokument darstellt, beginnt mit den Rohdaten aus der Datenquelle und wird progressiv mit den Ausgabedaten jeder einzelnen Skilliteration angereichert. Diese Daten sind intern in einer baumartigen Struktur organisiert, die abgefragt werden kann, um als Skilleingaben verwendet oder dem Index hinzugefügt zu werden. Die Knoten in der Baumstruktur können einfache Werte wie Zeichenfolgen und Zahlen, Arrays oder komplexe Objekte und sogar Binärdateien sein. Auch einfache Werte können mit zusätzlichen strukturierten Informationen angereichert werden. Beispielsweise kann eine Zeichenfolge mit zusätzlichen Informationen kommentiert werden, die darunter in der Anreicherungsstruktur gespeichert sind. Die Ausdrücke, die zum Abfragen dieser internen Struktur verwendet werden, verwenden eine umfassende Syntax, die in diesem Artikel ausführlich beschrieben wird. Die angereicherte Datenstruktur kann in Debugsitzungen untersucht werden. Ausdrücke, die die Struktur abfragen, können auch in Debugsitzungen getestet werden.
Im gesamten Artikel werden die folgenden angereicherten Daten als Beispiel verwendet. Diese Daten sind typisch für die Art von Struktur, die Sie erhalten würden, wenn Sie ein Dokument mithilfe eines Skillsets mit den Skills OCR, Schlüsselbegriffserkennung, Textübersetzung, Sprachenerkennung und Entitätserkennung sowie einem benutzerdefinierten Tokenizer-Skill anreichern.
Pfad | Wert |
---|---|
document |
|
merged_content |
„Study of BMN 110 in Pediatric Patients“... (Studie zu BMN 110 bei pädiatrischen Patienten) |
keyphrases |
|
[0] |
„Study of BMN“ (Studie zu BMN) |
[1] |
„Syndrome“ (Syndrom) |
[2] |
„Pediatric Patients“ (pädiatrische Patienten) |
... | |
locations |
|
[0] |
„IVA“ |
translated_text |
„Étude de BMN 110 chez les patients pédiatriques“... |
entities |
|
[0] |
|
category |
„Organization“ |
subcategory |
null |
confidenceScore |
0,72 |
length |
3 |
offset |
9 |
text |
„BMN“ |
... | |
organizations |
|
[0] |
„BMN“ |
language |
„de“ |
normalized_images |
|
[0] |
|
layoutText |
... |
text |
|
words |
|
[0] |
„Study“ (Studie) |
[1] |
„of“ (zu) |
[2] |
„BMN“ |
[3] |
„110“ |
... | |
[1] |
|
layoutText |
... |
text |
|
words |
|
[0] |
„it“ |
[1] |
„is“ (ist) |
[2] |
„certainly“ (bestimmt) |
... | |
... | |
... |
Dokumentstamm
Alle Daten befinden sich unter einem Stammelement enthalten, für das der Pfad "/document"
lautet. Das Stammelement ist der Standardkontext für Skills.
Einfache Pfade
Einfache Pfade durch das interne angereicherte Dokument können mittels einfacher Token ausgedrückt werden, die durch Schrägstriche voneinander getrennt sind. Diese Syntax ähnelt der JSON-Zeigerspezifikation.
Objekteigenschaften
Die Eigenschaften von Knoten, die Objekte darstellen, fügen ihre Werte der Struktur unter dem jeweiligen Namen der Eigenschaft hinzu. Diese Werte lassen sich durch Anfügen des Eigenschaftsnamens als ein durch einen Schrägstrich abgetrenntes Token erzielen:
Ausdruck | Wert |
---|---|
/document/merged_content/language |
"en" |
Bei Eigenschaftsnamentoken wird Groß-/Kleinschreibung beachtet.
Arrayelementindex
Auf bestimmte Elemente eines Arrays kann verwiesen werden, indem ihr numerischer Index wie ein Eigenschaftsname verwendet wird:
Ausdruck | Wert |
---|---|
/document/merged_content/keyphrases/1 |
"Syndrome" |
/document/merged_content/entities/0/text |
"BMN" |
Escapesequenzen
Es gibt zwei Zeichen, die eine Sonderbedeutung haben und mit Escapezeichen versehen werden müssen, wenn sie in einem Ausdruck vorkommen und „wörtlich“ interpretiert werden müssen anstatt in ihrer Sonderbedeutung: '/'
und '~'
.
Diese Zeichen müssen mit Escapezeichen versehen werden: '~0'
und '~1'
.
Arrayenumeration
Ein Array von Werten kann mithilfe des Tokens '*'
erzeugt werden:
Ausdruck | Wert |
---|---|
/document/normalized_images/0/text/words/* |
["Study", "of", "BMN", "110" ...] |
Das '*'
-Token muss nicht am Ende des Pfads stehen. Es ist möglich, alle Knoten aufzuzählen, die einem Pfad mit einem Stern in der Mitte oder mit mehreren Sternen entsprechen:
Ausdruck | Wert |
---|---|
/document/normalized_images/*/text/words/* |
["Study", "of", "BMN", "110" ... "it", "is", "certainly" ...] |
In diesem Beispiel wird eine flache Liste aller übereinstimmenden Knoten zurückgegeben.
Es ist möglich, mehr Struktur zu bewahren und ein separates Array für die Wörter jeder Seite zu erhalten, indem anstelle des zweiten '*'
-Tokens ein '#'
-Token verwendet wird:
Ausdruck | Wert |
---|---|
/document/normalized_images/*/text/words/# |
[["Study", "of", "BMN", "110" ...], ["it", "is", "certainly" ...] ...] |
Das '#'
-Token drückt aus, dass das Array als einzelner Wert behandelt werden soll, anstatt aufgezählt zu werden.
Aufzählen von Arrays im Kontext
Es ist oft nützlich, jedes Element eines Arrays isoliert zu verarbeiten und jeweils einen anderen Satz von Skilleingaben und -ausgaben zu verwenden.
Dies kann durch Festlegen des Kontexts des Skills auf eine Enumeration anstelle des standardmäßigen "/document"
erfolgen.
Im folgenden Beispiel verwenden wir einen der zuvor verwendeten Eingabeausdrücke, jedoch mit einem anderen Kontext, der den resultierenden Wert ändert.
Kontext | Ausdruck | Werte |
---|---|---|
/document/normalized_images/* |
/document/normalized_images/*/text/words/* |
["Study", "of", "BMN", "110" ...] ["it", "is", "certainly" ...] ... |
Bei dieser Kombination aus Kontext und Eingabe wird der Skill einmal für jedes normalisierte Bild ausgeführt: einmal für "/document/normalized_images/0"
und einmal für "/document/normalized_images/1"
. Die beiden Eingabewerte, die den einzelnen Skillausführungen entsprechen, werden in der Wertespalte angegeben.
Beim Aufzählen eines Arrays im Kontext werden alle vom Skill erzeugten Ausgaben dem Dokument auch als Anreicherungen des Kontexts hinzugefügt.
Im obigen Beispiel werden die Werte einer Ausgabe namens "out"
für jede Ausführung dem Dokument unter "/document/normalized_images/0/out"
bzw. "/document/normalized_images/1/out"
hinzugefügt.
Literalwerte
Skilleingaben können Literalwerte als Eingaben anstelle von dynamischen Werten verwenden, die aus dem vorhandenen Dokument abgefragt werden. Dies lässt sich erreichen, indem dem Wert ein Gleichheitszeichen vorangestellt wird. Werte können Zahlen, Zeichenfolgen oder boolesche Werte sein.
Zeichenfolgen können in ('
) einfache oder doppelte ("
) Anführungszeichen eingeschlossen sein.
Ausdruck | Wert |
---|---|
=42 |
42 |
=2.45E-4 |
0.000245 |
="some string" |
"some string" |
='some other string' |
"some other string" |
="unicod\u0065" |
"unicode" |
=false |
false |
Inlinenarrays
Wenn eine bestimmte Skilleingabe ein Array von Daten erfordert, die Daten jedoch zurzeit als einzelner Wert dargestellt werden, oder Sie mehrere unterschiedliche einzelne Werte in einem Arrayfeld kombinieren müssen, können Sie einen Arraywert inline als Teil eines Skilleingabeausdrucks erstellen, indem Sie eine durch Kommas getrennte Liste von Ausdrücken in eckige Klammern ([
und ]
) einschließen. Der Arraywert kann bei Bedarf eine Kombination aus Ausdruckspfaden oder Literalwerten sein. Sie können auf diese Weise auch geschachtelte Arrays innerhalb von Arrays erstellen.
Ausdruck | Wert |
---|---|
=['item'] |
["Element"] |
=[$(/document/merged_content/entities/0/text), 'item'] |
["BMN"; "Element"] |
=[1, 3, 5] |
[1, 3, 5] |
=[true, true, false] |
[true, true, false] |
=[[$(/document/merged_content/entities/0/text), 'item'],['item2', $(/document/merged_content/keyphrases/1)]] |
[["BMN", "Element"], ["Element2", "Syndrom"]] |
Wenn der Skill einen Kontext hat, der erklärt, dass der Skill pro Arrayeingabe ausgeführt wird ("context": "/document/pages/*"
bedeutet also, dass der Skill einmal pro Seite in pages
ausgeführt wird), dann wird bei der Übergabe dieses Werts als Ausdruck als Eingabe an ein Inlinearray jeweils einer dieser Werte verwendet.
Ein Beispiel mit unseren angereicherten Beispieldaten: Wenn context
des Skills /document/merged_content/keyphrases/*
ist und Sie dann ein Inlinearray dem folgenden =['key phrase', $(/document/merged_content/keyphrases/*)]
-Wert für eine Eingabe dieses Skills erstellen, wird der Skill dreimal ausgeführt, einmal mit dem Wert ["key phrase", "Study of BMN"], ein weiteres Mal mit dem Wert ["key phrase", "Syndrome"] und schließlich mit dem Wert ["key phrase", "Pediatric Patients"]. Der Literalwert „key phrase“ bleibt jedes Mal gleich, aber der Wert des Ausdruckspfads ändert sich bei jeder Skillausführung.
Zusammengesetzte Ausdrücke
Es ist möglich, Werte mit unären, binären und ternären Operatoren zu kombinieren.
Operatoren können Literalwerte und Werte, die sich aus der Pfadauswertung ergeben, miteinander kombinieren.
Bei Verwendung innerhalb eines Ausdrucks sollten Pfade in "$("
und ")"
eingeschlossen werden.
Boolesches nicht '!'
Ausdruck | Wert |
---|---|
=!false |
true |
Negativ '-'
Ausdruck | Wert |
---|---|
=-42 |
-42 |
=-$(/document/merged_content/entities/0/offset) |
-9 |
Addition '+'
Ausdruck | Wert |
---|---|
=2+2 |
4 |
=2+$(/document/merged_content/entities/0/offset) |
11 |
Subtraktion '-'
Ausdruck | Wert |
---|---|
=2-1 |
1 |
=$(/document/merged_content/entities/0/offset)-2 |
7 |
Multiplikation '*'
Ausdruck | Wert |
---|---|
=2*3 |
6 |
=$(/document/merged_content/entities/0/offset)*2 |
18 |
Division '/'
Ausdruck | Wert |
---|---|
=3/2 |
1.5 |
=$(/document/merged_content/entities/0/offset)/3 |
3 |
Modulo '%'
Ausdruck | Wert |
---|---|
=15%4 |
3 |
=$(/document/merged_content/entities/0/offset)%2 |
1 |
Kleiner als, kleiner oder gleich, größer als und größer als oder gleich '<'
'<='
'>'
'>='
Ausdruck | Wert |
---|---|
=15<4 |
false |
=4<=4 |
true |
=15>4 |
true |
=1>=2 |
false |
Gleichheit und KeineQualität '=='
'!='
Ausdruck | Wert |
---|---|
=15==4 |
false |
=4==4 |
true |
=15!=4 |
true |
=1!=1 |
false |
Logische Vorgänge und, oder oder exklusiv oder exklusiv oder '&&'
'||'
'^'
Ausdruck | Wert |
---|---|
=true&&true |
true |
=true&&false |
false |
=true||true |
true |
=true||false |
true |
=false||false |
false |
=true^false |
true |
=true^true |
false |
Ternärer Operator '?:'
Es ist möglich, dass eine Eingabe unterschiedliche Werte erhält, die auf der Auswertung eines booleschen Ausdrucks mithilfe des ternären Operators basieren.
Ausdruck | Wert |
---|---|
=true?"true":"false" |
"true" |
=$(/document/merged_content/entities/0/offset)==9?"nine":"not nine" |
"nine" |
Klammern und Priorität von Operatoren
Operatoren werden mit unterschiedlichen Prioritäten ausgewertet, die den üblichen Konventionen entsprechen: unäre Operatoren, dann Multiplikation, Division und Modulo, dann Addition und Subtraktion, dann Vergleich, Gleichheit und schließlich logische Operatoren. Es gelten ebenfalls die üblichen Assoziativregeln.
Klammern können verwendet werden, um die Auswertungsreihenfolge zu ändern oder Mehrdeutigkeiten zu beseitigen.
Ausdruck | Wert |
---|---|
=3*2+5 |
11 |
=3*(2+5) |
21 |