| بناء الحالة | تغطية الكود | إصدار | إجمالي التنزيلات | أدنى إصدار PHP | رخصة |
|---|---|---|---|---|---|
يمكن لهذه المكتبة اكتشاف لغة سلسلة نص معينة. يمكن تحليل نص التدريب في العديد من التعبيرات المختلفة في سلسلة من الأشكال n- وإنشاء ملف قاعدة بيانات في PHP لاستخدامه في مرحلة الكشف. ثم قد يستغرق الأمر نصًا معينًا واكتشاف لغته باستخدام قاعدة البيانات التي تم إنشاؤها مسبقًا في مرحلة التدريب. تأتي المكتبة مع عينات نصية تستخدم للتدريب واكتشاف النص في 110 لغة.
ملاحظة: تتطلب هذه المكتبة امتداد سلسلة Multibyte من أجل العمل.
$ composer require patrickschur/language-detection3.yz إلى 4.yz ؟هام : فقط للأشخاص الذين يستخدمون دليل مخصص مع ملفات الترجمة الخاصة بهم.
بدءًا من الإصدار 4.yz قمنا بتحديث ملفات الموارد. لأسباب الأداء ، نستخدم الآن PHP بدلاً من JSON كتنسيق. هذا يعني أن الأشخاص الذين يرغبون في استخدام 4.yz واستخدموا 3.yz من قبل ، يجب عليهم ترقية ملفات JSON الخاصة بهم إلى PHP. لترقية ملفات الموارد الخاصة بك ، يجب إنشاء ملف تعريف لغة مرة أخرى. لم تعد هناك حاجة إلى ملفات JSON.
يمكنك حذف ملفات JSON غير الضرورية تحت Linux مع الأمر التالي.
rm resources/ * / * .jsonللكشف عن اللغة بشكل صحيح ، يجب أن يكون طول نص الإدخال على الأقل بعض الجمل.
use LanguageDetection Language ;
$ ld = new Language ;
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> close ();نتيجة:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151,
"nb" => 0.48849462365591,
"nn" => 0.48741935483871,
"fy" => 0.47822580645161,
"dk" => 0.47172043010753,
"sv" => 0.46408602150538,
"bi" => 0.46021505376344,
"de" => 0.45903225806452,
[...]
)
__construct(array $result = [], string $dirname = '')يمكنك تمرير مجموعة من اللغات إلى المنشئ. لمقارنة الجملة المطلوبة فقط مع اللغات المعطاة. هذا يمكن أن يزيد بشكل كبير من الأداء. المعلمة الأخرى اختيارية واسم الدليل حيث توجد ملفات الترجمات.
$ ld = new Language ([ ' de ' , ' en ' , ' nl ' ]);
// Compares the sentence only with "de", "en" and "nl" language models.
$ ld -> detect ( ' Das ist ein Test ' );whitelist(string ...$whitelist)توفير القائمة البيضاء. إرجاع قائمة اللغات ، وهي مطلوبة.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> whitelist ( ' de ' , ' nn ' , ' nl ' , ' af ' )-> close ();نتيجة:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"nn" => 0.48741935483871,
"de" => 0.45903225806452
)
blacklist(string ...$blacklist)توفير قائمة سوداء. يزيل اللغات المعطاة من النتيجة.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> blacklist ( ' dk ' , ' nb ' , ' de ' )-> close ();نتيجة:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151,
"nn" => 0.48741935483871,
"fy" => 0.47822580645161,
"sv" => 0.46408602150538,
"bi" => 0.46021505376344,
[...]
)
bestResults()إرجاع أفضل النتائج.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> bestResults ()-> close ();نتيجة:
Array
(
"nl" => 0.66193548387097
)
limit(int $offset, int $length = null)يمكنك تحديد عدد السجلات المراد إرجاعها. على سبيل المثال ، سيعود الرمز التالي إلى إدخالات الثلاثة الأولى.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> limit ( 0 , 3 )-> close ();نتيجة:
Array
(
"nl" => 0.66193548387097,
"af" => 0.51338709677419,
"br" => 0.49634408602151
)
close()إرجاع النتيجة كصفيف.
$ ld -> detect ( ' This is an example! ' )-> close ();نتيجة:
Array
(
"en" => 0.5889400921659,
"gd" => 0.55691244239631,
"ga" => 0.55376344086022,
"et" => 0.48294930875576,
"af" => 0.48218125960061,
[...]
)
setTokenizer(TokenizerInterface $tokenizer)يستخدم البرنامج النصي رمزًا للحصول على كل الكلمات في جملة. يمكنك تحديد الرمز المميز الخاص بك للتعامل مع الأرقام على سبيل المثال.
$ ld -> setTokenizer ( new class implements TokenizerInterface
{
public function tokenize ( string $ str ): array
{
return preg_split ( ' /[^a-z0-9]/u ' , $ str , - 1 , PREG_SPLIT_NO_EMPTY );
}
});سيؤدي ذلك إلى إرجاع الأحرف فقط من الأبجدية في شكل صغير وأرقام بين 0 و 9.
__toString() إرجاع العليا من النتيجة. لاحظ echo في البداية.
echo $ ld -> detect ( ' Das ist ein Test. ' );نتيجة:
de
jsonSerialize()تسلسل البيانات إلى JSON.
$ object = $ ld -> detect ( ' Tere tulemast tagasi! Nägemist! ' );
json_encode ( $ object , JSON_PRETTY_PRINT );نتيجة:
{
"et": 0.5224748810153358,
"ch": 0.45817028027498674,
"bi": 0.4452670544685352,
"fi": 0.440983606557377,
"lt": 0.4382866208355367,
[...]
}
يمكنك أيضًا الجمع بين الأساليب مع بعضها البعض. سيقوم المثال التالي بإزالة جميع الإدخالات المحددة في القائمة السوداء وإرجاع الإدخالات الأربعة الأولى فقط.
$ ld -> detect ( ' Mag het een onsje meer zijn? ' )-> blacklist ( ' af ' , ' dk ' , ' sv ' )-> limit ( 0 , 4 )-> close ();نتيجة:
Array
(
"nl" => 0.66193548387097
"br" => 0.49634408602151
"nb" => 0.48849462365591
"nn" => 0.48741935483871
)
يمكنك أيضًا الوصول إلى الكائن مباشرة كصفيف.
$ object = $ ld -> detect (Das ist ein Test');
echo $ object [ ' de ' ];
echo $ object [ ' en ' ];
echo $ object [ ' xy ' ]; // does not existsنتيجة:
0.6623339658444
0.56859582542694
NULL
تدعم المكتبة حاليًا 110 لغة. للحصول على نظرة عامة على جميع اللغات المدعومة ، يرجى إلقاء نظرة على هنا.
المكتبة قابلة للتدريب مما يعني أنه يمكنك تغيير وإزالة وإضافة ملفات اللغة الخاصة بك إليها. إذا لم تكن لغتك مدعومة ، فلا تتردد في إضافة ملفات اللغة الخاصة بك. للقيام بذلك ، قم بإنشاء دليل جديد في resources وإضافة نص التدريب الخاص بك إليه.
ملاحظة: يجب أن يكون نص التدريب ملف .txt .
|- resources
|- ham
|- ham.txt
|- spam
|- spam.txt
كما ترون ، يمكننا أيضًا استخدامه للكشف عن البريد العشوائي أو لحم الخنزير.
عندما تقوم بتخزين ملفات الترجمة خارج resources ، يجب عليك تحديد المسار.
$ t -> learn ( ' YOUR_PATH_HERE ' );كلما قمت بتغيير أحد ملفات الترجمة ، يجب عليك أولاً إنشاء ملف تعريف لغة لذلك. هذا قد يستغرق بضع ثوان.
use LanguageDetection Trainer ;
$ t = new Trainer ();
$ t -> learn ();قم بإزالة هذه الأسطر القليلة بعد التنفيذ والآن يمكننا تصنيف النصوص من خلال لغتها من خلال نص التدريب الخاص بنا.
لتحسين مرحلة الكشف ، عليك استخدام المزيد من n-grams. ولكن كن حذرا ، هذا سوف يتباطأ السيناريو. اكتشفت أن مرحلة الكشف أفضل بكثير عندما تستخدم حوالي 9.000 n-grams (الافتراضي هو 310). للقيام بذلك ، انظر إلى الكود مباشرة أدناه:
$ t = new Trainer ();
$ t -> setMaxNgrams ( 9000 );
$ t -> learn ();أولا عليك تدريبه. الآن يمكنك تصنيف نصوص مثل من قبل ولكن يجب عليك تحديد عدد n-grams التي تريد استخدامها.
$ ld = new Language ();
$ ld -> setMaxNgrams ( 9000 );
// "grille pain" is french and means "toaster" in english
var_dump ( $ ld -> detect ( ' grille pain ' )-> bestResults ());نتيجة:
class LanguageDetectionLanguageResult#5 (1) {
private $result =>
array(2) {
'fr' =>
double(0.91307037037037)
'en' =>
double(0.90623333333333)
}
}
لا ليس كذلك. لن تستخدم فئة المدرب سوى أفضل 310 N-Grams للغة. إذا لم تقم بتغيير هذا الرقم أو إضافة المزيد من ملفات اللغة ، فلن يؤثر ذلك على الأداء. فقط إنشاء n-grams أبطأ. ومع ذلك ، يجب أن يتم إنشاء n-grams مرة واحدة فقط. تتأثر مرحلة الكشف فقط عندما تحاول اكتشاف قطع كبيرة من النصوص.
ملخص : ستكون مرحلة التدريب أبطأ ولكن مرحلة الكشف تظل كما هي.
لا تتردد في المساهمة. أي مساعدة موضع ترحيب.
هذه المشاريع مرخصة بموجب شروط ترخيص معهد ماساتشوستس للتكنولوجيا.