Il s'agit d'une bibliothèque d'analyse Web et de détection de langue pour PHP. Cette bibliothèque lit le contenu de l'article à partir d'une page Web, en supprimant tout le HTML et en fournissant le texte brut, adapté aux processus de texte ou d'apprentissage automatique.
Pour un projet que j'ai développé, j'ai trouvé de nombreuses solutions open source existantes de bons points de départ, mais chacun a eu des échecs uniques. Cette bibliothèque agrége trois approches différentes en une seule solution tout en ajoutant les fonctionnalités supplémentaires de la détection du langage.
Cette bibliothèque est distribuée via packagist.org, vous pouvez donc utiliser le compositeur pour récupérer la dépendance
composer require crscheid/php-article-extractor
Cette bibliothèque tentera de récupérer le HTML pour vous. Vous devez simplement créer une classe Articlextractor et appeler la fonction parseURL dessus, en passant dans l'URL souhaitée.
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 ); La fonction processURL renvoie un tableau contenant le titre, le texte et les méta-données associés à la demande. Si le texte est null , cela indique un analyse ratée. Ci-dessous devrait être la sortie du code ci-dessus.
Le champ result_url sera différent si la bibliothèque a suivi les redirections. Ce champ représente la page finale réalisée après les redirections.
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"
}
Si vous avez déjà HTML, vous pouvez utiliser la fonction parseHTML et utiliser votre HTML traité via la même logique.
use Cscheide ArticleExtractor ArticleExtractor ;
$ extractor = new ArticleExtractor ();
$ myHTML = <load from some source>;
$ response = $ extractor -> processHTML ( $ myHTML );
var_dump ( $ response ); La fonction parseHTML renvoie un tableau contenant le titre, le texte et les méta-données associés à la demande. Si le texte est null , cela indique un analyse ratée. Ci-dessous devrait être la sortie du code ci-dessus.
Le champ result_url ne sera pas inclus dans ce cas car nous n'essayons pas d'obtenir le HTML pendant l'appel de processus.
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"
}
Vous pouvez également créer la classe ArticleExtractor en transmettant une clé pour le service de détection de langue ainsi qu'une chaîne d'agent utilisateur personnalisé. Voir plus d'informations ci-dessous.
La détection du langage est gérée en recherchant des spécificateurs de langue dans les méta-données HTML ou en utilisant le service de langue de détection.
S'il est possible de détecter la langue de l'article, le code linguistique au format ISO 639-1 ainsi que la méthode de détection sont renvoyés respectivement dans les champs language et language_method . Le champ language_method , s'il est trouvé avec succès, peut être html ou service .
Si la détection du langage échoue ou n'est pas disponible, ces deux champs seront renvoyés comme nuls.
Détection Le langage nécessite l'utilisation d'une clé API pour laquelle vous pouvez vous inscrire. Cependant, vous pouvez également utiliser cette bibliothèque sans lui. Si les métadonnées HTML ne contiennent pas d'informations sur la langue de l'article, language et language_method seront renvoyés sous forme de valeurs nulles.
Pour utiliser cette bibliothèque en utilisant le service de détection de langue, créez l'objet ArticleExtractor en transmettant votre clé API pour détecter le langage.
use Cscheide ArticleExtractor ArticleExtractor ;
$ extractor = new ArticleExtractor ( ' your api key ' );Il est possible de définir l'agent utilisateur pour les demandes sortantes. Pour ce faire passer la chaîne d'agent utilisateur souhaité au constructeur comme suit:
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 );Il est possible de forcer la méthode par laquelle la lecture est tentée, soit avec lisibilité, oie ou oie avec notre traitement personnalisé. Cela peut être utile où la lisibilité ou l'oie ont des problèmes particuliers avec des sites Web particuliers.
Pour forcer la méthode, fournissez simplement un troisième argument au constructeur en tant que tel. Les quatre méthodes valides sont readability , goose , goosecustom ou custom .
$ extractor = new ArticleExtractor ( null , null , " goose " );À partir de la version 1.0, le format de sortie a été modifié pour fournir des pauses nouvelles pour les titres. Ceci est important en particulier pour les applications de traitement du langage naturel pour déterminer les limites des phrases. Si ce comportement n'est pas souhaité, supprimez simplement les nouvelles lignes supplémentaires si nécessaire.
Ce changement a été apporté du fait que lorsque les éléments de tête et de paragraphe HTML sont simplement supprimés, il y a souvent des questions en cas de séparation entre la rubrique et la phrase de procédure.
Exemple de format de sortie pour le champ de texte
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
Les tests unitaires sont inclus dans cette distribution et peuvent être exécutés en utilisant le phpunit après l'installation des dépendances. L'approche recommandée consiste à utiliser Docker à cet effet, vous n'avez donc même pas besoin de faire installer les dépendances sur votre système.
Remarque: veuillez définir la variable d'environnement
DETECT_LANGUAGE_KEYavec votre clé de langue de détection afin que la détection de la langue dans les tests unitaires fonctionne correctement.
Cela utilisera l'image Docker Composer pour télécharger les exigences. Remarquez l'utilisation des --ignore-platform-reqs car certaines de nos dépendances ne prennent pas encore en charge PHP 8.
docker run --rm --interactive --tty --volume $PWD:/app composer --ignore-platform-reqs install
Cela exécute la dépendance PHPUnit que nous avons téléchargée dans l'environnement de ligne de commande PHP 7.4.
docker run -v $(pwd):/app -w /app -e DETECT_LANGUAGE_KEY=<yourapikey> --rm php:7.4-cli ./vendor/phpunit/phpunit/phpunit