Esta é uma biblioteca de analisamento e detecção de idiomas da Web para PHP. Esta biblioteca lê o conteúdo do artigo de uma página da web, removendo todo o HTML e fornecendo apenas o texto bruto, adequado para texto para processos de fala ou aprendizado de máquina.
Para um projeto que desenvolvi, encontrei muitas soluções de código aberto existentes bons pontos de partida, mas cada um teve falhas únicas. Esta biblioteca agrega três abordagens diferentes em uma única solução ao adicionar a funcionalidade adicional da detecção de linguagem.
Esta biblioteca é distribuída via packagist.org, para que você possa usar o Composer para recuperar a dependência
composer require crscheid/php-article-extractor
Esta biblioteca tentará recuperar o HTML para você. Você precisa simplesmente criar uma classe Articlextractor e chamar a função parseURL nela, passando no URL desejado.
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 ); O processURL da função retorna uma matriz que contém o título, o texto e os meta -dados associados à solicitação. Se o texto for null , isso indica uma falha na análise. Abaixo deve estar a saída do código acima.
O campo result_url será diferente se a biblioteca seguir os redirecionamentos. Este campo representa a página final recuperada após o redirecionamento.
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"
}
Se você já possui HTML, pode usar a função parseHTML e usar seu HTML processado pela mesma lógica.
use Cscheide ArticleExtractor ArticleExtractor ;
$ extractor = new ArticleExtractor ();
$ myHTML = <load from some source>;
$ response = $ extractor -> processHTML ( $ myHTML );
var_dump ( $ response ); A função parseHTML retorna uma matriz contendo o título, texto e meta dados associados à solicitação. Se o texto for null , isso indica uma falha na análise. Abaixo deve estar a saída do código acima.
O campo result_url não será incluído neste caso, pois não estamos tentando obter o HTML durante a chamada do processo.
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"
}
Você também pode criar a classe ArticleExtractor , passando uma chave para o serviço de detecção de idiomas, bem como uma string de agente de usuário personalizada. Veja mais informações abaixo.
A detecção de idiomas é tratada procurando especificadores de idiomas dentro dos meta dados HTML ou utilizando o Serviço de Idiomas Detect.
Se for possível detectar o idioma do artigo, o código do idioma no formato ISO 639-1, bem como o método de detecção, será retornado na language Fields e language_method respectivamente. O campo language_method , se encontrado com sucesso, pode ser html ou service .
Se a detecção do idioma falhar ou não estiver disponível, esses dois campos serão devolvidos como nulos.
A linguagem de detecção requer o uso de uma chave da API para a qual você pode se inscrever. No entanto, você também pode usar esta biblioteca sem ela. Se os meta -dados HTML não contiverem informações sobre o idioma do artigo, language e language_method serão retornados como valores nulos.
Para utilizar esta biblioteca utilizando o Serviço de Detecção de Idiomas, crie o objeto ArticleExtractor , passando sua chave da API para detectar linguagem.
use Cscheide ArticleExtractor ArticleExtractor ;
$ extractor = new ArticleExtractor ( ' your api key ' );É possível definir o agente do usuário para solicitações de saída. Para fazer isso, passe a sequência de agente do usuário desejada para o construtor da seguinte maneira:
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 );É possível forçar o método pelo qual a leitura é tentada, seja com legibilidade, ganso ou ganso com nosso processamento personalizado. Isso pode ser útil onde a legibilidade ou o ganso têm problemas específicos com sites específicos.
Para forçar o método, basta fornecer um terceiro argumento ao construtor como tal. Os quatro métodos válidos são readability , goose , goosecustom ou custom .
$ extractor = new ArticleExtractor ( null , null , " goose " );A partir da versão 1.0, o formato de saída foi alterado para fornecer novas quebras para títulos. Isso é importante especialmente para aplicações de processamento de linguagem natural na determinação dos limites das frases. Se esse comportamento não for desejado, basta retirar as linhas adicionais quando necessário.
Essa alteração foi feita devido ao fato de que, quando os elementos HTML de cabeçalho e parágrafo são simplesmente despojados, muitas vezes ocorre problemas em que não há separação entre o cabeçalho e a sentença de processo.
Exemplo de formato de saída para 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
Os testes de unidade estão incluídos nesta distribuição e podem ser executados utilizando phpunit após a instalação de dependências. A abordagem recomendada é usar o Docker para esse fim; portanto, você nem precisa ter dependências instaladas no seu sistema.
NOTA: Defina a variável de ambiente
DETECT_LANGUAGE_KEYcom a chave de linguagem de detecção para que a detecção de idiomas nos testes de unidade funcione corretamente.
Isso usará a imagem do Docker do Compositor para baixar os requisitos. Observe o uso do --ignore-platform-reqs pois algumas de nossas dependências ainda não suportam o PHP 8.
docker run --rm --interactive --tty --volume $PWD:/app composer --ignore-platform-reqs install
Isso executa a dependência do Phpunit que baixamos no ambiente da linha de comando PHP 7.4.
docker run -v $(pwd):/app -w /app -e DETECT_LANGUAGE_KEY=<yourapikey> --rm php:7.4-cli ./vendor/phpunit/phpunit/phpunit