Анализ неструктурированных данных теперь является повседневным явлением в корпоративных средах. Эти данные могут быть расположены в любом количестве сред, но обычно такие данные находятся на веб-сайтах. Как правило, пользователь должен проанализировать весь веб-сайт в поисках той части, о которой он хочет узнать больше. В этом посте я расскажу, как анализировать только выбранную часть веб-сайта.

Анализ образца текста

В нашем первом сценарии мы проанализируем образец текста, предоставленный непосредственно в качестве входных данных. Для этого замените ключ API и URL-адрес службы своими учетными данными службы API. Учетные данные службы можно найти на странице экземпляра IBM Cloud вашего приложения. В моем случае URL-адрес https://api.us-south.natural-language-understanding.watson.cloud.ibm.com/instances/*********/v1/analyze? версия=2018-09-21

Ниже показаны ввод и вывод транзакции.

Ввод

Здесь мы извлекаем объекты только для демонстрационной точки зрения, поэтому во входных данных объект упоминается как часть извлечения признаков. Мы можем указать sentiment, categories, concepts, keywords similar to entities.Мы передаем текст как прямой ввод.

curl -u “apikey”:”YOUR_API_KEY” \
— header “Content-Type: application/json” \
— data ‘{
“text”: “I am working for IBM at Bangalore”,
“features”: {
“entities”: {
}
}
}’ \
https://api.us-south.natural-language-understanding.watson.cloud.ibm.com/instances/*********/v1/analyze?version=2018-09-21

Вывод

Выходные данные показывают объекты, извлеченные из текста, как и ожидалось: IBM как объект Company и Bangalore как объект Location. Предварительно обученная модель NLU по умолчанию может извлекать стандартный набор сущностей. Стандартный набор сущностей указан здесь. Примечание: мы запросили извлечение сущностей во входных данных, поэтому извлекаются только сущности.

{
"usage": {
"text_units": 1,
"text_characters": 33,
"features": 1
},
"language": "en",
"entities": [
{
"type": "Company",
"text": "IBM",
"relevance": 0.33,
"count": 1
},
{
"type": "Location",
"text": "Bangalore",
………..
…………..

Как видите, мы можем извлечь важную информацию в виде сущностей из приведенного образца текста. Точно так же мы будем анализировать данные с веб-сайта и извлекать информацию.

Сканирование веб-сайта

В приведенном выше примере речь шла о прямом и простом отправке текста в API Watson NLU. Тот же API можно использовать для анализа содержимого веб-сайта. Мы создадим файл JSON для определения параметров и ссылки на этот файл JSON при вводе данных в команде cURL. Обратите внимание: я указал понятия, объекты и ключевые слова для извлечения из содержимого веб-сайта.

параметры-5-url.json

{
"url": "https://www.mohfw.gov.in/",
"features": {
"concepts": {},
"entities":{},
"keywords":{}
},
"return_analyzed_text": true
}

Команда "Свернуть"

curl --user "apikey:YOUR_API_KEY" \
"https://api.us-south.natural-language-understanding.watson.cloud.ibm.com/instances/*********/v1/analyze?version=2018-09-21" \
--request POST \
--header "Content-Type: application/json" \
--data @parameters-5-url.json

Скриншот(https://www.mohfw.gov.in/)

Вывод

Я показал ниже небольшую часть вывода. Вы можете сослаться на файл output.txt здесь, чтобы просмотреть полный вывод.

{
"usage": {
"text_units": 5,
"text_characters": 50000,
"features": 3
},
"retrieved_url": "https://www.mohfw.gov.in/",
"language": "en",
"keywords": [
{
"text": "Covid-19 facilities",
"relevance": 0.708923,
"count": 1
},
{
"text": "DO Letter of Secretary",
"relevance": 0.63015,
"count": 2
},
………..
"entities": [
{
      "type": "Location",
      "text": "India",
      "relevance": 0.509971,
      "disambiguation": {
        "subtype": [
          "HumanLanguage",
          "Region",
          "GovernmentalJurisdiction",
          "FilmEditor",
          "Country"
        ],
        "name": "India",
        "dbpedia_resource": "http://dbpedia.org/resource/India"
      },
…………..
"analyzed_text": "       MoHFW | Home\n                        \t \t\t Home \n \t\t \t\tLatest Updates\n \t\t \t\tResources \t\t \t\tTravel Advisories\n \t\tBehavioural Health\n \t\tCitizens\n \t\tHospitals\n \t\tTraining Material\n \t\tStates / Departments / Ministries\n \t\tEmployees\n \t\tAwareness Material\n \t\tInspirational series on Healthcare Service Personnel\n \t\t\n \t\t\n \t\t \t\tAwareness\n \t\tFAQs\n \t\n \t \t \t      \t \t\t \t\t \t\t \t\t \t\tIndia \t\t \t\t \t\t\t \t\t\t हिन्दी  \t\t\t \n  1 year of  Govt 2020 Towards a Healthy India   \n \t\t\t One Year of MODI 2.0   \n \t\t\t\t \t\t\t\t \t\t\t\t
………..
…………..

Он анализирует текст на веб-сайте, начиная с последних обновлений (возле синей кнопки "Домой").

Если вам нужен определенный раздел на веб-сайте, вам нужно указать XPath для элемента, как показано в следующей части.

Сканирование определенного раздела веб-сайта

Мне интересно знать только последние статистические данные о COVID-19, упомянутые на сайте. Таким образом, я изменяю свой файл параметров, добавляя элемент XPath требуемого раздела, как показано ниже.

параметры-5-url-xpath.json

{
"url": "https://www.mohfw.gov.in/",
"features": {
"concepts": {},
"entities":{}
},
"return_analyzed_text": true,
"xpath": "//div[@class='col-xs-8 site-stats-count']"
}

Команда "Свернуть"

curl --user "apikey:YOUR_API_KEY" \
"https://api.us-south.natural-language-understanding.watson.cloud.ibm.com/instances/*********/v1/analyze?version=2018-09-21" \
--request POST \
--header "Content-Type: application/json" \
--data @parameters-5-url-xpath.json

Скриншот (загрузите https://www.mohfw.gov.in/, щелкните правой кнопкой мыши раздел статистики и выберите элемент проверки)

Вывод

{
"usage": {
"text_units": 1,
"text_characters": 154,
"features": 2
},
"retrieved_url": "https://www.mohfw.gov.in/",
"language": "en",
"entities": [],
"concepts": [],
"analyzed_text": "Active   313831     (8535) Active 313831\n(8535)\nDischarged   9520827     (31087) Discharged 9520827\n(31087)\nDeaths   144789      (338) Deaths 144789\n(338)"
}

Заключение

В этом посте мы увидели, как мы можем анализировать конкретный целевой раздел на веб-странице с помощью XPath. XPath помогает сделать запросы компактными, уникально идентифицировать элемент на веб-странице, а это, в свою очередь, помогает нам получать точные результаты. Затем мы увидели, как это достигается с помощью простого вызова Watson NLU API.

Для получения более подробной информации см. https://cloud.ibm.com/docs/natural-language-understanding?topic=natural-language-understanding-analyzing-webpages

Вы можете узнать больше об услугах IBM, посетив блоги и шаблоны кода на едином месте для разработчиков.

Вы можете посетить мои предыдущие статьи Классификация и разделение изображений и Автоматическое создание информационного бюллетеня с использованием NLG.