首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的输出格式

Python中的输出格式
EN

Stack Overflow用户
提问于 2020-05-05 18:32:22
回答 1查看 168关注 0票数 0

如果我从Google库调用函数语法,它将返回

代码语言:javascript
复制
document = types.Document(content='Tried this', type=enums.Document.Type.PLAIN_TEXT)
info = client.analyze_syntax(document=document)
print(info)
代码语言:javascript
复制
sentences {
  text {
    content: "Tried this"
    begin_offset: -1
  }
}
tokens {
  text {
    content: "Tried"
    begin_offset: -1
  }
  part_of_speech {
    tag: VERB
    mood: INDICATIVE
    tense: PAST
  }
  dependency_edge {
    label: ROOT
  }
  lemma: "try"
}
tokens {
  text {
    content: "this"
    begin_offset: -1
  }
  part_of_speech {
    tag: DET
    number: SINGULAR
  }
  dependency_edge {
    label: DOBJ
  }
  lemma: "this"
}
language: "en"
代码语言:javascript
复制
print(info.tokens)
代码语言:javascript
复制
[text {
  content: "Tried"
  begin_offset: -1
}
part_of_speech {
  tag: VERB
  mood: INDICATIVE
  tense: PAST
}
dependency_edge {
  label: ROOT
}
lemma: "try"
, text {
  content: "this"
  begin_offset: -1
}
part_of_speech {
  tag: DET
  number: SINGULAR
}
dependency_edge {
  label: DOBJ
}
lemma: "this"
]
代码语言:javascript
复制
print(info.tokens[0].part_of_speech)
代码语言:javascript
复制
tag: VERB
mood: INDICATIVE
tense: PAST

这对我来说是个奇怪的格式,因为:

  • 我不能按for key in info.tokens[0].part_of_speech:TypeError: 'PartOfSpeech' object is not iterable的(什么样子)键来迭代。
  • 访问这些值不像我想的那样:info.tokens[0].part_of_speech.tag给出了值11

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

我希望能够将其转换为字典(比先将其转换为字符串更好)或以某种方式迭代它(查找它有哪些键以及相应的值)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-08 07:18:39

要在python中获取对象的类型,首先要做的是调用内置函数类型()

代码语言:javascript
复制
part_of_speech_0 = info.tokens[0].part_of_speech
print(type(part_of_speech_0))

,您将看到返回作为输出。

代码语言:javascript
复制
<class 'google.cloud.language_v1.types.PartOfSpeech'>

这是一个在自己的库中定义的类。

您还可以通过使用内置函数dir():查看这个类具有哪些属性。

代码语言:javascript
复制
print(dir(part_of_speech_0))

其结果是:

代码语言:javascript
复制
['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']

正如您所看到的,这个对象似乎具有作为属性的所有可能的键和值,这些键和值都可以看作是字典。如果您进一步检查‘谓词’或'tag‘这样的属性,您将看到它们都是整数。该对象存储信息的方式是将键整数与值整数匹配,这就是为什么'tag‘返回'11’的原因,因为这恰恰是与‘谓词’相关联的整数(您也可以用‘语气’和‘指示性’(两者都是'3')、‘时态’和‘过去’(都是‘3’)来检查这一点。相反,那些没有关联值的键(如“person”或“gender”)被赋予0的值。

现在,回到迭代此项的方法,您可以看到调用'part_of_speech_0‘时返回的字符串具有类似于YAML的结构。因此,您可以通过在python中使用yaml模块加载它,从而将其转换为字典。下面是最后的完整代码,它将输出‘part_ of _speech’中(key,value)对的迭代:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61620421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档