跳轉到主要內容
本節提供一些使用程式碼編輯器建立的擷取規則範例。與圖形使用者介面相比,程式碼編輯器更具彈性(語法的詳細說明請參閱 Syntax 章節)。

尋找具名實體最後一次出現的位置

在此範例中,會使用擷取規則來尋找租戶之組織在租約中的名稱。此名稱出現在所有其他組織名稱之後,無法使用 GUI 中的設定來擷取,因為在那裡只能選擇 Instances > First。不過,你可以使用擷取規則來尋找緊接在括號中「Tenant」一詞之前的組織名稱。 首先,我們將關鍵字「Tenant」作為輔助搜尋元素。接著,我們尋找出現在該關鍵字之前的組織名稱。在此範例中,其間有兩個介於中間的標記(token)——一個開括號以及一個引號——因此我們將距離限制為三個標記,並保留一些安全餘量。如果你的文件中有更多標記將關鍵字與組織名稱分隔開來,請相應地增加此數值。

抽取最後一個「組織」實體的規則

// We are looking only for one instance
~TenantName
// 尋找出現在關鍵字 "Tenant" 之前的組織名稱
// 且與其相隔不超過三個標記
// 中間的標記不得包含另一個組織名稱
[ t: @NEROrganization ]+ [ ~@NEROrganization ~@kw_Tenant ]{0,3} [ @kw_Tenant ]
=>
TenantName( t );

範例

顯示租戶名稱擷取的範例

擷取同時以文字與數字表示的金額

在此範例中,使用包含正則表達式的擷取規則來尋找一筆金額,其先以文字寫出,接著在圓括號中以數字表示,例如: Two Thousand One Hundred Forty-Seven Dollars and Sixty Cents ($2,147.60) Two Thousand One Hundred Forty-Seven Dollars and Sixty Cents (in numbers: $2,147.60)

金額擷取規則

// The variable a receives the Money named entity that is not in numbers
// and has not yet been assigned to any other instance of the Money search element
[ a: @NERMoney( same ) ~@Money ~/\d+/ ]+
[ br: '(' ]
// 問號表示「in numbers」這些字詞為選用項目
// ^ 和 $ 符號表示整個 string 必須符合正規表示式
// i 選項表示比對不區分大小寫
( [ e1: /^in$/i ] [ e2: /^numbers$/i ] [ e3: ':' ]? )?
// The variable b receives the Money named entity that is placed inside brackets
[ b: @NERMoney( same ) ~@Money ]+
=>
Money( a + br + e1 + e2 + e3 + b );

範例

金額擷取範例

使用關鍵字尋找區段

在此範例中,我們使用擷取規則來尋找 Segmentation 活動無法可靠偵測的區段。這些規則會尋找作為區段開頭或結尾的關鍵字,並擷取其間的文字。 我們假設文件具有以全大寫英文撰寫並加上編號的第二級標題,例如:1.1 PREMISES、2.3 LIABILITY AND INDEMNITY 等等。我們也假設已將第一級標題擷取到名為 “kw_Heading1” 的搜尋元素中(為求簡潔,這裡省略相應的擷取規則)。 首先,我們尋找作為文件中每個段落開頭的關鍵字,並將其擷取到名為 “kw_Heading2” 的搜尋元素中。接著,將兩個連續關鍵字之間的文字放入名為 “Segment” 的搜尋元素中。 在目前版本的 Advanced Designer 中,程式碼編輯器僅適用於用於尋找具名實體的搜尋元素。作為替代方案,若要透過程式碼擷取標題或區段等文字,只需為任一受支援的具名實體(例如 Organization)建立搜尋元素,並將規則程式碼輸入該元素的程式碼編輯器中即可。

將二級標題擷取到 kw_Heading2 搜尋元素的規則

// 尋找編號的二級標題,最多包含五個全大寫單詞
// The heading number can be found as one token: 1.1
[ t1: /\d{1,2}\.\d{1,2}/ ] [ t2: <all_letters_capitalized> ]{1,5}
=>
kw_Heading2( t1 + t2 );
// The heading number can be found as three separate tokens: 1, dot, 1
[ t1: /\d{1,2}/ ] [ t2: '.' ] [ t3: /\d{1,2}/ ] [ t4: <all_letters_capitalized> ]{1,5}
=>
kw_Heading2( t1 + t2 + t3 + t4 );

用於將區段擷取到 Segment search 元素的規則

