เหล่านี้เป็นคลาสตัวช่วย PHP ล้วนๆ เพื่อใช้ตัวสร้างภาษาธรรมชาติแบบเรียกซ้ำ [1] คลาสที่จัดเตรียมไว้คือตัวสร้างนามธรรม คอนเทนเนอร์ภววิทยา และคอนเทนเนอร์พจนานุกรม
คลาสเหล่านี้ควรช่วยสร้างเครื่องกำเนิดไฟฟ้าระดับเรียบง่ายถึงระดับกลาง โดยพูดถึงความซับซ้อนของพวกมัน มีการเน้นย้ำในการรักษาคุณลักษณะขั้นสูงเพิ่มเติมไว้ในกรณีที่ง่ายกว่า (เช่น หากไม่จำเป็นต้องใช้ภววิทยาหรือพจนานุกรม ก็สามารถข้ามไปได้)
ตัวสร้างจะติดตามคำอธิบายประกอบเชิงความหมายบนข้อความที่สร้างขึ้น เพื่อที่จะเปิดใช้งานฟังก์ชันการสร้างเพิ่มเติมเพื่อให้เหตุผลเกี่ยวกับข้อความ นอกจากนี้ยังมีกระดานดำตามบริบททั่วโลกอีกด้วย
สำหรับรายละเอียดเกี่ยวกับตัวอย่างหลายภาษา โปรดดูหัวข้อ Make Web Not War [2]
ขณะนี้อยู่ระหว่างดำเนินการ โปรดดู ROADMAP สำหรับข้อมูลเชิงลึกบางประการในการพัฒนาในอนาคต
NLGen มาพร้อมกับไวยากรณ์รุ่นที่พร้อมใช้งาน ซึ่งสร้างคำอธิบายข้อความสำหรับกำหนดการรายสัปดาห์ ไวยากรณ์สามารถเข้าถึงได้โดยการนำเข้า NLGenGrammarsAvailabilityAvailabilityGenerator
วิธี generateAvailability
รับรายการ "เวลาที่ยุ่ง" ในรูปแบบของ
[ day-of-week, [ start hour, start minute ], [ end hour, end minute ] ]
รายการช่วงที่ระบุว่าวันที่กำหนดไว้เริ่มต้นและสิ้นสุดเมื่อใด (ในรูปแบบ [ day-of-week => [ start hour, start minute ], [ end hour, end minute ] ]
) และค่าคงที่ที่ระบุว่า "หยาบ" ควรเป็นข้อความ (หนึ่งบรรทัดสรุปหรือมีรายละเอียดมาก)
ดู examples/availability
และ tests/Availability/AvailabilityTest
ตัวอย่าง:
use NLGen Grammars Availability AvailabilityGenerator ;
$ gen = new AvailabilityGenerator ();
$ busyList = [
[ 3 , [ 16 , 30 ], [ 17 , 30 ] ],
[ 6 , [ 6 , 55 ], [ 11 , 41 ] ],
[ 6 , [ 14 , 32 ], [ 22 , 05 ] ]
];
$ fullRanges = [];
foreach ( range ( 0 , 6 ) as $ dow ) {
$ fullRanges [ $ dow ] = [ [ 6 , 0 ], [ 24 , 0 ] ];
}
echo $ gen -> generateAvailability ( $ busyList , $ fullRanges , AvailabilityGenerator :: BASE , null );
ผลิตผล ทั้งสัปดาห์ส่วนใหญ่จะฟรีตลอดทั้งวัน วันอาทิตย์จะมีคนพลุกพล่านตั้งแต่สาย 6.00 น. ถึง 11.00 น. และตั้งแต่ 14.00 น. ถึง 22.00 น. ส่วนที่เหลือฟรี
ดู examples/
โฟลเดอร์ แต่โดยสรุป ให้คลาสย่อยคลาส NLGenGenerator
และใช้งานฟังก์ชันชื่อ top
ฟังก์ชันนี้สามารถส่งคืนสตริงหรืออาร์เรย์พร้อม text
และ sem
สำหรับคำอธิบายประกอบเชิงความหมายในข้อความที่ส่งคืน
หากคุณต้องการใช้ฟังก์ชันอื่นเพื่อประกอบข้อความให้ใช้ $this->gen('name_of_the_function', $data_array_input_to_the_function)
เพื่อเรียกมัน (แทน $this->name_of_the_function($data_array_input_to_the_function)
หรือคุณสามารถกำหนดฟังก์ชันของคุณว่าได้ รับการป้องกัน และ ใช้การแทรกฟังก์ชันตามที่อธิบายไว้ด้านล่าง คลาสนามธรรมของตัวสร้างจะติดตามคำอธิบายประกอบเชิงความหมายสำหรับคุณและคนอื่นๆ สารพัด
หากฟังก์ชันที่ใช้ไวยากรณ์ได้รับ การป้องกัน สามารถสร้างคลาสไดนามิกได้ด้วยเมธอดคลาส NewSealed
คลาสไดนามิกนี้จะมีการสกัดกั้นฟังก์ชัน ดังนั้นคุณสามารถเรียก $this->name_of_function
ได้ตามปกติ แต่จริงๆ แล้ว $this->gen
จะถูกเรียก
ไม่ว่าคุณจะใช้วิธีใดในการเรียกคลาส หากคลาสย่อยที่สร้างอินสแตนซ์ของคุณคือ $my_gen
ดังนั้น $my_gen->generate($input_data_as_an_array)
จะส่งคืนสตริงที่สร้างขึ้น หากคุณต้องการเข้าถึงคำอธิบายประกอบเชิงความหมาย ให้ใช้ $my_gen->semantics()
ในภายหลัง
สำหรับกรณีการใช้งานที่แตกต่างกัน โปรดดู examples/
โฟลเดอร์
ตัวอย่างนี้ต่อกิ่งจากโฟลเดอร์ examples/basic
ที่จะเรียกใช้บรรทัดคำสั่งด้วย php basic.php 0 0 0 0
(ทำให้ Juan เริ่มทำงานกับ Component ABC )
class BasicGenerator extends Generator {
var $ agents = array ( ' Juan ' , ' Pedro ' , ' The helpdesk operator ' );
var $ events = array ( ' started ' , ' is ' , ' finished ' );
var $ actions = array ( ' working on ' , ' coding ' , ' doing QA on ' );
var $ themes = array ( ' Component ABC ' , ' Item 25 ' , ' the delivery subsystem ' );
protected function top ( $ data ){
return
$ this -> person ( $ data [ 0 ]). " " .
$ this -> action ( $ data [ 1 ], $ data [ 2 ]). " " .
$ this -> item ( $ data [ 3 ]);
}
protected function person ( $ agt ){ return $ this -> agents [ $ agt ]; }
protected function action ( $ evt , $ act ){ return $ this -> events [ $ evt ]. " " . $ this -> actions [ $ act ]; }
protected function item ( $ thm ) { return $ this -> themes [ $ thm ]; }
}
global $ argv , $ argc ;
$ gen = BasicGenerator :: NewSealed ();
print $ gen -> generate ( array_splice ( $ argv , 1 ) /*, array ( " debug " => 1 )*/). "n" ;
ฉันขอแนะนำอย่างยิ่งให้สร้างระบบการสร้างภาษาธรรมชาติ (2000) โดย Reiter และ Dale
ไซต์ SIGGEN [2] มีแหล่งข้อมูลดีๆ มากมาย คุณอาจต้องการดูพอร์ทัล NLG ที่ Association for Computational Linguistics wiki [3]
สุดท้ายแต่ไม่ท้ายสุด คุณอาจสนใจบล็อกของผู้เขียน [4] และบันทึกย่อของชั้นเรียนของหลักสูตร NLG ล่าสุดของเขา [5]
การทำงานกับ NLGen ได้รับการสนับสนุนโดย Textualization Software Ltd.
ห้องสมุดนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT - ดูไฟล์ใบอนุญาตสำหรับรายละเอียด