โครงงานนี้มีพื้นฐานมาจากรายงาน "Specifying and Verbalising Answer Set Programs in Controlled Natural Language" โดย Rolf Schwitter ฉันสร้างสิ่งที่ทำในรายงานขึ้นมาใหม่แต่ในขนาดที่เล็กกว่ามาก โดยมุ่งเน้นที่การสร้างไวยากรณ์แบบสองทิศทางที่เหมาะสมสำหรับทั้งการประมวลผลและการสร้างข้อกำหนดของโปรแกรมใน CNL
โปรแกรม big.pl (ย่อมาจาก Bi -Directional G rammar) ควรรันโดยใช้ SWI-Prolog หากต้องการทดสอบการทำงาน เพียงโหลดไฟล์โดยใช้คำสั่ง: [big].
จากนั้นสอบถาม: test.
เมื่อทำเสร็จแล้ว คุณจะเห็นผลลัพธ์ของโปรแกรมสำหรับตัวอย่างที่กำหนดไว้ล่วงหน้า
หากคุณต้องการรันโปรแกรมโดยใช้ INPUT SENTENCES ของคุณเอง คุณต้องแก้ไขไฟล์ big.pl :
โปรดทราบว่าแต่ละประโยคจะต้องเป็นรายการคำ โดยทุกคำจะต้องคั่นด้วยเครื่องหมายจุลภาค และประโยคต้องลงท้ายด้วยสัญลักษณ์พิเศษ '' - แต่ละประโยคต้องขึ้นต้นด้วยคำว่า 'every'
/ 'no'
ของระบบ หรือมีตัวแทนอยู่ในนั้น เช่น ใน [bob,dreams,'.']
โดยที่ bob เป็นตัวแทน คำของระบบคือ: 'every', 'no', 'is', 'is not', 'does not', '.'
- ดู example.txt สำหรับตัวอย่างประโยคอินพุตที่คุณสามารถลองเรียกใช้ได้
ในกรณีที่คุณต้องการแนะนำคำศัพท์และ/หรือตัวแทนใหม่ๆ ที่ไม่รวมอยู่ในโปรแกรม คุณต้องเพิ่มคำศัพท์เหล่านั้นด้วยตนเองใน big.pl พจนานุกรม ปัจจุบันถูกกำหนดไว้ในบรรทัดที่ 175-198 สำหรับคำที่คุณกำหนดเองแต่ละคำ ให้เพิ่มบรรทัดตามรูปแบบ:
lexicon(cat:noun, wform:[student], arg:X, term:student(X)).
โดยที่ cat argument เป็นหมวดหมู่ของคำ (นาม กริยา det ฯลฯ ); wform ย่อมาจาก word-form นั่นคือคำที่ปรากฏในประโยค หาเรื่อง ระบุอาร์กิวเมนต์ของคำที่คำนั้นหมายถึง; term หมายถึงคำศัพท์จริงที่จะใช้ในรูปแบบภายในและใน ASP For each of your custom agents, add a line of the format agent(name).
โดยที่ name คือชื่อตัวแทนของคุณ เช่น bob
โปรดทราบว่าขณะนี้โปรแกรมสนับสนุนเฉพาะหมวดหมู่ต่อไปนี้: คำนาม ( cat:noun
), กริยา ( cat:iv
), ดีเทอร์มิแนนต์ ( 'every', 'no'
), คำคุณศัพท์ ( cat:jj
) ทุกประโยคต้องมีโครงสร้างที่เรียบง่าย ไม่มีคำนำหน้านาม ("a", "an", "the") ไม่มีส่วนประกอบที่เชื่อมโยงกับ "และ"/"หรือ"
โปรแกรม big.pl ให้เอาท์พุตสี่เอาท์พุตพร้อมกัน:
โปรดดู Report.pdf สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการรับรอง
โปรดทราบว่า 3. การแสดง ASP เป็นโปรแกรมชุดคำตอบที่ถูกต้อง ซึ่งคุณสามารถแก้ไขได้โดยใช้ เช่น clingo ซึ่งฉันขอแนะนำให้คุณลองใช้
สร้างโดย Yevheniia Soroka นักศึกษา MS, Stony Brook University, NY (CSE505: Computing with Logic, Fall 2018)
ขอขอบคุณเป็นพิเศษสำหรับ Rolf Schwitter สำหรับคำแนะนำเกี่ยวกับวิธีการเริ่มต้นและแบ่งปันแหล่งข้อมูลที่เป็นประโยชน์