นี่คือการแยกวิเคราะห์บทความเว็บและไลบรารีการตรวจจับภาษาสำหรับ PHP ไลบรารีนี้อ่านเนื้อหาบทความจากหน้าเว็บลบ HTML ทั้งหมดและให้เพียงข้อความดิบเหมาะสำหรับการพูดถึงการพูดหรือกระบวนการเรียนรู้ของเครื่อง
สำหรับโครงการที่ฉันพัฒนาขึ้นฉันพบโซลูชันโอเพ่นซอร์สที่มีอยู่มากมายจุดเริ่มต้นที่ดี แต่แต่ละคนมีความล้มเหลวที่ไม่ซ้ำกัน ห้องสมุดนี้รวมสามวิธีที่แตกต่างกันลงในโซลูชันเดียวในขณะที่เพิ่มฟังก์ชั่นเพิ่มเติมของการตรวจจับภาษา
ไลบรารีนี้มีการกระจายผ่าน packagist.org ดังนั้นคุณสามารถใช้นักแต่งเพลงเพื่อดึงการพึ่งพา
composer require crscheid/php-article-extractor
ห้องสมุดนี้จะพยายามดึง HTML ให้คุณ คุณต้องการเพียงแค่สร้างคลาส articlextractor และเรียกใช้ฟังก์ชัน 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 จะถูกส่งกลับเป็นค่า NULL
ในการใช้ห้องสมุดนี้โดยใช้บริการตรวจจับภาษาให้สร้างวัตถุ 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 เพื่อดาวน์โหลดข้อกำหนด หมายเหตุการใช้ --ignore-platform-reqs เนื่องจากการพึ่งพาบางส่วนของเรายังไม่รองรับ PHP 8
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