Python中的Google Cloud API输出格式

Python中的Google Cloud API输出格式,python,gcloud,google-cloud-language,Python,Gcloud,Google Cloud Language,如果我从Google Cloud Python库调用该函数,它将返回 document=types.Documentcontent='trusted this',type=enums.document.type.PLAIN\u TEXT 信息=客户端。分析\u语法文档=文档 打印信息 printinfo.tokens printinfo.tokens[0]。语音部分 这对我来说是一种奇怪的格式,因为: 我无法按信息中键的键进行迭代。标记[0]。语音部分:gives TypeError:“Part

如果我从Google Cloud Python库调用该函数,它将返回

document=types.Documentcontent='trusted this',type=enums.document.type.PLAIN\u TEXT 信息=客户端。分析\u语法文档=文档 打印信息 printinfo.tokens printinfo.tokens[0]。语音部分 这对我来说是一种奇怪的格式,因为:

我无法按信息中键的键进行迭代。标记[0]。语音部分:gives TypeError:“PartOfSpeech”对象不可iterable

访问这些值的工作方式与我想象的不同:info.tokens[0]。part\u of_speech.tag的值为11

问题:这是什么类型的对象?它是如何工作的


我希望能够以一种更好的方式将其转换为字典,而不是首先将其转换为字符串,或者以某种方式对其进行迭代,以找到它有哪些键以及相应的值

要获得python中对象的类型,您可以做的第一件事是调用内置函数

您将看到作为输出的返回

<class 'google.cloud.language_v1.types.PartOfSpeech'>
这导致:

['ACCUSATIVE', 'ACTIVE', 'ADJ', 'ADNOMIAL', 'ADP', 'ADV', 'ADVERBIAL', 'AFFIX', 'ASPECT_UNKNOWN', 'AUXILIARY', 'Aspect', 'ByteSize', 'CASE_UNKNOWN', 'CAUSATIVE', 'COMPLEMENTIVE', 'COMPLEMENTIZER', 'CONDITIONAL_MOOD', 'CONDITIONAL_TENSE', 'CONJ', 'Case', 'Clear', 'ClearExtension', 'ClearField', 'CopyFrom', 'DATIVE', 'DESCRIPTOR', 'DET', 'DUAL', 'DiscardUnknownFields', 'Extensions', 'FEMININE', 'FINAL_ENDING', 'FIRST', 'FORM_UNKNOWN', 'FUTURE', 'FindInitializationErrors', 'Form', 'FromString', 'GENDER_UNKNOWN', 'GENITIVE', 'GERUND', 'Gender', 'HasExtension', 'HasField', 'IMPERATIVE', 'IMPERFECT', 'IMPERFECTIVE', 'INDICATIVE', 'INSTRUMENTAL', 'INTERROGATIVE', 'IRREALIS', 'IsInitialized', 'JUSSIVE', 'LOCATIVE', 'LONG', 'ListFields', 'MASCULINE', 'MOOD_UNKNOWN', 'MergeFrom', 'MergeFromString', 'Mood', 'NEUTER', 'NOMINATIVE', 'NON_RECIPROCAL', 'NOT_PROPER', 'NOUN', 'NUM', 'NUMBER_UNKNOWN', 'Number', 'OBLIQUE', 'ORDER', 'PARTITIVE', 'PASSIVE', 'PAST', 'PERFECTIVE', 'PERSON_UNKNOWN', 'PLUPERFECT', 'PLURAL', 'PREPOSITIONAL', 'PRESENT', 'PROGRESSIVE', 'PRON', 'PROPER', 'PROPER_UNKNOWN', 'PRT', 'PUNCT', 'ParseFromString', 'Person', 'Proper', 'REALIS', 'RECIPROCAL', 'RECIPROCITY_UNKNOWN', 'REFLEXIVE_CASE', 'REFLEXIVE_PERSON', 'RELATIVE_CASE', 'Reciprocity', 'RegisterExtension', 'SECOND', 'SHORT', 'SINGULAR', 'SPECIFIC', 'SUBJUNCTIVE', 'SerializePartialToString', 'SerializeToString', 'SetInParent', 'TENSE_UNKNOWN', 'THIRD', 'Tag', 'Tense', 'UNKNOWN', 'UnknownFields', 'VERB', 'VOCATIVE', 'VOICE_UNKNOWN', 'Voice', 'WhichOneof', 'X', '_CheckCalledFromGeneratedFile', '_SetListener', '__class__', '__deepcopy__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', '__unicode__', '_extensions_by_name', '_extensions_by_number', 'aspect', 'case', 'form', 'gender', 'mood', 'number', 'person', 'proper', 'reciprocity', 'tag', 'tense', 'voice']
正如您所看到的,这个对象似乎具有所有可能的键和值的属性,这些键和值看起来像是字典。如果您进一步检查诸如“VERB”或“tag”之类的属性,您将看到它们都是整数。该对象存储信息的方式是将关键整数映射为值整数,这就是“tag”返回“11”的原因,因为这正是与“VERB”相关联的整数。您还可以使用“mood”和“instructive”来检查这一点,它们都是“3”,而“tense”和“pass”也都是“3”。相反,那些没有关联值(如“person”或“gender”)的键的值为0

