Это веб -библиотека разбора и обнаружения языка для PHP. Эта библиотека считывает содержимое статьи с веб -страницы, удаляя все HTML и предоставляя только необработанный текст, подходящий для процессов текста или машинного обучения.
Для проекта, который я разработал, я нашел много существующих решений с открытым исходным кодом, но у каждого были уникальные сбои. Эта библиотека объединяет три разных подхода в одно решение, добавляя дополнительную функциональность обнаружения языка.
Эта библиотека распространяется через packagist.org, поэтому вы можете использовать композитор для получения зависимости
composer require crscheid/php-article-extractor
Эта библиотека попытается получить HTML для вас. Вам нужно просто создать класс статьи Extractor и вызвать на него функцию parseURL , передавая желаемое URL -адрес.
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 ); Функциональный processURL возвращает массив, содержащий заголовок, текст и метаданные, связанные с запросом. Если текст null , это указывает на неудачный анализ. Ниже должен быть вывод вышеуказанного кода.
Поле result_url будет отличаться, если библиотека следовала перенаправлениям. Это поле представляет собой последнюю страницу, фактически полученную после перенаправления.
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"
}
Если у вас уже есть HTML, вы можете использовать функцию parseHTML и использовать HTML, обрабатываемую с помощью той же логики.
use Cscheide ArticleExtractor ArticleExtractor ;
$ extractor = new ArticleExtractor ();
$ myHTML = <load from some source>;
$ response = $ extractor -> processHTML ( $ myHTML );
var_dump ( $ response ); Функция parseHTML возвращает массив, содержащий заголовок, текст и метаданные, связанные с запросом. Если текст null , это указывает на неудачный анализ. Ниже должен быть вывод вышеуказанного кода.
Поле result_url не будет включена в этот случай, поскольку мы не пытаемся получить HTML во время процесса вызова.
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"
}
Вы также можете создать класс ArticleExtractor , передавая ключ для службы обнаружения языка, а также пользовательскую строку пользователя-агента. Смотрите больше информации ниже.
Обнаружение языка обрабатывается либо поиском языковых спецификаторов в метаданах HTML, либо путем использования языковой службы обнаружения.
Если можно обнаружить язык статьи, языковой код в формате ISO 639-1, а также в методе обнаружения возвращаются на language полей и языке и language_method соответственно. Поле language_method , если их успешно, может быть html или service .
Если обнаружение языка не удается или не доступно, обе эти поля будут возвращены как нулевые.
Обнаружение языка требует использования ключа API, на который вы можете подписаться. Тем не менее, вы также можете использовать эту библиотеку без нее. Если метаданные HTML не содержат информации о языке статьи, то language и язык и language_method будут возвращены в виде нулевых значений.
Чтобы использовать эту библиотеку, используя службу обнаружения языка, создайте объект ArticleExtractor , передав свой ключ API для обнаружения языка.
use Cscheide ArticleExtractor ArticleExtractor ;
$ extractor = new ArticleExtractor ( ' your api key ' );Можно установить пользовательский агент для исходящих запросов. Для этого передайте желаемую строку агента пользователя в конструктор следующим образом:
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 );Можно заставить метод, с помощью которого предпринимается попытка чтения, либо с читаемости, гусями или гусями с нашей пользовательской обработкой. Это может пригодиться, где у читаемости или гуся есть особые проблемы с конкретными веб -сайтами.
Чтобы заставить метод, просто предоставьте третий аргумент конструктору как такому. Четыре достоверных метода - readability , goose , goosecustom или custom .
$ extractor = new ArticleExtractor ( null , null , " goose " );По состоянию на версию 1.0 выходной формат был изменен, чтобы обеспечить новую линию для заголовков. Это особенно важно для приложений обработки естественного языка при определении границ предложений. Если это поведение не желательно, просто разбейте дополнительные новеньши, где это необходимо.
Это изменение было внесено из -за того, что когда заголовок и абзац HTML -элементы просто разряжаются, часто возникают проблемы, когда между заголовком и ходом предложения нет разделения.
Пример выходного формата для текстового поля
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
Модульные тесты включены в это распределение и могут запускаться с использованием PhpUnit после установки зависимостей. Рекомендуемый подход заключается в использовании Docker для этой цели, поэтому вам даже не нужно, чтобы в вашей системе были установлены зависимости.
Примечание. Установите переменную среды
DETECT_LANGUAGE_KEYс вашим языковым ключом для обнаружения, чтобы обнаружение языка в модульных тестах для правильной работы.
Это будет использовать изображение композитора Docker для загрузки требований. Обратите внимание на использование req --ignore-platform-reqs поскольку некоторые из наших зависимостей еще не поддерживают PHP 8.
docker run --rm --interactive --tty --volume $PWD:/app composer --ignore-platform-reqs install
Это запускает зависимость Phpunit, которую мы загружали в среде командной строки PHP 7.4.
docker run -v $(pwd):/app -w /app -e DETECT_LANGUAGE_KEY=<yourapikey> --rm php:7.4-cli ./vendor/phpunit/phpunit/phpunit