هذه هي فئات مساعدة 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 );
تنتج طوال الأسبوع في الغالب مجانًا طوال اليوم. يوم الأحد مزدحم من الساعة 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)
. أو يمكنك تحديد وظائفك على أنها محمية و استخدم وظيفة التدخل، الموضحة أدناه، حيث تقوم فئة الملخص المولد بتتبع التعليقات التوضيحية الدلالية لك وللآخرين الأشياء الجيدة.
إذا كانت الوظائف التي تنفذ القواعد محمية ، فيمكن إنشاء فئة ديناميكية باستخدام أسلوب فئة 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
(ينتج عن ذلك أن خوان بدأ العمل على المكون 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" ;
أوصي بشدة ببناء أنظمة توليد اللغات الطبيعية (2000) من تأليف رايتر وديل.
يحتوي موقع SIGGEN [2] على الكثير من الموارد الجيدة. قد ترغب أيضًا في إلقاء نظرة على بوابة NLG على موقع Wiki الخاص برابطة اللغويات الحاسوبية [3].
أخيرًا وليس آخرًا، قد تكون مهتمًا بمدونة المؤلف [4] والملاحظات الصفية لدورته الأخيرة حول NLG [5].
يتم رعاية العمل على NLGen بواسطة شركة Textualization Software Ltd..
هذه المكتبة مرخصة بموجب ترخيص MIT - راجع ملف الترخيص للحصول على التفاصيل.