Как получить действительную JSON отформатированную строку из объекта AnalyzeSyntaxRequest? (Google Natural Language Processing) - PullRequest
0 голосов
/ 01 марта 2020

Для данного объекта AnalyzeSyntaxResponse, как получить корректно отформатированную строку JSON? Есть метод .toString(), который возвращает что-то близкое к допустимой строке JSON, но отсутствует ключевые элементы, чтобы быть действительным.

Следующий пример:

try (LanguageServiceClient language = LanguageServiceClient.create()) {
    String text = "I have an angel on my shoulder but a devil in my hand.";
    com.google.cloud.language.v1.Document doc = com.google.cloud.language.v1.Document.newBuilder()
              .setContent(text)
              .setType(Type.PLAIN_TEXT)
              .build();
    AnalyzeSyntaxRequest request = AnalyzeSyntaxRequest.newBuilder()
              .setDocument(doc)
              .setEncodingType(EncodingType.UTF16)
              .build();
          // analyze the syntax in the given text


    AnalyzeSyntaxResponse response =  language.analyzeSyntax(request);

    // print the response
    System.out.println(response.toString());
    //System.out.println(response);
}

Печать на консоли:

sentences {
  text {
    content: "I have an angel on my shoulder but a devil in my hand."
  }
}
tokens {
  text {
    content: "I"
  }
  part_of_speech {
    tag: PRON
    case: NOMINATIVE
    number: SINGULAR
    person: FIRST
  }
  dependency_edge {
    head_token_index: 1
    label: NSUBJ
  }
  lemma: "I"
}
tokens {
  text {
    content: "have"
    begin_offset: 2
  }
  part_of_speech {
    tag: VERB
    mood: INDICATIVE
    tense: PRESENT
  }
  dependency_edge {
    head_token_index: 1
    label: ROOT
  }
  lemma: "have"
}
tokens {
  text {
    content: "an"
    begin_offset: 7
  }
  part_of_speech {
    tag: DET
  }
  dependency_edge {
    head_token_index: 3
    label: DET
  }
  lemma: "an"
}
tokens {
  text {
    content: "angel"
    begin_offset: 10
  }
  part_of_speech {
    tag: NOUN
    number: SINGULAR
  }
  dependency_edge {
    head_token_index: 1
    label: DOBJ
  }
  lemma: "angel"
}
tokens {
  text {
    content: "on"
    begin_offset: 16
  }
  part_of_speech {
    tag: ADP
  }
  dependency_edge {
    head_token_index: 3
    label: PREP
  }
  lemma: "on"
}
tokens {
  text {
    content: "my"
    begin_offset: 19
  }
  part_of_speech {
    tag: PRON
    case: GENITIVE
    number: SINGULAR
    person: FIRST
  }
  dependency_edge {
    head_token_index: 6
    label: POSS
  }
  lemma: "my"
}
tokens {
  text {
    content: "shoulder"
    begin_offset: 22
  }
  part_of_speech {
    tag: NOUN
    number: SINGULAR
  }
  dependency_edge {
    head_token_index: 4
    label: POBJ
  }
  lemma: "shoulder"
}
tokens {
  text {
    content: "but"
    begin_offset: 31
  }
  part_of_speech {
    tag: CONJ
  }
  dependency_edge {
    head_token_index: 3
    label: CC
  }
  lemma: "but"
}
tokens {
  text {
    content: "a"
    begin_offset: 35
  }
  part_of_speech {
    tag: DET
  }
  dependency_edge {
    head_token_index: 9
    label: DET
  }
  lemma: "a"
}
tokens {
  text {
    content: "devil"
    begin_offset: 37
  }
  part_of_speech {
    tag: NOUN
    number: SINGULAR
  }
  dependency_edge {
    head_token_index: 3
    label: CONJ
  }
  lemma: "devil"
}
tokens {
  text {
    content: "in"
    begin_offset: 43
  }
  part_of_speech {
    tag: ADP
  }
  dependency_edge {
    head_token_index: 9
    label: PREP
  }
  lemma: "in"
}
tokens {
  text {
    content: "my"
    begin_offset: 46
  }
  part_of_speech {
    tag: PRON
    case: GENITIVE
    number: SINGULAR
    person: FIRST
  }
  dependency_edge {
    head_token_index: 12
    label: POSS
  }
  lemma: "my"
}
tokens {
  text {
    content: "hand"
    begin_offset: 49
  }
  part_of_speech {
    tag: NOUN
    number: SINGULAR
  }
  dependency_edge {
    head_token_index: 10
    label: POBJ
  }
  lemma: "hand"
}
tokens {
  text {
    content: "."
    begin_offset: 53
  }
  part_of_speech {
    tag: PUNCT
  }
  dependency_edge {
    head_token_index: 1
    label: P
  }
  lemma: "."
}
language: "en"

Насколько я могу судить, это не так допустимое JSON форматирование. Есть ли способ получить действительную строку JSON из объекта Google AnalyzeSyntaxRespone?

Ссылки:

https://cloud.google.com/natural-language/docs/analyzing-syntax

https://cloud.google.com/natural-language/docs/basics

...