// 尋找兩個連續章節標題之間的文字區段
// 同時排除所有第一級標題
[ @kw_Heading2 ] [ interval: ~@kw_Heading2 ~@kw_Heading1 ]+
=>
Root.Segment( interval );

範例

顯示區段擷取的範例 在此範例中,字詞「3.1 FIRSTLY」和「3.2 SECONDLY」會被擷取到 kw_Heading2 搜尋元素中,接著,任意兩個連續出現的 kw_Heading2 搜尋元素之間的文字,會被擷取到一個 Segment 搜尋元素的實例中。

將每個實體的相關資訊分組

在此範例中,我們使用擷取規則來確保與合約中每一方相關的詳細資訊能正確分組(也就是說,每一方的名稱與地址同屬於一個群組實例,而不會被拆分成多個實例,或與另一方的詳細資訊混在一起)。 基本思路是先找出某些關於一方的識別資訊,而且這些資訊在文本中一定會最先出現。要達成這一點有多種方式,取決於合約的撰寫方式。 在這個例子中,我們假設每個組織的名稱一定會先出現,其後才是該組織在合約中的地址與角色。因此,我們將會:
  1. 尋找組織名稱,對找到的每一個名稱建立一個新的 Party_Group 群組搜尋元素實例,並填入其名為 “Organization_Name” 的子搜尋元素。
  2. 尋找與每個組織名稱實例相距不超過(例如)20 個 token 的地址與角色,存取作為該組織名稱父項的 Party_Group 實例,並在該實例中填入名為 “Address” 與 “Role” 的子搜尋元素。
資料只會在由 Segmentation activity 找到的片段範圍內進行搜尋,且該片段會作為名為 “Parties_Segment” 的 Input 欄位傳遞給 Extraction Rules activity。

用於擷取 Organization_Name 搜尋元素的規則

// 尋找組織名稱並為每個組織建立新的群組執行個體
[ org: @NEROrganization( same ) ~@Party_Group.Organization_Name @Parties_Segment ]+
=>
// 建立新的 Party_Group 執行個體並填入 Organization_Name
Party_Group.Organization_Name( org );

用於擷取「地址」搜尋元素的規則

// 現在尋找與組織名稱相隔不超過 20 個標記
// 且尚未指派給 Party_Group 中任何組織的地址
[ org: @Party_Group.Organization_Name( same ) ]+
[ ~@NERAddress ]{0,20}
[ t: @NERAddress( same ) ~@Party_Group.Address @Parties_Segment ]+
=>
// Access the instance of Party_Group that is the parent of the organization name
// and fill in its Address child
parent( obj( org )).Address( t );

用於擷取「角色」搜尋元素的規則

// 對角色重複相同操作
// 若要尋找角色,請使用關鍵字
[ org: @Party_Group.Organization_Name( same ) ]+
[ ~("Tenant" | "Landlord" | "Broker") ]{0,20}
[ t: "Tenant" | "Landlord" | "Broker" ~@Party_Group.Role @Parties_Segment ]+
=>
parent( obj( org )).Role( t );

範例

搜尋元素將以下列方式擷取: 範例:顯示群組化的資料擷取 在資料表單中,也可以看到每家公司的名稱、地址與角色,都被歸入各自獨立的群組實例下: 範例:顯示群組化的資料欄位 每個組織的詳細資訊都被群組在一起,如括號中的實例編號所示。

同時尋找日期與時間

在此範例中,會使用抽取規則來尋找時間與日期的組合。 首先,我們使用一個名為 “Time”、型別為 Value from Regular Expression 的搜尋元素(使用的正則表達式為 [1]?\d:\d{2}\s+(([ap]\.m\.)|([AP]M))?)。接著,我們尋找一個與其位置相近的 Date 命名實體。最後,將找到的標記序列串接起來,並將結果指定給名為 “TimeAndDate” 的搜尋元素。

擷取日期與時間組合的規則

// 使用正規表達式搜尋元素的值來尋找時間
// 使用 @NERDate 尋找接近時間的日期命名實體
[ time: @Time ~@TimeAndDate ]+ [ t: ~@NERDate ]{0,3} [ date: @NERDate( same ) ]+
=>
// Combine the values to write them in one field
// Only consecutive token sequences can be combined, so the auxiliary token is also added
TimeAndDate( time + t + date );

範例

顯示時間與日期擷取範例