كاشف اللغة الفعال ( Nito-ELD أو ELD ) هو برنامج سريع ودقيق للكشف عن اللغة الطبيعية، مكتوب بنسبة 100% بلغة PHP، مع سرعة تضاهي أجهزة الكشف السريعة المجمعة بلغة C++، ودقة ضمن نطاق أفضل أجهزة الكشف حتى الآن.
ليس له أي تبعيات، سهل التثبيت، كل ما تحتاجه هو PHP بامتداد mb .
يتوفر ELD أيضًا (إصدارات قديمة) في Javascript وPython.
تثبيت
كيفية الاستخدام
المعايير
قواعد البيانات
اختبار
اللغات
التغييرات من ELD v2 إلى v3:
Detect()->language تُرجع الآن السلسلة
'und'
للقيمة غير المحددة بدلاً منNULL
قواعد البيانات غير متوافقة، وأكبر، ومتوسطة v2 ≈ صغيرة v3
تتم إزالة وظيفة DynamicLangSubset()
تمت تسمية الدالة cleanText() الآن باسم EnableTextCleanup()
يتطلب الملحن $ nitotm/كاشف لغة فعال
--prefer-dist
سوف يحذف الاختبارات/ ، وmisc/ & Benchmark/ ، أو يستخدم --prefer-source
لتضمين كل شيء
قم بتثبيت nitotm/efficient-language-detector:dev-main
لتجربة آخر التغييرات غير المستقرة
وبدلاً من ذلك، يمكن أن يعمل تنزيل/استنساخ الملفات بشكل جيد.
(تثبيت قاعدة بيانات صغيرة فقط قيد الإنشاء)
يوصى باستخدام OPcache، خصيصًا لقواعد البيانات الكبيرة لتقليل أوقات التحميل.
نحتاج إلى تعيين opcache.interned_strings_buffer
و opcache.memory_consumption
على مستوى عالٍ بما يكفي لكل قاعدة بيانات
القيمة الموصى بها بين قوسين. تحقق من قواعد البيانات لمزيد من المعلومات.
إعداد php.ini | صغير | واسطة | كبير | كبير جدًا |
---|---|---|---|---|
memory_limit | >= 128 | >= 340 | >= 1060 | >= 2200 |
opcache.interned... | >= 8 (16) | >= 16 (32) | >= 60 (70) | >= 116 (128) |
opcache.memory | >= 64 (128) | >= 128 (230) | >= 360 (450) | >= 750 (820) |
تتوقع detect()
سلسلة UTF-8 وترجع كائنًا بخاصية language
، يحتوي على رمز ISO 639-1 (أو أي تنسيق محدد آخر)، أو 'und'
للغة غير المحددة.
// require_once 'manual_loader.php'; لتحميل ELD بدون أداة التحميل التلقائي. تحديث path.use NitotmEld{LanguageDetector, EldDataFile, EldFormat};// LanguageDetector(databaseFile: ?string,putFormat: ?string)$eld = new LanguageDetector(EldDataFile::SMALL, EldFormat::ISO639_1);// ملفات قاعدة البيانات: ' صغير"، "متوسط"، "كبير"، "كبير جدًا". التحقق من متطلبات الذاكرة// التنسيقات: 'ISO639_1'، 'ISO639_2T'، 'ISO639_1_BCP47'، 'ISO639_2T_BCP47' و 'FULL_TEXT' // الثوابت ليست إلزامية، LanguageDetector('small', 'ISO639_1'); ستعمل أيضًا$eld->detect('Hola, cómo te llamas?');// object( language => string, Scores() => array, isReliable() => bool )// ( language => 'es', Scores() => ['es' => 0.25, 'nl' => 0.05], isReliable() => true )$eld->detect('Hola, cómo te llamas?') ->اللغة;// 'es'
سيؤدي استدعاء langSubset()
مرة واحدة إلى تعيين المجموعة الفرعية. يستغرق الاستدعاء الأول وقتًا أطول لأنه ينشئ قاعدة بيانات جديدة، وفي حالة حفظ ملف قاعدة البيانات (افتراضي)، فسيتم تحميله في المرة التالية التي نقوم فيها بإنشاء نفس المجموعة الفرعية.
لاستخدام مجموعة فرعية دون حمل إضافي، الطريقة الصحيحة هي إنشاء مثيل للكاشف بالملف المحفوظ والمعاد بواسطة langSubset()
. تحقق من اللغات المتاحة أدناه.
// يقبل دائمًا رموز ISO 639-1، بالإضافة إلى تنسيق الإخراج المحدد إذا كان مختلفًا.// langSubset(languages: [], save: true, encode: true); سيُرجع اسم ملف المجموعة الفرعية إذا تم حفظه$eld->langSubset(['en', 'es', 'fr', 'it', 'nl', 'de']);// Object ( Success => bool, languages => ?array, error => ?string, file => ?string )// ( Success => true, languages => ['en', 'es'...], error => NULL, file => ' Small_6_mfss...' )// لإزالة المجموعة الفرعية$eld->langSubset();// أفضل وأسرع طريقة لاستخدام مجموعة فرعية هي تحميلها تمامًا مثل قاعدة البيانات الافتراضية$eld_subset = new NitotmEldLanguageDetector('small_6_mfss5z1t' );
// إذا كان EnableTextCleanup(True)، يقوم Detect() بإزالة عناوين URL ومجالات .com ورسائل البريد الإلكتروني والأبجدية الرقمية...// غير مستحسن، لأن عناوين URL والمجالات تحتوي على تلميحات للغة، مما قد يساعد في الدقة$eld->enableTextCleanup(true) ); // الافتراضي هو false // إذا لزم الأمر، يمكننا الحصول على معلومات عن مثيل ELD: اللغات، ونوع قاعدة البيانات، وما إلى ذلك.$eld->info();
لقد قارنت ELD مع مجموعة مختلفة من أجهزة الكشف، حيث لا يوجد الكثير منها في PHP.
عنوان URL | إصدار | لغة |
---|---|---|
https://github.com/nitotm/efficiency-language-detector/ | 3.0.0 | PHP |
https://github.com/pemistahl/lingua-py | 2.0.2 | بايثون |
https://github.com/facebookresearch/fastText | 0.9.2 | سي ++ |
https://github.com/CLD2Owners/cld2 | 21 أغسطس 2015 | سي ++ |
https://github.com/patrickschur/language-detection | 5.3.0 | PHP |
https://github.com/wooorm/franc | 7.2.0 | جافا سكريبت |
المعايير:
تتويبا : 20 ميجابايت ، جمل قصيرة من تتويبا، 50 لغة مدعومة من قبل جميع المتنافسين، حتى 10 آلاف سطر لكل منهم.
بالنسبة إلى تتويبا، قمت بقصر جميع أجهزة الكشف على المجموعة الفرعية المكونة من 50 لغة، مما يجعل المقارنة عادلة قدر الإمكان.
كما أن تتويبا ليس جزءًا من مجموعة بيانات تدريب ELD (ولا الضبط)، ولكنه مخصص للنص السريع
اختبار ELD : 10 ميجابايت ، جمل من 60 لغة يدعمها ELD، 1000 سطر لكل منها. مستخرج من 60 جيجابايت من بيانات تدريب ELD.
الجمل : 8 ميغابايت ، جمل من معيار Lingua ، باستثناء اللغات غير المدعومة واليوروبا التي بها أحرف معطلة.
أزواج كلمات بحجم 1.5 ميجابايت ، وكلمات مفردة بحجم 870 كيلو بايت ، أيضًا من Lingua، وهي نفس 53 لغة.
تشارك Lingua بـ 54 لغة، والفرنك بـ 58، وباتريكشور بـ 54.
لا يحتوي fasttext على خيار مجموعة فرعية مضمن، لذلك لإظهار دقته وسرعته المحتملة، قمت بوضع معيارين، fasttext-جميعها لا تقتصر على أي مجموعة فرعية في أي اختبار
* يفتقر CLD2 من Google أيضًا إلى خيار المجموعة الفرعية، ومن الصعب إنشاء مجموعة فرعية حتى مع خيارها bestEffort = True
، حيث يُرجع عادةً لغة واحدة فقط، لذا فهو به عيب نسبي.
يتم تطبيع الوقت: (الخطوط الإجمالية * الوقت) / الخطوط المعالجة
صغير | واسطة | كبير | كبير جدًا | |
---|---|---|---|---|
الايجابيات | أدنى الذاكرة | متوازن | الأسرع | الأكثر دقة |
سلبيات | الأقل دقة | أبطأ (لكن سريع) | ذاكرة عالية | أعلى الذاكرة |
حجم الملف | 3 ميجا بايت | 10 ميجابايت | 32 ميجا بايت | 71 ميجا بايت |
استخدام الذاكرة | 76 ميجا بايت | 280 ميجا بايت | 977 ميجا بايت | 2083 ميجا بايت |
استخدام الذاكرة مخبأة | 0.4 ميجا بايت + OP | 0.4 ميجا بايت + OP | 0.4 ميجا بايت + OP | 0.4 ميجا بايت + OP |
OPcache الذاكرة المستخدمة | 21 ميجا بايت | 69 ميجا بايت | 244 ميجا بايت | 539 ميجا بايت |
تم استخدام OPcache داخليًا | 4 ميجا بايت | 10 ميجابايت | 45 ميجا بايت | 98 ميجا بايت |
وقت التحميل غير مخبأ | 0.14 ثانية | 0.5 ثانية | 1.5 ثانية | 3.4 ثانية |
وقت التحميل مخبأة | 0.0002 ثانية | 0.0002 ثانية | 0.0002 ثانية | 0.0002 ثانية |
الإعدادات (مستحسن) | ||||
memory_limit | >= 128 | >= 340 | >= 1060 | >= 2200 |
opcache.interned... * | >= 8 (16) | >= 16 (32) | >= 60 (70) | >= 116 (128) |
opcache.memory | >= 64 (128) | >= 128 (230) | >= 360 (450) | >= 750 (820) |
* أوصي باستخدام ما يكفي من interned_strings_buffer
لأن خطأ تجاوز سعة المخازن المؤقتة قد يؤخر استجابة الخادم.
لاستخدام جميع قواعد البيانات، يجب أن يكون حجم opcache.interned_strings_buffer
160 ميجابايت (170 ميجابايت) على الأقل.
عند اختيار مقدار الذاكرة، ضع في اعتبارك opcache.memory_consumption
يتضمن opcache.interned_strings_buffer
.
إذا كانت ذاكرة OPcache تبلغ 230 ميجابايت، وinterned_strings 32 ميجابايت، وذاكرة DB المتوسطة 69 ميجابايت مخزنة مؤقتًا، فلدينا إجمالي (230 -32 -69) = 129 ميجابايت من OPcache لكل شيء آخر.
وأيضًا، إذا كنت ستستخدم مجموعة فرعية من اللغات بالإضافة إلى قاعدة البيانات الرئيسية، أو مجموعات فرعية متعددة، فقم بزيادة opcache.memory
وفقًا لذلك إذا كنت تريد تحميلها على الفور. للتخزين المؤقت لجميع قواعد البيانات الافتراضية بشكل مريح، قد ترغب في تعيينها على 1200 ميجابايت.
قد لا يتضمن تثبيت الملحن الافتراضي هذه الملفات. استخدم --prefer-source
لتضمينها.
بالنسبة لبيئة التطوير التي تحتوي على الملحن "autoload-dev" (الجذر فقط)، سيقوم ما يلي بتنفيذ الاختبارات
new NitotmEldTestsTestsAutoload();
أو يمكنك أيضًا إجراء الاختبارات بتنفيذ الملف التالي:
$ phpefficiency-language-detector/tests/tests.php # مسار التحديث
لتشغيل معايير الدقة، قم بتشغيل الملف benchmark/bench.php
.
هذه هي رموز ISO 639-1 التي تتضمن 60 لغة. بالإضافة إلى 'und'
لـ غير محدد
إنه تنسيق لغة ELD الافتراضي. outputFormat: 'ISO639_1'
am، ar، az، be، bg، bn، ca، cs، da، de، el، en، es، et، eu، fa، fi، fr، gu، he، hi، hr، hu، hy، is، ذلك، ja، ka، kn، ko، ku، lo، lt، lv، ml، mr، ms، nl، no، أو، pa، pl، pt، ro، ru، sk، sl، sq، sr، sv، تا، تي، ث، ليرة تركية، آر، المملكة المتحدة، أور، السادس، يو، zh
هذه هي اللغات الـ 60 المدعومة لـ Nito-ELD . outputFormat: 'FULL_TEXT'
الأمهرية، العربية، الأذربيجانية (اللاتينية)، البيلاروسية، البلغارية، البنغالية، الكاتالونية، التشيكية، الدانمركية، الألمانية، اليونانية، الإنجليزية، الإسبانية، الإستونية، الباسكية، الفارسية، الفنلندية، الفرنسية، الغوجاراتية، العبرية، الهندية، الكرواتية، المجرية، الأرمنية ، الأيسلندية، الإيطالية، اليابانية، الجورجية، الكانادا، الكورية، الكردية (العربية)، لاو، الليتوانية، اللاتفية، المالايالامية، الماراثية، الماليزية (اللاتينية)، الهولندية، النرويجية، الأوريا، البنجابية، البولندية، البرتغالية، الرومانية، الروسية، السلوفاكية ، السلوفينية، الألبانية، الصربية (السيريلية)، السويدية، التاميلية، التيلجو، التايلاندية، التاغالوغية، التركية، الأوكرانية، الأردية، الفيتنامية، اليوروبا، الصينية
رموز ISO 639-1 مع علامة اسم البرنامج النصي IETF BCP 47. outputFormat: 'ISO639_1_BCP47'
am، ar، az-Latn، be، bg، bn، ca، cs، da، de، el، en، es، et، eu، fa، fi، fr، gu، he، hi، hr، hu، hy، هو، it، ja، ka، kn، ko، ku-Arab، lo، lt، lv، ml، mr، ms-Latn، nl، no، or، pa، pl، pt، ro، ru، sk، sl، sq، sr-Cyrl، sv، ta، te، th، tl، tr، uk، ur، vi، yo، zh
رموز ISO 639-2/T (والتي تكون صالحة أيضًا 639-3 ) outputFormat: 'ISO639_2T'
. متوفر أيضًا مع BCP 47 ISO639_2T_BCP47
amh، ara، az، bel، bul، ben، cat، ces، dan، deu، ell، eng، spa، est، eus، fas، fin، fra، guj، heb، hin، hrv، hun، hye، isl، ita، jpn، kat، kan، kor، kur، lao، lit، lav، mal، mar، msa، nld، nor، ori، pan، pol، por، ron، rus، slk، slv، sqi، srp، swe، تام، هاتف، ثا، تي جي إل، تور، المملكة المتحدة، أور، في، يور، تشو
إذا كنت ترغب في التبرع لتحسينات مفتوحة المصدر، أو تعييني لإجراء تعديلات خاصة، أو طلب تدريب بديل على مجموعة البيانات، أو الاتصال بي، يرجى استخدام الرابط التالي: https://linktr.ee/nitotm