이는 재귀 하강 자연어 생성기 [1]를 구현하기 위한 순수 PHP 도우미 클래스입니다. 제공되는 클래스는 추상 생성기, 온톨로지 컨테이너 및 어휘집 컨테이너입니다.
이 클래스는 복잡성에 대해 설명하면서 간단한 수준부터 중간 수준의 생성기를 구축하는 데 도움이 됩니다. 더 간단한 경우에 방해가 되지 않는 고급 기능을 유지하는 것이 강조되었습니다(즉, 온톨로지나 어휘를 사용할 필요가 없으면 건너뛸 수 있습니다).
생성기는 생성된 텍스트에 대한 의미 주석을 추적하여 텍스트에 대해 추론할 수 있는 추가 생성 기능을 활성화합니다. 글로벌 컨텍스트 칠판도 사용할 수 있습니다.
다국어 예제에 대한 자세한 내용은 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시부터 오전 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 및 아래에 설명된 함수 삽입을 사용하세요. 생성기 추상 클래스는 사용자 및 기타 항목에 대한 의미 주석을 추적합니다.
문법을 구현하는 함수가 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 파일을 참조하세요.