這些是純 PHP 幫助器類,用於實作遞歸下降自然語言產生器 [1]。提供的類別是抽象化生成器、本體容器和字典容器。
這些類別應該有助於建立簡單到中級的生成器,並談論它們的複雜性。重點是為更簡單的情況保留更高級的功能(即,如果不需要使用本體或字典,則可以跳過它們)。
生成器追蹤生成的文本的語義註釋,以便使進一步的生成函數能夠對文本進行推理。還提供全域上下文黑板。
有關多語言範例的詳細信息,請參閱“Make Web Not War”演講。 [2]
這是正在進行的工作,請參閱路線圖以了解未來發展的一些見解。
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 );
Produces All week 大部分時間全天免費。週日上午 6 點至上午 11 點以及下午 14 點半至 22 點很忙;其餘的都是免費的。
查看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)
函數和函數將使用函數插入,如下所述。
如果實作語法的函數是protected ,則可以使用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開始處理元件 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" ;
我強烈推薦 Reiter 和 Dale 的《Building Natural Language Generation Systems》(2000)。
SIGGEN 站點 [2] 擁有大量優質資源。您可能還想查看計算語言學協會 wiki 中的 NLG 入口網站 [3]。
最後但並非最不重要的一點是,您可能對作者的部落格 [4] 和他最近的 NLG 課程的課堂筆記 [5] 感興趣。
NLGen 的工作由 Textualization Software Ltd. 贊助。
該庫根據 MIT 許可證獲得許可 - 有關詳細信息,請參閱許可證文件。