Ini adalah kelas pembantu PHP murni untuk mengimplementasikan generator bahasa alami keturunan rekursif [1]. Kelas-kelas yang disediakan adalah generator abstrak, wadah ontologi, dan wadah leksikon.
Kelas-kelas ini akan membantu membangun generator tingkat sederhana hingga menengah, dengan menjelaskan kompleksitasnya. Penekanan diberikan pada fitur-fitur yang lebih canggih untuk kasus-kasus yang lebih sederhana (yaitu, jika tidak perlu menggunakan ontologi atau leksikon, fitur-fitur tersebut dapat dilewati).
Generator melacak anotasi semantik pada teks yang dihasilkan, sehingga memungkinkan fungsi generasi lebih lanjut untuk mempertimbangkan teks tersebut. Papan tulis konteks global juga tersedia.
Untuk detail mengenai contoh multibahasa, lihat pembicaraan Jadikan Web Bukan Perang. [2]
Hal ini masih dalam proses, lihat PETA JALAN untuk mengetahui beberapa wawasan mengenai pengembangan di masa depan.
NLGen dikirimkan dengan tata bahasa generasi yang siap digunakan, yang membuat deskripsi teks untuk jadwal mingguan. Tata bahasanya dapat diakses dengan mengimpor NLGenGrammarsAvailabilityAvailabilityGenerator
.
Metode generateAvailability
menerima daftar "waktu sibuk" dalam bentuk
[ day-of-week, [ start hour, start minute ], [ end hour, end minute ] ]
daftar rentang yang menunjukkan kapan hari yang dijadwalkan dimulai dan berakhir (dalam bentuk [ day-of-week => [ start hour, start minute ], [ end hour, end minute ] ]
) dan konstanta yang menunjukkan seberapa "kasar" harus berupa teks (satu baris ringkasan atau sangat rinci).
Lihat examples/availability
dan tests/Availability/AvailabilityTest
.
Contoh:
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 );
Menghasilkan Sepanjang Minggu sebagian besar gratis sepanjang hari. Hari Minggu sibuk mulai pukul 06.00 hingga akhir pukul 11.00, dan mulai pukul setengah dua belas hingga pukul 22.00; sisanya gratis.
Lihat folder examples/
, tetapi singkatnya, subkelaskan kelas NLGenGenerator
dan implementasikan fungsi bernama top
. Fungsi ini dapat mengembalikan string atau array dengan text
dan sem
untuk anotasi semantik pada teks yang dikembalikan.
Jika Anda ingin menggunakan fungsi lain untuk menyusun teks, gunakan $this->gen('name_of_the_function', $data_array_input_to_the_function)
untuk memanggilnya (bukan $this->name_of_the_function($data_array_input_to_the_function)
. Atau Anda dapat mendefinisikan fungsi Anda sebagai protected dan gunakan fungsi interposisi, dijelaskan di bawah. Kelas abstrak generator melacak anotasi semantik untuk Anda dan barang lainnya.
Jika fungsi yang mengimplementasikan tata bahasa dilindungi , kelas dinamis dapat dibuat dengan metode kelas NewSealed
. Kelas dinamis ini akan memiliki intersepsi fungsi sehingga Anda dapat memanggil $this->name_of_function
seperti biasa tetapi sebenarnya $this->gen
akan dipanggil.
Apa pun cara Anda menggunakannya, untuk memanggil kelas, jika subkelas yang Anda buat adalah $my_gen
maka $my_gen->generate($input_data_as_an_array)
akan mengembalikan string yang dihasilkan. Jika Anda ingin mengakses anotasi semantik, gunakan $my_gen->semantics()
sesudahnya.
Untuk kasus penggunaan yang berbeda, lihat folder examples/
.
Contoh ini dicangkokkan dari folder examples/basic
. Untuk dipanggil baris perintah dengan php basic.php 0 0 0 0
(ini menghasilkan Juan mulai mengerjakan Komponen 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" ;
Saya sangat merekomendasikan Building Natural Language Generation Systems (2000) oleh Reiter dan Dale.
Situs SIGGEN [2] memiliki banyak sumber daya yang bagus. Anda mungkin juga ingin melihat portal NLG di wiki Association for Computational Linguistics [3].
Terakhir, Anda mungkin tertarik dengan blog penulis [4] dan catatan kelas kursus NLG terbarunya [5].
Pengerjaan NLGen disponsori oleh Textualization Software Ltd..
Perpustakaan ini dilisensikan di bawah Lisensi MIT - Lihat file LISENSI untuk detailnya.