Hierbei handelt es sich um reine PHP-Hilfsklassen zur Implementierung rekursiv absteigender Generatoren natürlicher Sprache [1]. Die bereitgestellten Klassen sind ein abstrakter Generator, ein Ontologiecontainer und ein Lexikoncontainer.
Diese Klassen sollen dabei helfen, einfache bis mittlere Generatoren zu erstellen und über deren Komplexität zu sprechen. Der Schwerpunkt wurde darauf gelegt, fortgeschrittenere Funktionen für einfachere Fälle aus dem Weg zu räumen (dh wenn kein Bedarf besteht, die Ontologie oder das Lexikon zu verwenden, können sie übersprungen werden).
Der Generator verfolgt semantische Anmerkungen zum generierten Text, um weiteren Generierungsfunktionen die Möglichkeit zu geben, Überlegungen zum Text anzustellen. Eine globale Kontexttafel ist ebenfalls verfügbar.
Einzelheiten zum mehrsprachigen Beispiel finden Sie im Vortrag „Make Web Not War“. [2]
Dies ist noch in Arbeit. Einige Einblicke in die zukünftige Entwicklung finden Sie in der ROADMAP.
NLGen wird mit einer gebrauchsfertigen Generierungsgrammatik ausgeliefert, die Textbeschreibungen für Wochenpläne erstellt. Auf die Grammatik kann durch Importieren von NLGenGrammarsAvailabilityAvailabilityGenerator
zugegriffen werden.
Die Methode generateAvailability
“ erhält eine Liste der „Beschäftigten Zeiten“ in der Form
[ day-of-week, [ start hour, start minute ], [ end hour, end minute ] ]
eine Liste von Bereichen, die angeben, wann der geplante Tag beginnt und endet (in der Form [ day-of-week => [ start hour, start minute ], [ end hour, end minute ] ]
), und eine Konstante, die angibt, wie „grob“ sollte der Text sein (einzeilig zusammenfassend oder sehr detailliert).
Siehe examples/availability
und tests/Availability/AvailabilityTest
.
Beispiel:
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 );
Produziert Die ganze Woche über ist größtenteils der ganze Tag kostenlos. Der Sonntag ist von spät 6 bis spät 11 Uhr und von halb 14 bis 22 Uhr voll; der Rest ist kostenlos.
Schauen Sie sich den Ordner examples/
an, aber kurz gesagt: Erstellen Sie eine Unterklasse der Klasse NLGenGenerator
und implementieren Sie eine Funktion mit dem Namen top
. Diese Funktion kann entweder eine Zeichenfolge oder ein Array mit einem text
und sem
für semantische Anmerkungen zum zurückgegebenen Text zurückgeben.
Wenn Sie andere Funktionen zum Zusammenstellen des Textes verwenden möchten, verwenden Sie $this->gen('name_of_the_function', $data_array_input_to_the_function)
zum Aufrufen (anstelle von $this->name_of_the_function($data_array_input_to_the_function)
. Oder Sie können Ihre Funktionen als geschützt definieren und Verwenden Sie die unten beschriebene Funktion Interposition. Die Generator-Abstraktklasse verfolgt die semantischen Anmerkungen für Sie und andere Extras.
Wenn die Funktionen, die die Grammatik implementieren, geschützt sind, kann mit der Klassenmethode NewSealed
eine dynamische Klasse erstellt werden. Diese dynamische Klasse verfügt über eine Funktionsabfangfunktion, sodass Sie wie gewohnt $this->name_of_function
aufrufen können, tatsächlich wird jedoch $this->gen
aufgerufen.
Wie auch immer Sie es verwenden, um die Klasse aufzurufen: Wenn Ihre instanziierte Unterklasse $my_gen
ist, dann gibt $my_gen->generate($input_data_as_an_array)
die generierten Zeichenfolgen zurück. Wenn Sie auf die semantischen Anmerkungen zugreifen möchten, verwenden Sie anschließend $my_gen->semantics()
.
Verschiedene Anwendungsfälle finden Sie im Ordner examples/
“.
Dieses Beispiel stammt aus dem Ordner examples/basic
. Wird über die Befehlszeile mit php basic.php 0 0 0 0
aufgerufen (es führt dazu, dass Juan mit der Arbeit an der Komponente ABC beginnt ).
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" ;
Ich kann „Building Natural Language Generation Systems“ (2000) von Reiter und Dale wärmstens empfehlen.
Die SIGGEN-Site [2] bietet viele gute Ressourcen. Vielleicht möchten Sie auch einen Blick auf das NLG-Portal im Wiki der Association for Computational Linguistics [3] werfen.
Zu guter Letzt könnten Sie auch der Blog des Autors [4] und die Unterrichtsnotizen seines letzten NLG-Kurses [5] interessieren.
Die Arbeit an NLGen wird von Textualization Software Ltd. gesponsert.
Diese Bibliothek ist unter der MIT-Lizenz lizenziert – Einzelheiten finden Sie in der LIZENZ-Datei.