Dies ist ein Webartikel -Parsing- und Spracherkennungsbibliothek für PHP. Diese Bibliothek liest den Artikelinhalt auf einer Webseite, entfernen alle HTML und liefert nur den RAW -Text, der für Text für Sprach- oder maschinelle Lernprozesse geeignet ist.
Für ein Projekt, das ich entwickelt habe, fand ich viele vorhandene Open -Source -Lösungen gute Ausgangspunkte, aber jeder hatte einzigartige Misserfolge. Diese Bibliothek aggregiert drei verschiedene Ansätze in eine einzige Lösung, während die zusätzliche Funktionalität der Spracherkennung hinzugefügt wird.
Diese Bibliothek wird über packagist.org verteilt, sodass Sie den Komponisten verwenden können, um die Abhängigkeit abzurufen
composer require crscheid/php-article-extractor
Diese Bibliothek wird versuchen, die HTML für Sie abzurufen. Sie müssen lediglich eine ArticleExtractor -Klasse erstellen und die parseURL -Funktion darauf aufrufen und die gewünschte URL übergeben.
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 ); Der processURL gibt ein Array zurück, das den mit der Anforderung zugeordneten Titel-, Text- und Meta -Daten enthält. Wenn der Text null ist, zeigt dies eine fehlgeschlagene Parsen an. Unten sollte die Ausgabe des obigen Codes sein.
Das Feld result_url ist unterschiedlich, wenn die Bibliothek umgeleitet wurde. Dieses Feld repräsentiert die endgültige Seite, die nach Ausleitungen tatsächlich abgerufen wurde.
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"
}
Wenn Sie bereits über HTML verfügen, können Sie die parseHTML -Funktion verwenden und Ihre HTML über dieselbe Logik verarbeitet.
use Cscheide ArticleExtractor ArticleExtractor ;
$ extractor = new ArticleExtractor ();
$ myHTML = <load from some source>;
$ response = $ extractor -> processHTML ( $ myHTML );
var_dump ( $ response ); Die Funktion parseHTML gibt ein Array zurück, das den mit der Anforderung zugeordneten Titel-, Text- und Meta -Daten enthält. Wenn der Text null ist, zeigt dies eine fehlgeschlagene Parsen an. Unten sollte die Ausgabe des obigen Codes sein.
Das Feld result_url wird in diesem Fall nicht aufgenommen, da wir während des Prozessaufrufs nicht versuchen, die HTML zu erhalten.
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"
}
Sie können auch die ArticleExtractor -Klasse erstellen, indem Sie einen Schlüssel für den Spracherkennungsdienst sowie eine benutzerdefinierte Nutzer-Agent-Zeichenfolge übergeben. Weitere Informationen finden Sie weiter unten.
Die Spracherkennung wird behandelt, indem entweder Sprachspezifizierer innerhalb der HTML -Meta -Daten oder die Verwendung des Erkennungssprachdienstes gesucht werden.
Wenn es möglich ist, die Sprache des Artikels zu erkennen, wird der Sprachcode im ISO 639-1-Format sowie die Erkennungsmethode in der Fields language bzw. language_method zurückgegeben. Das Feld language_method kann, falls erfolgreich gefunden wird, entweder html oder service .
Wenn die Spracherkennung fehlschlägt oder nicht verfügbar ist, werden beide Felder als Null zurückgegeben.
Erkennende Sprache erfordert die Verwendung eines API -Schlüssels, für den Sie sich anmelden können. Sie können diese Bibliothek jedoch auch ohne sie verwenden. Wenn die HTML -Meta -Daten keine Informationen über die Sprache des Artikels enthalten, werden language und language_method als Nullwerte zurückgegeben.
Um diese Bibliothek mithilfe des Spracherkennungsdienstes zu verwenden, erstellen Sie das ArticleExtractor -Objekt, indem Sie Ihren API -Schlüssel zur Erkennung von Sprache übergeben.
use Cscheide ArticleExtractor ArticleExtractor ;
$ extractor = new ArticleExtractor ( ' your api key ' );Es ist möglich, den Benutzer-Agent für ausgehende Anfragen festzulegen. Geben Sie dazu den gewünschten Benutzeragentenzeichenfolge wie folgt an den Konstruktor weiter:
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 );Es ist möglich, die Methode zu erzwingen, mit der das Lesen versucht wird, entweder mit Lesbarkeit, Gans oder Gans mit unserer benutzerdefinierten Verarbeitung. Dies kann nützlich sein, wenn Lesbarkeit oder Gans bestimmte Probleme mit bestimmten Websites aufweisen.
Um die Methode zu erzwingen, liefern Sie dem Konstruktor als solcher einfach ein drittes Argument. Die vier gültigen Methoden sind readability , goose , goosecustom oder custom .
$ extractor = new ArticleExtractor ( null , null , " goose " );Ab Version 1.0 wurde das Ausgangsformat geändert, um neue Pausen für Überschriften bereitzustellen. Dies ist insbesondere für Anwendungen für natürliche Sprachverarbeitung bei der Bestimmung von Satzgrenzen wichtig. Wenn dieses Verhalten nicht erwünscht ist, streichen Sie einfach die zusätzlichen Neulisten bei Bedarf aus.
Diese Änderung wurde aufgrund der Tatsache vorgenommen, dass bei einfachem Kopf- und Absatz -HTML -Elementen häufig Probleme auftreten, bei denen keine Trennung zwischen der Überschrift und dem Verfahrenssatz besteht.
Beispiel für das Ausgangsformat für das Textfeld
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
Unit -Tests sind in dieser Verteilung enthalten und können nach der Installation von Abhängigkeiten mit Phpunit ausgeführt werden. Der empfohlene Ansatz besteht darin, Docker für diesen Zweck zu verwenden, sodass Sie nicht einmal Abhängigkeiten auf Ihr System installieren müssen.
HINWEIS: Bitte setzen Sie die Umgebungsvariable
DETECT_LANGUAGE_KEYmit Ihrem Erkennungssprachschlüssel ein, damit die Spracherkennung in Unit -Tests ordnungsgemäß funktioniert.
Dadurch wird das Composer Docker -Bild verwendet, um die Anforderungen herunterzuladen. Beachten Sie die Verwendung der --ignore-platform-reqs da einige unserer Abhängigkeiten Php 8 noch nicht unterstützen.
docker run --rm --interactive --tty --volume $PWD:/app composer --ignore-platform-reqs install
Dies führt die Phpunit -Abhängigkeit aus, die wir in der Befehlszeilenumgebung von PHP 7.4 heruntergeladen haben.
docker run -v $(pwd):/app -w /app -e DETECT_LANGUAGE_KEY=<yourapikey> --rm php:7.4-cli ./vendor/phpunit/phpunit/phpunit