هذه هي مكتبة تحليل ويب واكتشاف اللغة لـ PHP. تقرأ هذه المكتبة محتوى المقالة من صفحة ويب ، وإزالة جميع HTML وتوفير النص الخام فقط ، وهو مناسب للنص على عمليات التعلم في الكلام أو الآلي.
بالنسبة لمشروع قمت بتطويره ، وجدت العديد من حلول Open Source Solutions الموجودة ، لكن كل منها كان لديه إخفاقات فريدة. تقوم هذه المكتبة بتجميع ثلاثة أساليب مختلفة في حل واحد مع إضافة وظيفة إضافية للكشف عن اللغة.
يتم توزيع هذه المكتبة عبر packagist.org ، بحيث يمكنك استخدام الملحن لاسترداد التبعية
composer require crscheid/php-article-extractor
ستحاول هذه المكتبة استرداد HTML لك. تحتاج ببساطة إلى إنشاء فئة مقاول articlextor والاتصال بوظيفة parseURL عليها ، مرارًا في عنوان URL المطلوب.
use Cscheide ArticleExtractor ArticleExtractor ;
$ extractor = new ArticleExtractor ();
$ response = $ extractor -> processURL ( " https://www.fastcompany.com/3067246/innovation-agents/the-unexpected-design-challenge-behind-slacks-new-threaded-conversations " );
var_dump ( $ response ); تقوم processURL بإرجاع صفيف يحتوي على بيانات العنوان والنص والوصول المرتبط بالطلب. إذا كان النص null فهذا يشير إلى فشل التحليل. أدناه يجب أن يكون إخراج الرمز أعلاه.
سيكون الحقل result_url مختلفًا إذا اتبعت المكتبة إعادة التوجيه. يمثل هذا الحقل الصفحة النهائية التي تم استردادها بالفعل بعد إعادة التوجيه.
array(5) {
["parse_method"]=>
string(11) "readability"
["title"]=>
string(72) "The Unexpected Design Challenge Behind Slack’s New Threaded Conversations"
["text"]=>
string(8013) "At first blush, threaded conversations sound like one of the most thoroughly mundane features a messaging app could introduce.After all, the idea of neatly bundling up a specific message and its replies in ..."
["language_method"]=>
string(7) "service"
["language"]=>
string(2) "en"
["result_url"]=>
string(126) "https://www.fastcompany.com/3067246/innovation-agents/the-unexpected-design-challenge-behind-slacks-new-threaded-conversations"
}
إذا كان لديك بالفعل HTML ، فيمكنك استخدام وظيفة parseHTML واستخدام HTML الخاص بك معالجتها من خلال نفس المنطق.
use Cscheide ArticleExtractor ArticleExtractor ;
$ extractor = new ArticleExtractor ();
$ myHTML = <load from some source>;
$ response = $ extractor -> processHTML ( $ myHTML );
var_dump ( $ response ); تُرجع الدالة parseHTML صفيفًا يحتوي على بيانات العنوان والنص والواصف المرتبط بالطلب. إذا كان النص null فهذا يشير إلى فشل التحليل. أدناه يجب أن يكون إخراج الرمز أعلاه.
لن يتم تضمين الحقل result_url في هذه الحالة لأننا لا نحاول الحصول على HTML أثناء مكالمة العملية.
array(5) {
["parse_method"]=>
string(11) "readability"
["title"]=>
string(72) "The Unexpected Design Challenge Behind Slack’s New Threaded Conversations"
["text"]=>
string(8013) "At first blush, threaded conversations sound like one of the most thoroughly mundane features a messaging app could introduce.After all, the idea of neatly bundling up a specific message and its replies in ..."
["language_method"]=>
string(7) "service"
["language"]=>
string(2) "en"
}
يمكنك أيضًا إنشاء فئة ArticleExtractor من خلال تمرير مفتاح لخدمة الكشف عن اللغة بالإضافة إلى سلسلة وكيل المستخدم المخصصة. انظر المزيد من المعلومات أدناه.
تتم معالجة الكشف عن اللغة إما عن طريق البحث عن محددات اللغة داخل بيانات META HTML أو عن طريق استخدام خدمة لغة الكشف.
إذا كان من الممكن اكتشاف لغة المقالة ، يتم إرجاع رمز اللغة بتنسيق ISO 639-1 وكذلك طريقة الكشف في مجال language و language_method على التوالي. قد يكون حقل language_method ، إذا تم العثور عليه بنجاح ، html أو service .
إذا فشل الكشف عن اللغة أو غير متوفر ، فسيتم إرجاع كلا الحقولين كخار.
يتطلب اكتشاف اللغة استخدام مفتاح API الذي يمكنك التسجيل فيه. ومع ذلك ، يمكنك أيضًا استخدام هذه المكتبة بدونها. إذا كانت بيانات META HTML لا تحتوي على معلومات حول لغة المقالة ، فسيتم إرجاع language واللغة language_method كقيم خالية.
للاستفادة من هذه المكتبة باستخدام خدمة الكشف عن اللغة ، قم بإنشاء كائن ArticleExtractor عن طريق تمرير مفتاح API الخاص بك للكشف عن اللغة.
use Cscheide ArticleExtractor ArticleExtractor ;
$ extractor = new ArticleExtractor ( ' your api key ' );من الممكن تعيين وكيل المستخدم للطلبات الصادرة. للقيام بذلك ، تمرير سلسلة وكيل المستخدم المطلوبة إلى المُنشئ على النحو التالي:
use Cscheide ArticleExtractor ArticleExtractor ;
$ myUserAgent = " Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36 " ;
$ extractor = new ArticleExtractor ( null , $ myUserAgent );من الممكن إجبار الطريقة التي تتم بها محاولة القراءة ، إما مع قابلية القراءة أو أوزة أو أوزة مع معالجتنا المخصصة. يمكن أن يكون هذا مفيدًا حيث يكون لدى القراءة أو أوزة مشكلات معينة مع مواقع ويب معينة.
لفرض هذه الطريقة ، ما عليك سوى تقديم وسيطة ثالثة للمُنشئ على هذا النحو. الأساليب الأربعة الصالحة هي readability أو goose أو goosecustom أو custom .
$ extractor = new ArticleExtractor ( null , null , " goose " );اعتبارًا من الإصدار 1.0 ، تم تغيير تنسيق الإخراج لتوفير فترات راحة جديدة للعناوين. هذا مهم خاصة بالنسبة لتطبيقات معالجة اللغة الطبيعية في تحديد حدود الجملة. إذا لم يكن هذا السلوك مطلوبًا ، فما عليك سوى تجريد الخطوط الجديدة عند الحاجة.
تم إجراء هذا التغيير بسبب حقيقة أنه عندما يتم تجريد عناصر HTML من الرأس والفقرة ببساطة ، غالبًا ما تحدث مشكلات لا يوجد فيها فصل بين العنوان والجملة المتواصلة.
مثال على تنسيق الإخراج لحقل النص
n
A database containing 250 million Microsoft customer records has been found unsecured and onlinen
NurPhoto via Getty Imagesn
A new report reveals that 250 million Microsoft customer records, spanning 14 years, have been exposed online without password protection.n
Microsoft has been in the news for, mostly, the wrong reasons recently. There is the Internet Explorer zero-day vulnerability that Microsoft hasn't issued a patch for, despite it being actively exploited. That came just days after the U.S. Government issued a critical Windows 10 update now alert concerning the "extraordinarily serious" curveball crypto vulnerability. Now a newly published report, has revealed that 250 million Microsoft customer records, spanning an incredible 14 years in all, have been exposed online in a database with no password protection.n
What Microsoft customer records were exposed online, and where did they come from?n
يتم تضمين اختبارات الوحدة في هذا التوزيع ويمكن تشغيله باستخدام phpunit بعد تثبيت التبعيات. النهج الموصى به هو استخدام Docker لهذا الغرض ، لذلك لا تحتاج حتى إلى تثبيت تبعيات على نظامك.
ملاحظة: يرجى تعيين متغير البيئة
DETECT_LANGUAGE_KEYمع مفتاح لغة الكشف عن الكشف عن اللغة في اختبارات الوحدة للعمل بشكل صحيح.
سيستخدم هذا صورة Docker Composer لتنزيل المتطلبات. لاحظ استخدام- --ignore-platform-reqs لأن بعض تبعياتنا لا يدعم بعد 8 php.
docker run --rm --interactive --tty --volume $PWD:/app composer --ignore-platform-reqs install
هذا يدير التبعية phpunit التي قمنا بتنزيلها ضمن بيئة سطر الأوامر PHP 7.4.
docker run -v $(pwd):/app -w /app -e DETECT_LANGUAGE_KEY=<yourapikey> --rm php:7.4-cli ./vendor/phpunit/phpunit/phpunit