现在,回到迭代该项的方法,您可以看到调用“part_of_speech_0”时返回的字符串具有类似的结构。因此,您可以使用python中的yaml模块将其加载到字典中。下面是最后一段完整的代码,它将在“part of of theu speech”中输出键、值对的迭代:

from google.cloud import language
from google.cloud.language import enums
from google.cloud.language import types
import yaml


client = language.LanguageServiceClient()

document = types.Document(content='Tried this', type=enums.Document.Type.PLAIN_TEXT)

info = client.analyze_syntax(document=document)
part_of_speech_0 = info.tokens[0].part_of_speech

part_0_yaml = yaml.load(str(part_of_speech_0))
#casts part_of_speech into a string and loads that into a dictionary assuming YAML structure


for key, value in part_0_yaml.items():
    print('key: {}, value: {}'.format(key, value))
#iterates the created dictionary

看起来这是GRPCAPI的python接口。从好的方面来说,您应该能够执行info.tokens[0]。part\u of\u speech.\uu dict\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu来获得您想要的内容?见:
part_of_speech_0 = info.tokens[0].part_of_speech
print(type(part_of_speech_0))
<class 'google.cloud.language_v1.types.PartOfSpeech'>
print(dir(part_of_speech_0))
['ACCUSATIVE', 'ACTIVE', 'ADJ', 'ADNOMIAL', 'ADP', 'ADV', 'ADVERBIAL', 'AFFIX', 'ASPECT_UNKNOWN', 'AUXILIARY', 'Aspect', 'ByteSize', 'CASE_UNKNOWN', 'CAUSATIVE', 'COMPLEMENTIVE', 'COMPLEMENTIZER', 'CONDITIONAL_MOOD', 'CONDITIONAL_TENSE', 'CONJ', 'Case', 'Clear', 'ClearExtension', 'ClearField', 'CopyFrom', 'DATIVE', 'DESCRIPTOR', 'DET', 'DUAL', 'DiscardUnknownFields', 'Extensions', 'FEMININE', 'FINAL_ENDING', 'FIRST', 'FORM_UNKNOWN', 'FUTURE', 'FindInitializationErrors', 'Form', 'FromString', 'GENDER_UNKNOWN', 'GENITIVE', 'GERUND', 'Gender', 'HasExtension', 'HasField', 'IMPERATIVE', 'IMPERFECT', 'IMPERFECTIVE', 'INDICATIVE', 'INSTRUMENTAL', 'INTERROGATIVE', 'IRREALIS', 'IsInitialized', 'JUSSIVE', 'LOCATIVE', 'LONG', 'ListFields', 'MASCULINE', 'MOOD_UNKNOWN', 'MergeFrom', 'MergeFromString', 'Mood', 'NEUTER', 'NOMINATIVE', 'NON_RECIPROCAL', 'NOT_PROPER', 'NOUN', 'NUM', 'NUMBER_UNKNOWN', 'Number', 'OBLIQUE', 'ORDER', 'PARTITIVE', 'PASSIVE', 'PAST', 'PERFECTIVE', 'PERSON_UNKNOWN', 'PLUPERFECT', 'PLURAL', 'PREPOSITIONAL', 'PRESENT', 'PROGRESSIVE', 'PRON', 'PROPER', 'PROPER_UNKNOWN', 'PRT', 'PUNCT', 'ParseFromString', 'Person', 'Proper', 'REALIS', 'RECIPROCAL', 'RECIPROCITY_UNKNOWN', 'REFLEXIVE_CASE', 'REFLEXIVE_PERSON', 'RELATIVE_CASE', 'Reciprocity', 'RegisterExtension', 'SECOND', 'SHORT', 'SINGULAR', 'SPECIFIC', 'SUBJUNCTIVE', 'SerializePartialToString', 'SerializeToString', 'SetInParent', 'TENSE_UNKNOWN', 'THIRD', 'Tag', 'Tense', 'UNKNOWN', 'UnknownFields', 'VERB', 'VOCATIVE', 'VOICE_UNKNOWN', 'Voice', 'WhichOneof', 'X', '_CheckCalledFromGeneratedFile', '_SetListener', '__class__', '__deepcopy__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', '__unicode__', '_extensions_by_name', '_extensions_by_number', 'aspect', 'case', 'form', 'gender', 'mood', 'number', 'person', 'proper', 'reciprocity', 'tag', 'tense', 'voice']
from google.cloud import language
from google.cloud.language import enums
from google.cloud.language import types
import yaml


client = language.LanguageServiceClient()

document = types.Document(content='Tried this', type=enums.Document.Type.PLAIN_TEXT)

info = client.analyze_syntax(document=document)
part_of_speech_0 = info.tokens[0].part_of_speech

part_0_yaml = yaml.load(str(part_of_speech_0))
#casts part_of_speech into a string and loads that into a dictionary assuming YAML structure


for key, value in part_0_yaml.items():
    print('key: {}, value: {}'.format(key, value))
#iterates the created dictionary