Esta es una biblioteca de análisis y detección de idiomas del artículo web para PHP. Esta biblioteca lee el contenido del artículo desde una página web, eliminando todo HTML y proporcionando solo el texto sin procesar, adecuado para los procesos de texto o aprendizaje automático.
Para un proyecto que he desarrollado, encontré muchas soluciones de código abierto existentes buenos puntos de partida, pero cada uno tuvo fallas únicas. Esta biblioteca agrega tres enfoques diferentes en una sola solución al tiempo que agrega la funcionalidad adicional de la detección del lenguaje.
Esta biblioteca se distribuye a través de Packagist.org, por lo que puede usar el compositor para recuperar la dependencia
composer require crscheid/php-article-extractor
Esta biblioteca intentará recuperar el HTML para usted. Simplemente necesita crear una clase de contratación de artículos y llamar a la función parseURL en ella, pasando la URL deseada.
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 función processURL devuelve una matriz que contiene el título, el texto y los meta datos asociados con la solicitud. Si el texto es null , esto indica un análisis fallido. A continuación debe haber la salida del código anterior.
El campo result_url será diferente si la biblioteca siguió redireccionadas. Este campo representa la página final realmente recuperada después de las redirecciones.
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 ya tiene HTML, puede usar la función parseHTML y usar su HTML procesado a través de la misma lógica.
use Cscheide ArticleExtractor ArticleExtractor ;
$ extractor = new ArticleExtractor ();
$ myHTML = <load from some source>;
$ response = $ extractor -> processHTML ( $ myHTML );
var_dump ( $ response ); La función parseHTML devuelve una matriz que contiene el título, el texto y los meta datos asociados con la solicitud. Si el texto es null , esto indica un análisis fallido. A continuación debe haber la salida del código anterior.
El campo result_url no se incluirá en este caso ya que no estamos intentando obtener el HTML durante la llamada del proceso.
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"
}
También puede crear la clase ArticleExtractor pasando una clave para el servicio de detección de idiomas, así como una cadena de agente de usuario personalizado. Vea más información a continuación.
La detección de idiomas se maneja buscando especificadores de lenguaje dentro de los meta datos HTML o utilizando el servicio de lenguaje de detección.
Si es posible detectar el lenguaje del artículo, el código de idioma en formato ISO 639-1, así como el método de detección, se devuelven en el language de los campos y language_method respectivamente. El campo language_method , si se encuentra con éxito, puede ser html o service .
Si la detección del idioma falla o no está disponible, ambos campos se devolverán como nulos.
Detect Language requiere el uso de una clave API que puede registrarse. Sin embargo, también puede usar esta biblioteca sin ella. Si los meta datos HTML no contienen información sobre el lenguaje del artículo, entonces language y language_method se devolverán como valores nulos.
Para utilizar esta biblioteca utilizando el servicio de detección de idiomas, cree el objeto ArticleExtractor pasando su clave API para detectar el lenguaje.
use Cscheide ArticleExtractor ArticleExtractor ;
$ extractor = new ArticleExtractor ( ' your api key ' );Es posible establecer el agente de usuario para las solicitudes salientes. Para hacerlo, pase la cadena de agente de usuario deseada al constructor de la siguiente manera:
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 posible forzar el método por el cual se intenta la lectura, ya sea con legibilidad, ganso o ganso con nuestro procesamiento personalizado. Esto puede ser útil donde la legibilidad o el ganso tienen problemas particulares con sitios web particulares.
Para forzar el método, simplemente proporcione un tercer argumento al constructor como tal. Los cuatro métodos válidos son readability , goose , goosecustom o custom .
$ extractor = new ArticleExtractor ( null , null , " goose " );A partir de la versión 1.0, el formato de salida se ha alterado para proporcionar descansos de nueva línea para encabezados. Esto es importante, especialmente para las aplicaciones de procesamiento del lenguaje natural para determinar los límites de las oraciones. Si no se desea este comportamiento, simplemente elimine las nuevas líneas adicionales donde sea necesario.
Este cambio se hizo debido al hecho de que cuando los elementos HTML de encabezado y párrafo simplemente se despojan simplemente, a menudo ocurre problemas en los que no hay separación entre el encabezado y la oración que se realiza.
Ejemplo de formato de salida para el campo de texto
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
Las pruebas unitarias se incluyen en esta distribución y se pueden ejecutar utilizando PHPUNIT después de instalar dependencias. El enfoque recomendado es usar Docker para este propósito, por lo que ni siquiera necesita tener dependencias instaladas en su sistema.
Nota: Establezca la variable de entorno
DETECT_LANGUAGE_KEYcon su clave de detección de lenguaje para que la detección de idiomas en las pruebas unitarias funcione correctamente.
Esto utilizará la imagen de compositor Docker para descargar los requisitos. Tenga en cuenta el uso de los --ignore-platform-reqs ya que algunas de nuestras dependencias aún no admiten PHP 8.
docker run --rm --interactive --tty --volume $PWD:/app composer --ignore-platform-reqs install
Esto ejecuta la dependencia de PhPunit que descargamos dentro del entorno de línea de comandos PHP 7.4.
docker run -v $(pwd):/app -w /app -e DETECT_LANGUAGE_KEY=<yourapikey> --rm php:7.4-cli ./vendor/phpunit/phpunit/phpunit