Google Cloud Natural Language API: есть ли у analysisSyntax API параметр для токенов, чтобы не включать атрибуты значения *_UNKNOWN в результат partOfSpeech

Мне интересно, есть ли способ, которым конечная точка API позволяет использовать analyzeSyntax API ответ JSON, чтобы не включать податрибуты partOfSpeech словарей, если они *_UNKNOWN? При просмотре сведений о вводе документа , я не могу найти способ ограничить ответ содержание документа partOfSpeech.

Это то, что будет обрабатываться только при очистке данных после ответа?

Пример запроса для документов API здесь в файле с именем request.json:

{
  "encodingType": "UTF8",
  "document": {
    "type": "PLAIN_TEXT",
    "content": "Google, headquartered in Mountain View, unveiled the new Android phone at the Consumer Electronic Show.  Sundar Pichai said in his keynote that users love their new Android phones."
  }
}

Команда выполнена:

curl "https://language.googleapis.com/v1/documents:analyzeSyntax?key=${API_KEY}" \
  -s \
  -X POST \
  -H "Content-Type: application/json" \
  --data-binary @request.json > response.json

Образец ответа:

{
  "sentences": [
    {
      "text": {
        "content": "Google, headquartered in Mountain View, unveiled the new Android phone at the Consumer Electronic Show.",
        "beginOffset": 0
      }
    },
    {
      "text": {
        "content": "Sundar Pichai said in his keynote that users love their new Android phones.",
        "beginOffset": 105
      }
    }
  ],
  "tokens": [
    {
      "text": {
        "content": "Google",
        "beginOffset": 0
      },
      "partOfSpeech": {
        "tag": "NOUN",
        "aspect": "ASPECT_UNKNOWN",
        "case": "CASE_UNKNOWN",
        "form": "FORM_UNKNOWN",
        "gender": "GENDER_UNKNOWN",
        "mood": "MOOD_UNKNOWN",
        "number": "SINGULAR",
        "person": "PERSON_UNKNOWN",
        "proper": "PROPER",
        "reciprocity": "RECIPROCITY_UNKNOWN",
        "tense": "TENSE_UNKNOWN",
        "voice": "VOICE_UNKNOWN"
      },
      "dependencyEdge": {
        "headTokenIndex": 7,
        "label": "NSUBJ"
      },
      "lemma": "Google"
    },
    {
      "text": {
        "content": ",",
        "beginOffset": 6
      },
      "partOfSpeech": {
        "tag": "PUNCT",
        "aspect": "ASPECT_UNKNOWN",
        "case": "CASE_UNKNOWN",
        "form": "FORM_UNKNOWN",
        "gender": "GENDER_UNKNOWN",
        "mood": "MOOD_UNKNOWN",
        "number": "NUMBER_UNKNOWN",
        "person": "PERSON_UNKNOWN",
        "proper": "PROPER_UNKNOWN",
        "reciprocity": "RECIPROCITY_UNKNOWN",
        "tense": "TENSE_UNKNOWN",
        "voice": "VOICE_UNKNOWN"
      },
      "dependencyEdge": {
        "headTokenIndex": 0,
        "label": "P"
      },
      "lemma": ","
    },
...
...

Этот ответ JSON состоит из 819 строк, из которых 314 строк (почти 40% ответа!) представляют собой *_UNKNOWN значений для partOfSpeech атрибутов. Итак, совершенно бесполезно, но значительно увеличивая объем данных в ответе.

Похоже, что в документации нет параметров, которые могли бы помочь в этом. Я что-то упустил, или этот API не поддерживает аргумент для удаления этих ключей, когда они *_UNKNOWN? Это то, с чем можно справиться только после ответа с помощью очистки данных?


person ScriptAutomate    schedule 12.12.2019    source источник


Ответы (1)


Если мы посмотрим на спецификацию API, то в конце концов обнаружим, что части речи на самом деле являются перечислениями (перечислениями). Например, мы находим, что пол может быть:

  • GENDER_UNKNOWN
  • ЖЕНСКИЙ РОД
  • МУЖСКОЙ
  • КАстрированный

Выполнение вызовов REST API отправляет и получает полезные данные JSON, а абстракция JSON для перечислений заключается в том, что их значения представляют собой расширенные строки. Однако REST и JSON — не единственные протоколы для отправки запросов на обслуживание GCP. Также можно совершать вызовы gRPC. При использовании gRPC передаваемый протокол представляет собой буфер протокола. Существуют языковые привязки от Google, которые позволяют вам совершать вызовы службы с помощью gRPC, не отвлекаясь на изучение этой технологии. Ценность gRPC в том, что сообщения намного меньше и быстрее.

Я не видел механизма для сжатия транспорта на уровне API (например, запроса полей, которые не должны быть включены в ответ JSON при использовании REST).

Смотрите также:

person Kolban    schedule 12.12.2019
comment
Благодарю вас! Это отвечает на мой вопрос, а также предоставляет дополнительную информацию о вызовах gRPC по сравнению с информацией REST/JSON, которую полезно знать. Здесь можно найти специальную документацию gRPC для AnalyzeSyntax: cloud.google.com/natural-language/docs/reference/rpc/ - проголосовали и пометили как ответ :) - person ScriptAutomate; 12.12.2019