Ini adalah pustaka parsing dan deteksi bahasa Web untuk PHP. Perpustakaan ini membaca konten artikel dari halaman web, menghapus semua HTML dan menyediakan hanya teks mentah, cocok untuk teks untuk berbicara atau proses pembelajaran mesin.
Untuk proyek yang saya kembangkan, saya menemukan banyak solusi open source yang ada titik awal yang baik, tetapi masing -masing memiliki kegagalan unik. Perpustakaan ini mengumpulkan tiga pendekatan berbeda menjadi satu solusi sambil menambahkan fungsionalitas tambahan deteksi bahasa.
Perpustakaan ini didistribusikan melalui packagist.org, sehingga Anda dapat menggunakan komposer untuk mengambil ketergantungan
composer require crscheid/php-article-extractor
Perpustakaan ini akan mencoba mengambil HTML untuk Anda. Anda hanya perlu membuat kelas ArticterExtractor dan memanggil fungsi parseURL di atasnya, meneruskan URL yang diinginkan.
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 ); Fungsi processURL mengembalikan array yang berisi judul, teks, dan data meta yang terkait dengan permintaan. Jika teksnya null maka ini menunjukkan parsing yang gagal. Di bawah ini harus menjadi output dari kode di atas.
result_url bidang_url akan berbeda jika perpustakaan mengikuti pengalihan. Bidang ini mewakili halaman terakhir yang benar -benar diambil setelah pengalihan.
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"
}
Jika Anda sudah memiliki HTML, Anda dapat menggunakan fungsi parseHTML dan menggunakan HTML yang diproses melalui logika yang sama.
use Cscheide ArticleExtractor ArticleExtractor ;
$ extractor = new ArticleExtractor ();
$ myHTML = <load from some source>;
$ response = $ extractor -> processHTML ( $ myHTML );
var_dump ( $ response ); Fungsi parseHTML mengembalikan array yang berisi judul, teks, dan data meta yang terkait dengan permintaan. Jika teksnya null maka ini menunjukkan parsing yang gagal. Di bawah ini harus menjadi output dari kode di atas.
result_url bidang_url tidak akan dimasukkan dalam kasus ini karena kami tidak berusaha mendapatkan HTML selama panggilan proses.
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"
}
Anda juga dapat membuat kelas ArticleExtractor dengan meneruskan kunci untuk layanan deteksi bahasa serta string agen pengguna khusus. Lihat informasi lebih lanjut di bawah ini.
Deteksi bahasa ditangani oleh mencari penentu bahasa dalam data meta HTML atau dengan memanfaatkan layanan bahasa Deteksi.
Jika dimungkinkan untuk mendeteksi bahasa artikel, kode bahasa dalam format ISO 639-1 serta metode deteksi masing-masing dikembalikan dalam language dan language_method . Bidang language_method , jika berhasil ditemukan, dapat berupa html atau service .
Jika deteksi bahasa gagal atau tidak tersedia, kedua bidang ini akan dikembalikan sebagai nol.
Deteksi bahasa membutuhkan penggunaan kunci API yang dapat Anda daftarkan. Namun, Anda juga dapat menggunakan perpustakaan ini tanpa itu. Jika data meta HTML tidak berisi informasi tentang bahasa artikel, maka language dan language_method akan dikembalikan sebagai nilai nol.
Untuk memanfaatkan perpustakaan ini menggunakan layanan deteksi bahasa, buat objek ArticleExtractor dengan meneruskan kunci API Anda untuk mendeteksi bahasa.
use Cscheide ArticleExtractor ArticleExtractor ;
$ extractor = new ArticleExtractor ( ' your api key ' );Dimungkinkan untuk mengatur agen pengguna untuk permintaan keluar. Untuk melakukannya, berikan string agen pengguna yang diinginkan ke konstruktor sebagai berikut:
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 );Dimungkinkan untuk memaksa metode pembacaan dicoba, baik dengan keterbacaan, angsa, atau angsa dengan pemrosesan khusus kami. Ini bisa berguna di mana keterbacaan atau angsa memiliki masalah khusus dengan situs web tertentu.
Untuk memaksa metode, cukup berikan argumen ketiga kepada konstruktor seperti itu. Keempat metode yang valid adalah readability , goose , goosecustom , atau custom .
$ extractor = new ArticleExtractor ( null , null , " goose " );Pada versi 1.0, format output telah diubah untuk memberikan jeda baru untuk judul. Ini penting terutama untuk aplikasi pemrosesan bahasa alami dalam menentukan batas kalimat. Jika perilaku ini tidak diinginkan, cukup lepaskan Newline tambahan di mana diperlukan.
Perubahan ini dilakukan karena fakta bahwa ketika elemen header dan paragraf HTML hanya dilucuti, sering terjadi masalah di mana tidak ada pemisahan antara judul dan hukuman yang berjalan.
Contoh format output untuk bidang teks
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
Tes unit termasuk dalam distribusi ini dan dapat dijalankan menggunakan phPunit setelah memasang dependensi. Pendekatan yang disarankan adalah menggunakan Docker untuk tujuan ini, jadi Anda bahkan tidak perlu memiliki dependensi yang diinstal pada sistem Anda.
Catatan: Harap atur variabel lingkungan
DETECT_LANGUAGE_KEYdengan kunci bahasa Anda untuk deteksi bahasa dalam tes unit agar berfungsi dengan baik.
Ini akan menggunakan gambar Composer Docker untuk mengunduh persyaratan. Perhatikan penggunaan --ignore-platform-reqs karena beberapa dependensi kami belum mendukung PHP 8.
docker run --rm --interactive --tty --volume $PWD:/app composer --ignore-platform-reqs install
Ini menjalankan ketergantungan phPunit yang kami unduh dalam lingkungan baris perintah PHP 7.4.
docker run -v $(pwd):/app -w /app -e DETECT_LANGUAGE_KEY=<yourapikey> --rm php:7.4-cli ./vendor/phpunit/phpunit/phpunit