2

我从 Google Cloud Natural Language API 获得了这个输出结果(我花了很长时间才生成它,所以我不想使用如何 JSON 序列化来自 google 的自然语言 API 的对象?(没有 __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: 

我想找到一组候选人姓名(唐纳德·特朗普、希拉里·克林顿、伯尼·桑德斯和特德·克鲁兹)的量级和情绪——或一组类似的名字,比如只有 trump/hillary/clinton/cruz/bernie/sanders/@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 中应用答案。

4

1 回答 1

0

将答案添加到旧线程。来自 protobuf 格式的 NLP API 的响应可以使用MessageToDictMessageToJson如下方式转换为 JSON

from google.protobuf import json_format
import json
response_json = json.loads(json_format.MessageToJson(result)) 
于 2020-07-23T16:07:18.100 回答