<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 6.1 handlebars模板語言 >本節主要介紹handlebars模板語言的使用,利用handlebars語音定制機器人回答,使機器人更加靈活多樣。 > [ruyi.ai](http://ruyi.ai) 為開發者提供了豐富的定制模塊。在匹配用戶的自然語言表達方 面,提供了詞典,暗號,必須詞條以及優先級的配置,以達到對用戶意圖的精 準匹配。而在回答用戶說法的角度上,開發了基于模版語言handlebars的自 定義版本,為ruyi.ai的用戶提供持續定制改進空間。 >handlebars語言在微信硬件端皆可以編寫。 ![](https://box.kancloud.cn/babbd12514f438c434c55e8733331239_1110x274.png) ### 6.1.1 簡介 **Handlebars = JSON + 模版 + 函數** >Handlebars 是一個語義化的 web模板系統,最初由 Yehuda Katz 于 2010 年編寫。[1]它是 Mustache (模板系統)的一個超集,除渲染 Handlebars 模板之外,也可以渲染 Mustache 模板。不像 Mustache, Handlebars 包括一 些邏輯,如 #if, #unless, #with 和 #list。 Handlebars.js是一個由Javascript構建的編譯器,它接收任意HTML與 Handlebars.js表達式并將它們編譯為Javascript函數。這個派生出來的 Javascript函數接著接收一個參數,一個對象 - 即你的數據 - 然后它返回一個 包含HTML以及被插值在HTML中的對象屬性值的字符串。因此,你最終可以 得到一個對象屬性值位于相應地方的字符串(HTML),你可以將這個字符串 插入到頁面中。 ### 6.1.2 基本概念實戰 在線測試(基于javascript): http://tryhandlebarsjs.com/ (注意,RUYI- API 使用的是JAVA版實現,可能與Javascript有細微差異) Handlebars模板看起來就像是正常的文本,并使用了嵌入的 handlebars表達式。更多handlebars表達式參見以下鏈接。http://handlebarsjs.com/ (中文首頁翻譯http://handlebarsjs.cn/) handlebars表達式,是以`{{`開始,跟一些內容,然后以`}}`結束。 姓名: {{name}} 城市:{{address.city}} 姓名:張三,城市:上海 ``` name:姓名—張三 age:城市—上海 ``` JSON數據結構, JSON(JavaScript Object Notation) 是一種輕量級的數據交換格 式。 易于人閱讀和編寫。同時也易于機器解析和生成。 ``` http://www.json.org/json-zh.html { "name": "張三", "age": 24, "address": { "street": "盛夏路", "city": "上海" }, "friends": ["李四", "Joe"] } ``` 對象(Object)是一個無序的“‘名稱/值’對”集合。一個對象以“{”(左括號)開 始,“}”(右括號)結束。每個“名稱”后跟一個“:”(冒號);“‘名稱/值’對”之間使 用“,”(逗號)分隔。 數組(Array)是值(value)的有序集合。一個數組以“[”(左中括號)開 始,“]”(右中括號)結束。值之間使用“,”(逗號)分隔。 編譯/應用模板 `JAVA(https://github.com/jknack/handlebars.java) javascript(https://github.com/wycats/handlebars.js/) ` 采用不同技術實現 ### 6.1.3 技術要點 基于模版的JSON數據渲染 支持自定義函數回調豐富渲染能力--基本上支持編程 ### 6.1.4 網上教程 中文資料1:Handlebars.js初級教程:學習Javascript模板Handlebars.js http://www.html-js.com/article/1595 中文資料2:js模版引擎handlebars.js實用教程 -楊元 http://www.cnblogs.com/iyangyuan/archive/2013/12/12/3471227.html ### 6.1.5 實例分析 基于ruyi開發者后臺 注:所有handlebars的表達式均填寫在助理答的 handlebars編輯框中,助理識別結果結構 `in=parameters (如意NLP識別結果)` `out=result (如意ACTION處理結果)` ### 6.1.6 變量引用 簡單路徑 ` sys.template.mustache={{in.details}` 標準變量引用路徑 `sys.template.mustache={{#in}}{{details}}{{/in}}` 引用自己 `{{ .}}` (如果沒有該變量,則不顯示) 定制變量格式化 ` sys.template.mustache={{#in}} {{#time_start}}從【{{timeFormat . format="yyyy年M月d日h點m分"}}】{{/ time_start}} {{/in}} ` timeFormat為ruyi-api定制函數,可以講數字型時間表示轉化為中文表示。具體時間格式化參數(format) 參考https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx ### 6.1.7 實例(日程提醒) + 例一 `用戶說:今天晚上6點在張江深山老屋和朋友吃飯,提前1小時提醒 ` `期望答復: 日程: (內容)吃飯 (開始的時間)【2016年4月1日18點0分】在(地點 )【張江深山老屋】和【朋友】(提醒時間)【提前一小時】提醒` + 變量分解 details:內容-吃飯 time_start:開始時間-晚上六點,調用timeFormat為ruyi-api定制函數,將數字型時間表示轉化為中文表示,“yyyy年M月d日h點m分”,并且用方括號“【】”括起來,這里顯示的就是“【2016年4月1日18點0分】”具體時間格式化參數(format)參考https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx time_end:結束時間-沒有該變量不顯示 timedelta_alert:提醒時間-時間差,提前一小時識別為“-1小時”。 participant:參與者-朋友 location:地點-張江深山老屋 助理答填寫(按照句子期望回答的結構順序) sys.template.mustache= {{#in}} 日程:{{details}}\n {{#time_start}}【{{timeFormat . format="yyyy年M月d日h點m分"}}】{ {/time_start}} {{#location}}在【{{.}}】{{/location}} {{#participant}}和【{{.}}】{{/participant}} {{#timedelta_alert}}\n【{{timedeltaFormat .}}】提醒{{/timedelta _alert}} {{/in}} JSON輸出結果 "result": { "text": "日程: 和朋友吃飯\\n【2016年4月1日18點0分】 在【張江深山老屋 】 \\n【提前1小時】提醒 ", "type": "dialog" }, ### 6.1.8 條件分支邏輯 IF THEN ELSE `if—>{{#}}...{{/}}` `else——>{{^}}...{{/}}` 舉例: sys.template.mustache= {{#age}}有年齡:{{.}}{{/age}}——>有年齡則引用輸入的年齡 {{^age}}無年齡{{/age}}——>若沒有年 齡則什么都不引用 數據1 -- 期望輸出年齡 { "name": "張三", "age": 24 }(有年齡”24“的顯示) 數據2-- 期望沒有年齡的輸出 { "name": "張三" }(沒有年齡的顯示) ### 6.1.9 自建處理函數 為了提高智能助理回答答案的多樣化和定制性,我們持續自定義和擴充 handlebars helper函數,幫助用戶可以以快捷,簡便的方式對數據結果進行自定 義的輸出。 ### 6.1.10 split函數 Handlebars新增了split函數,可以將參數值按照一定的分隔符分隔,并按照下標 獲取其中的某個值。如果分隔不成功,或者下標值超出范圍,則返回原參數值。 使用方法: `{{split 參數名 分隔符 下標值}}` 舉例: input值為 a#b#c {{split input "#" 0}} 返回 a {{split input "#" 1}} 返回 b {{split input "#" 2}} 返回 c ### 6.1.11 概述: strComp Handlebars之前不能對字符串之間進行比較,現在新增了strComp (String Compare)函數,可以進行如下的邏輯判斷: 1. 等于 equals 2. 包含 contains 3. 前綴比較 startswith 4. 后綴比較 endswith 使用方法: # 號跟strComp,后面跟三個參數,第一個是變量名,第二個是判斷符號,(如equals,需要使用雙引號“”括起來,否則無法識別),第三個是需要 比較的字符串 局限性: 目前只能支持一個參數與字符串之間進行比較,無法進行兩個參數的比較。 ### 6.1.12 概述:ifCond Handlebars內置的 if 只能判斷一個參數值有沒有,是不是null或者0,不能對其 具體的值進行邏輯判斷,所以新增了ifCond,可以進行如下的邏輯判斷: 1.等于 == 2.不等于 != 3.大于 > 4.小于 < 5.大于等于 >= 6.小于等于 <= 使用方法: # 號跟ifCond,后面跟三個參數,第一個是變量名,第二個是判斷符 號,(如==,需要使用雙引號 “ ” 或者單引號 ‘ ’ 括起來,否則無法識別),第三 個是數值(除了整數之外,小數、布爾值、字符串等都需要用雙引號 “ ” 或者單引 號 ‘ ’ 括起來,否則無法識別) 舉例: ``` {{#ifCond num "==" 3}} number equals to 3 {{else}} number not equal to 3 {{/ifCond}} ================================= {{#ifCond num "==" "3.2"}} number equals to 3.2 {{else}} number not equal to 3.2 {{/ifCond}} ================================= {{#ifCond bool "==" "true"}} bool is true {{else}} bool is false {{/ifCond}} ================================= {{#ifCond str "==" "good"}} str is good {{else}} str is not good {{/ifCond}} ``` 局限性: 目前只能支持一個參數與數值之間進行比較,無法進行兩個參數的比較。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看