Первое, что вы можете сделать, чтобы получить тип объекта в python, - это вызвать встроенную функцию type ()
part_of_speech_0 = info.tokens[0].part_of_speech
print(type(part_of_speech_0))
Что вы увидите возвращается как результат
<class 'google.cloud.language_v1.types.PartOfSpeech'>
Это класс, определенный в собственной библиотеке NLP Google Cloud.
Вы также можете посмотреть, какие атрибуты имеет этот класс, используя также встроенные функции. в функции dir ():
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']
Как видите, этот объект, похоже, имеет в качестве атрибутов все возможные ключи и значения того, что может выглядеть как словарь. Если вы дополнительно изучите такие атрибуты, как «VERB» или «tag», вы увидите, что все они являются целыми числами. Этот объект хранит информацию путем сопоставления целого числа ключа с целым числом, поэтому 'tag' возвращает '11', потому что это именно целое число, связанное с 'VERB' (вы можете проверить это также с помощью 'mood' и «ИНДИКАТИВНЫЙ» (оба - «3»), «напряженное» и «ПРОШЛОЕ» (оба - «3»)). Напротив, те ключи, которые не имеют связанного значения (например, «человек» или «пол»), получают значение 0.
Теперь, возвращаясь к способу итерации этого элемента, вы можете видеть, что строка, возвращаемая при вызове 'part_of_speech_0', имеет структуру, подобную YAML . таким образом, вы можете превратить его в словарь, загрузив его с помощью модуля yaml в python. Вот последний полный код, который выводит итерацию пар (ключ, значение) в 'part_of_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