Преобразование вывода настроений сущности 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))