技能內容和輸入註釋語言

本文是技能內容和輸入語法的參考檔。 這是表達式語言的完整描述,用來建構擴充檔中節點的路徑。

Azure AI 搜尋技能可以使用和 擴充來自數據源的數據,以及來自其他技能輸出的數據。 代表目前檔之索引器工作目前狀態的數據工作集,會從來自數據源的原始數據開始,並以每個技能反覆專案的輸出數據逐步擴充。 該數據會在內部組織成樹狀結構,可查詢以做為技能輸入或新增至索引。 樹狀結構中的節點可以是簡單的值,例如字串和數位、陣列或複雜物件,甚至是二進位檔。 即使是簡單的值也可以透過額外的結構化信息來擴充。 例如,可以使用擴充樹狀結構中儲存的其他資訊來標註字串。 用來查詢內部結構的表示式會使用本文中詳述的豐富語法。 您可以從 偵錯會話檢查擴充的數據結構。 查詢結構的表達式也可以 從偵錯會話進行測試。

在整個文章中,我們將使用下列擴充數據作為範例。 此數據是您在使用具有 OCR 的技能集、關鍵片語擷取文字翻譯、語言偵測實體辨識技能和自定義Tokenizer技能擴充檔時,所得到的結構類型。

路徑
document
merged_content “兒科患者的BMN 110研究”...
  keyphrases
   [0] “BMN 研究”
   [1] “綜合症”
   [2] “兒科患者”
   ...
  locations
   [0] “IVA”
  translated_text “Étude de BMN 110 chez les patients pédiatriques”...
  entities
   [0]
    category “組織”
    subcategory null
    confidenceScore 0.72
    length 3
    offset 9
    text “BMN”
   ...
  organizations
   [0] “BMN”
  language 「en」
normalized_images
  [0]
   layoutText ...
   text
    words
     [0] “研究”
     [1] “of”
     [2] “BMN”
     [3] "110"
     ...
  [1]
   layoutText ...
   text
    words
     [0] “it”
     [1] "is"
     [2] “當然”
     ...
    ...
  ...

檔根目錄

所有資料都在一個根元素下,路徑為 "/document"。 根元素是技能的默認內容。

簡單路徑

透過內部擴充檔的簡單路徑可以透過斜線分隔的簡單標記來表示。 此語法類似於 JSON 指標規格

物件屬性

代表對象的節點屬性,會將其值新增至屬性名稱下的樹狀結構。 藉由附加屬性名稱做為以斜線分隔的令牌,即可取得這些值:

運算式
/document/merged_content/language "en"

屬性名稱令牌會區分大小寫。

陣列專案索引

陣列的特定元素可以使用其數值索引來參考,例如屬性名稱:

運算式
/document/merged_content/keyphrases/1 "Syndrome"
/document/merged_content/entities/0/text "BMN"

逸出序列

有兩個字元具有特殊意義,而且如果字元出現在表達式中,而且必須解譯為 ,而不是將其特殊意義解譯為 , '/' 則必須逸出:和 '~'。 這些字元必須分別逸出為 '~0''~1'

陣列舉

您可以使用權杖來取得 '*' 值的陣列:

運算式
/document/normalized_images/0/text/words/* ["Study", "of", "BMN", "110" ...]

令牌 '*' 不一定位於路徑結尾。 列舉所有符合中間星號路徑或具有多個星號的節點:

運算式
/document/normalized_images/*/text/words/* ["Study", "of", "BMN", "110" ... "it", "is", "certainly" ...]

此範例會傳回所有相符節點的一般清單。

您可以使用權杖而非第二'*''#'權杖,維護更多結構,並針對每個頁面的單字取得個別數位:

運算式
/document/normalized_images/*/text/words/# [["Study", "of", "BMN", "110" ...], ["it", "is", "certainly" ...] ...]

令牌 '#' 表示陣列應該視為單一值,而不是列舉。

列舉內容中的陣列

在隔離中處理陣列的每個元素,並針對每個元素有不同的技能輸入和輸出,通常很有用。 這可以藉由將技能的內容設定為列舉,而不是預設 "/document"

在下列範例中,我們使用之前使用的其中一個輸入表達式,但使用不同的內容來變更產生的值。

上下文 運算式
/document/normalized_images/* /document/normalized_images/*/text/words/* ["Study", "of", "BMN", "110" ...]
["it", "is", "certainly" ...]
...

針對此內容和輸入的組合,技能會針對每個標準化影像執行一次:一次和 "/document/normalized_images/0" 一次用於 "/document/normalized_images/1"。 對應至每個技能執行的兩個輸入值會在 values 數據行中詳述。

列舉內容中的陣列時,技能產生的任何輸出也會新增至文件作為內容的擴充。 在上述範例中,名為 "out" 的輸出會分別在其 和 底下"/document/normalized_images/0/out""/document/normalized_images/1/out"新增至檔的每個執行值。

常值

技能輸入可以接受常值作為其輸入,而不是從現有文件查詢的動態值。 這可以藉由將值前面加上等號來達成。 值可以是數位、字串或布爾值。 字串值可以以單 ' 引號或雙 " 引弧括住。

運算式
=42 42
=2.45E-4 0.000245
="some string" "some string"
='some other string' "some other string"
="unicod\u0065" "unicode"
=false false

複合表達式

您可以使用一元、二元和三元運算符,將值結合在一起。 運算子可以結合路徑評估所產生的常值和值。 在表達式內使用時,路徑應該以 和 ")"括住"$("

布爾值不是 '!'

運算式
=!false true

'-'

運算式
=-42 -42
=-$(/document/merged_content/entities/0/offset) -9

除了 '+'

運算式
=2+2 4
=2+$(/document/merged_content/entities/0/offset) 11

減法 '-'

運算式
=2-1 1
=$(/document/merged_content/entities/0/offset)-2 7

乘法 '*'

運算式
=2*3 6
=$(/document/merged_content/entities/0/offset)*2 18

劃分 '/'

運算式
=3/2 1.5
=$(/document/merged_content/entities/0/offset)/3 3

'%'

運算式
=15%4 3
=$(/document/merged_content/entities/0/offset)%2 1

小於、小於或等於、大於和大於或等於 '<''<=''>''>='

運算式
=15<4 false
=4<=4 true
=15>4 true
=1>=2 false

相等和非相等 '==''!='

運算式
=15==4 false
=4==4 true
=15!=4 true
=1!=1 false

邏輯作業和、或 和 獨佔或 '&&''||''^'

運算式
=true&&true true
=true&&false false
=true||true true
=true||false true
=false||false false
=true^false true
=true^true false

三元運算子 '?:'

您可以使用三元運算符,根據布爾表達式的評估,提供不同的輸入值。

運算式
=true?"true":"false" "true"
=$(/document/merged_content/entities/0/offset)==9?"nine":"not nine" "nine"

括弧和運算符優先順序

運算符會以符合一般慣例的優先順序進行評估:一元運算元、乘法、除法和模數、加法和減法、比較、相等和邏輯運算符。 通常也會套用關聯性規則。

括號可用來變更或釐清評估順序。

運算式
=3*2+5 11
=3*(2+5) 21

另請參閱