Преобразование вывода настроений сущности API Google Cloud NLP в JSON

У меня есть этот выходной результат из API Google Cloud Natural Language (мне потребовалось немало времени на его создание, поэтому я не хочу переходить к решению, приведенному в разделе Как я могу JSON сериализовать объект из API Google на естественном языке? (Нет атрибута __dict__))

Mentions: 
Name: "Trump"
  Begin Offset : 0
  Content : Trump
  Magnitude : 0.0
  Sentiment : 0.0
  Type : 2
Salience: 0.6038374900817871
Sentiment: 

Mentions: 
Name: "hand"
  Begin Offset : 19
  Content : hand
  Magnitude : 0.0
  Sentiment : 0.0
  Type : 2
Salience: 0.20075689256191254
Sentiment: 

Mentions: 
Name: "water boarding"
  Begin Offset : 39
  Content : water boarding
  Magnitude : 0.0
  Sentiment : 0.0
  Type : 2
Salience: 0.13010266423225403
Sentiment: 

Mentions: 
Name: "some"
  Begin Offset : 58
  Content : some
  Magnitude : 0.0
  Sentiment : 0.0
  Type : 2
Salience: 0.04501711577177048
Sentiment: 

Mentions: 
Name: "GOPDebate"
  Begin Offset : 65
  Content : GOPDebate
  Magnitude : 0.0
  Sentiment : 0.0
  Type : 1
Salience: 0.020285848528146744
Sentiment: 

Я хочу найти Величину и Чувство для набора имен кандидатов (Дональд Трамп, Хиллари Клинтон, Берни Сандерс и Тед Круз - или набор похожих имен, таких как только Трамп / Хиллари / Клинтон / Круз / Берни / Сандерс /@realdonaldtrump).

Сначала я не осознавал, что выходные файлы не являются json. На самом деле я не уверен, что формат. Мне сказали, что это, возможно, неправильно форматированный YAML. Есть ли способ конвертировать эти файлы в JSON? Как я уже сказал, я обработал много файлов, и для меня не практично модифицировать protobuf и создать json.

Часть кода из учебника Google Cloud NLP, которая делает это:

# [START def_entity_sentiment_text]
def entity_sentiment_text(text):
    """Detects entity sentiment in the provided text."""
    client = language.LanguageServiceClient()

    if isinstance(text, six.binary_type):
        text = text.decode('utf-8')

    document = types.Document(
        content=text.encode('utf-8'),
        type=enums.Document.Type.PLAIN_TEXT)

    # Detect and send native Python encoding to receive correct word offsets.
    encoding = enums.EncodingType.UTF32
    if sys.maxunicode == 65535:
        encoding = enums.EncodingType.UTF16

    result = client.analyze_entity_sentiment(document, encoding)

    for entity in result.entities:
        print('Mentions: ')
        print(u'Name: "{}"'.format(entity.name))
        for mention in entity.mentions:
            print(u'  Begin Offset : {}'.format(mention.text.begin_offset))
            print(u'  Content : {}'.format(mention.text.content))
            print(u'  Magnitude : {}'.format(mention.sentiment.magnitude))
            print(u'  Sentiment : {}'.format(mention.sentiment.score))
            print(u'  Type : {}'.format(mention.type))
        print(u'Salience: {}'.format(entity.salience))
        print(u'Sentiment: {}\n'.format(entity.sentiment))
# [END def_entity_sentiment_text]

Так что я даже не уверен, как применить ответ в другом SO здесь.

0 ответов

Добавление ответа в старую ветку. Ответ от NLP API в формате protobuf можно преобразовать в JSON с помощьюMessageToDict или MessageToJson как показано ниже

from google.protobuf import json_format
import json
response_json = json.loads(json_format.MessageToJson(result)) 
Другие вопросы по тегам