การสร้าง chatbot engine ด้วย Dialogflow นั้น มีความสะดวกตรงที่ เราสามารถใส่ตัวอย่างข้อความที่ผู้ใช้จะพิมพ์มาคุยกับ bot ลงใน training phrase ระบบจะเรียนรู้จากข้อมูลตัวอย่างนั้นและทำความเข้าใจประโยค ทำให้เมื่อผู้ใช้พิมพ์มาไม่ตรงกับ training phrase ระบบก็ยังสามารถเข้าใจความหมายและโต้ตอบได้อย่างถูกต้อง (อ่านเพิ่มเติม:
แนะนำ Dialogflow: Intent, Parameters และ Fulfillment)
ในบางกรณี ข้อมูลที่เราต้องการจากผู้ใช้ ไม่สามารถระบุลงไปใน training phrase ได้โดยตรง เนื่องจากเป็นข้อมูลที่ไม่ตายตัว จึงไม่สามารถใช้วิธีการยกตัวอย่างเพื่อให้ระบบเรียนรู้ได้ เช่น สำหรับ chatbot
แจกป๊อบคอร์น สมมติว่า เราจะขอให้ผู้ใช้ใส่เลขบัตรประจำตัวประชาชนมาเพื่อยืนยันตัวตนก่อน จึงจะแจกป๊อปคอร์นให้ จะเห็นว่า ค่าที่ผู้ใช่จะใส่เข้ามานั้นเป็นค่าเฉพาะของแต่ละคนและไม่ซ้ำกันเลย การจะระบุค่านี้ได้เราจะใช้ความสามารถของ regex เข้ามาช่วยครับ
regex หรือ
Regular Expression เป็นวิธีการระบุรูปแบบ (pattern) ของตัวอักษรที่เราต้องการค้นหา ซึ่งจะใช้ได้ดีกับการค้นหาข้อมูลที่มีรูปแบบ ในกรณีนี้เราจะใช้ regex เพื่อระบุรูปแบบของเลขบัตรประจำตัวประชาชนกันครับ
สิ่งที่เรารู้คือ เลขบัตรประจำตัวประชาชนมี 13 หลัก เบื้องต้นเราจะระบุ regex ง่ายๆ เพื่อดักจับตัวเลข 13 ตัว โดยเราสามารถทดสอบ regex กับข้อมูลได้ที่
https://regexr.com/ โดยการใช้งานจะมี 2 ส่วนคือ
- Expression: ส่วนที่ให้เราระบุ regex ที่จะใช้
- Text: ข้อมูลสำหรับใช้ทดสอบ regex หาก regex ที่ระบุใน expression ตรงกับส่วนไหน ก็จะขึ้นแถบสีฟ้าคลุมข้อมูลส่วนนั้นให้
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4Cpn88ZEC_pwb2wWJWC-sW-VIMKUaHpaKyVF3lvOKHABmi_XTKaEJIo5brVV6hraf2t1lnl-ZPJVvv7hVw5btovW857EtMoIm_TR6ObkBo-RyALmOywv8G6Uih_k6sktv1p5hPwq5sfU/s640/5.png) |
regex ตัวแรก ใช้ได้กับตัวเลขติดกัน 13 ตัว |
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivo1AUZxiM3FYTQ1r38laBV9Hoj3W1hiJHLFEY86UKHYfWATn7LZFqZvIyNvqov7mwfl5_Gosr4zD3xcl6J6oMAqyyiqiOhh7RUULLyXUkSPu-WJaPdUXHNipiuzkGamSjSjUqRGhWy9o/s640/6.png) |
regex ตัวที่สอบ ใช้ได้กับตัวเลขติดกัน 13 ตัว คั่นด้วย "-" |
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWP78JXVeOEYOQ2o6546i0UlZ9jDZVxnuZhwRdghF_JB1WFGCGhzV0fpDVQirKavb-zNVK3oRgVlRf8KmhY-BTzU7aWy6Y8_ApXoU8sG3AlroKq990SfNigJNxN6MUasVcg9rJtHGajIg/s640/7.png) |
regex ตัวที่สอบ ใช้ได้กับตัวเลขติดกัน 13 ตัว คั่นด้วย ช่องว่าง |
เมื่อได้ regex ที่ต้องการแล้ว (จากตัวอย่างระบุไว้ 3 รูปแบบ ซึ่งยังใช้งานได้ไม่ดีพอ แต่เอามาให้ดูเพื่อให้เห็นภาพ) ให้เราไปกำหนด entities บน Dialogflow และเลือก Regexg entity ไว้ด้วย
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9HibPrE3gQQZ5Av6W2d-oR8OGRkfbo67rRiQqNj131v5gUlEJAOLbvQFtYGRkkCNfW5vGag0mWRWnxeV-QF7rZ6H51IeVugSAmBELtgsayxiwjuUbRXfxewfXtLM5MI5PT4w8gauL9L8/s640/blog+dialogflow+regex+1.png) |
สร้าง Entities บน Dialogflow เลือก Regex entity และระบุ regex ที่จะใช้ |
ต่อมา ให้เข้าไปที่ training phrase ใน intent ที่เราต้องการ และใส่ตัวอย่างข้อมูลเลขบัตรประชาชน และกำหนดเป็น parameter ชื่อเดียวกับ entities ที่เราตั้งไว้
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk1HdueLDe4Jfz3s5-xzQVBs8yKGId1bgrN0lqJ1U4qIBARL02B7U6h39oKwyWqTbj_ldYG6o1MYKp_t7xtzr05LOvL9FlWzOVeFGqwtnYy1exSDh-wlfHObyyvKupL3hTXK09B_XZa3c/s640/2.png) |
ใส่ตัวอย่างข้อมูลใน Training phrases |
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi38zbp4hnZBKLZkUsbGolgJrdlHqvtcRBUx9IyICjUyzTlFtkmZhtVkqUbj6V61yUeQIA15RVZUlBQN8_zsJSCvGvPFDyz5d_Ee6hvaYJOdoh8GcdmlvP9DU5exlnasM0FX_sZqHX2GnM/s640/3.png) |
ระบุให้เป็น parameter ตามที่ตั้ง entity ไว้ |
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpMhAxP2f8aARcQDOS456Nsq0fpFjU57TAKYZTTbR3YbBujg9yHLayH4-QkVZ6LYjVRcqwMIIwA_PN3BfT752XTvatfQCUd8IEjyuyGFCZLTsvNYbNqs3WxwqtbAWy3NJToSw7-xAdqQs/s640/4.png) |
สามารถดึง parameter ไปใช้งานต่อได้ |
เมื่อผู้ใช้พิมพ์ข้อมูลตรงกับรูปแบบของ regex ระบบจะสามารถดึงค่านั้นๆ มาใส่ parameter และนำไปใช้งานต่อได้ เช่น อาจจะนำค่าไปตรวจสอบความถูกต้องก่อน หรือนำไปบันทึกลงในฐานข้อมูลเป็นต้น
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijGwOxP82oQbIeBrocR-TJpQCh3GkpC6IKJliHyka38ukCAxhSThz88wBUsN3HYG9LH-GfuQjmcPSh2K53q-gjEN4Kvrjldhgx9iNO_41afFkv_Qg4sETpwhyphenhyphenBAuTQFON8kmSykbtJXk8/s640/Screenshot_20200301-145033.jpg) |
สิ่งที่ผู้ใช้พิมพ์มาไม่ได้อยู่ใน training phrase แต่ตรงกับ regex ที่กำหนดไว้ ทำให้ระบบสามารถตรวจจับข้อมูลนั้นได้ |
ความคิดเห็น
แสดงความคิดเห็น