これらは、再帰降下自然言語ジェネレータ [1] を実装するための純粋な PHP ヘルパー クラスです。提供されるクラスは、抽象ジェネレーター、オントロジー コンテナー、およびレキシコン コンテナーです。
これらのクラスは、その複雑さについて言えば、単純から中レベルのジェネレーターを構築するのに役立ちます。より高度な機能は、より単純な場合には邪魔にならないようにすることが強調されています (つまり、オントロジーやレキシコンを使用する必要がない場合、それらはスキップできます)。
ジェネレーターは、生成されたテキストの意味論的な注釈を追跡し、さらなる生成関数がテキストについて推論できるようにします。グローバル コンテキスト ブラックボードも利用できます。
多言語の例の詳細については、「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->name_of_the_function($data_array_input_to_the_function)
$this->gen('name_of_the_function', $data_array_input_to_the_function)
を使用してそれを呼び出します。または、関数をprotectedおよび以下で説明する関数挿入を使用します。ジェネレーター抽象クラスは、ユーザーやその他の便利な機能のセマンティック アノテーションを追跡します。
文法を実装する関数が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 が 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" ;
Reiter と Dale による Building Natural Language Generation Systems (2000) を強くお勧めします。
SIGGEN サイト [2] には優れたリソースが豊富にあります。 Association for Computational Linguistics wiki [3] の NLG ポータルも参照してください。
最後になりましたが、著者のブログ [4] と最近の NLG コースの授業ノート [5] に興味があるかもしれません。
NLGen の作業は Textualization Software Ltd. によって後援されています。
このライブラリは MIT ライセンスに基づいてライセンスされています。詳細については、LICENSE ファイルを参照してください。