У меня есть список полных словарей и списков с глубокой иерархией, исходящей из xml -файла. Я хочу проанализировать и перевести его в новый формат наиболее эффективным и быстрым способом, потому что я работаю с огромным количеством данных. Я думал, что это будет забавно для вас, ребята!
Мой код до сих пор работает. Из этого можно сделать вывод, где находится соответствующая информация в исходном списке. Я не буду показывать оригинальный список здесь, потому что он слишком большой и нечеткий. Тем не менее, я могу добавить эту информацию, если вам это нужно.
analysis = []
for sentence in mylist:
for i, word in enumerate(sentence['w']):
tmp_dic = {}
index = i+1
tmp_dic['index'] = str(index)
tmp_dic['text'] = word['t']
tmp_dic['lemma'] = word['lemma']['@class']
morph = ''
if len(word['morphology']['morpheme']) > 1:
for morphem in word['morphology']['morpheme']:
morph += '[' + morphem['t'] + ']'
else:
morph += '[' + word['morphology']['morpheme']['t'] + ']'
tmp_dic['morph'] = morph
tmp_dic['pos'] = word['pos']['@class']
tmp_dic['posprob'] = word['pos']['@confidence']
if index == len(sentence['w']):
tmp_dic['eos'] = True
analysis.append(tmp_dic)
Я полагаю, этот код не требует пояснений. Однако мне интересно, существует ли более элегантный и особенно более быстрый код, например, с использованием списочных представлений. Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь спрашивать! Конечный результат должен выглядеть так:
>>>print(analysis)
[{'index': '1', 'text': 'zo', 'lemma': 'zo', 'morph': '[zo]', 'pos': 'BW()', 'posprob': '0.999512'}, {'index': '2', 'text': 'schrijft', 'lemma': 'schrijven', 'morph': '[schrijf][t]', 'pos': 'WW(pv,tgw,met-t)', 'posprob': '0.998984'}, {'index': '3', 'text': 'paulus', 'lemma': 'paulus', 'morph': '[paulus]', 'pos': 'ADJ(vrij,basis,zonder)', 'posprob': '0.382880'}, {'index': '4', 'text': 'in', 'lemma': 'in', 'morph': '[in]', 'pos': 'VZ(init)', 'posprob': '0.999350'}, {'index': '5', 'text': 'de', 'lemma': 'de', 'morph': '[de]', 'pos': 'LID(bep,stan,rest)', 'posprob': '0.999964'}, {'index': '6', 'text': 'brief', 'lemma': 'brief', 'morph': '[brief]', 'pos': 'N(soort,ev,basis,zijd,stan)', 'posprob': '0.999172'}, {'index': '7', 'text': 'aan', 'lemma': 'aan', 'morph': '[aan]', 'pos': 'VZ(init)', 'posprob': '0.999180'}, {'index': '8', 'text': 'de', 'lemma': 'de', 'morph': '[de]', 'pos': 'LID(bep,stan,rest)', 'posprob': '0.999964'}, {'index': '9', 'text': 'gemeente', 'lemma': 'gemeente', 'morph': '[gemeente]', 'pos': 'N(soort,ev,basis,zijd,stan)', 'posprob': '0.999756'}, {'index': '10', 'text': 'in', 'lemma': 'in', 'morph': '[in]', 'pos': 'VZ(init)', 'posprob': '0.931125'}, {'index': '11', 'text': 'filippi', 'lemma': 'filippi', 'morph': '[filippi]', 'pos': 'N(soort,ev,basis,onz,stan)', 'posprob': '0.508322', 'eos': True}, {'index': '1', 'text': 'zij', 'lemma': 'zij', 'morph': '[zij]', 'pos': 'VNW(pers,pron,nomin,vol,3p,mv)', 'posprob': '0.934959'}, {'index': '2', 'text': 'verzetten', 'lemma': 'verzetten', 'morph': '[ver][zet][en]', 'pos': 'WW(pv,tgw,mv)', 'posprob': '0.909747'}, {'index': '3', 'text': 'zich', 'lemma': 'zich', 'morph': '[zich]', 'pos': 'VNW(refl,pron,obl,red,3,getal)', 'posprob': '0.999740'}, {'index': '4', 'text': 'met', 'lemma': 'met', 'morph': '[met]', 'pos': 'VZ(init)', 'posprob': '0.999480'}, {'index': '5', 'text': 'hem', 'lemma': 'hem', 'morph': '[hem]', 'pos': 'VNW(pers,pron,obl,vol,3,ev,masc)', 'posprob': '0.992108'}, {'index': '6', 'text': 'tegen', 'lemma': 'tegen', 'morph': '[tegen]', 'pos': 'VZ(init)', 'posprob': '0.997583'}, {'index': '7', 'text': 'de', 'lemma': 'de', 'morph': '[de]', 'pos': 'LID(bep,stan,rest)', 'posprob': '0.999964'}, {'index': '8', 'text': 'theologie', 'lemma': 'theologie', 'morph': '[theologisch][ie]', 'pos': 'N(soort,ev,basis,zijd,stan)', 'posprob': '0.997691', 'eos': True}]