我想用另一个钥匙创建一个恐龙,但要保持相同的钥匙。我尝试更新第一个词典的值,但出现错误。因此,现在我尝试从第一个字典创建一个新字典。
我希望键是相同的,不要更改它们。
# -*- coding: UTF-8 -*-
import codecs
import re
import os
import sys, argparse
import subprocess
import pprint
import csv
from itertools import islice
import pickle
try:
import treetaggerwrapper
from treetaggerwrapper import TreeTagger, make_tags
print("import TreeTagger OK")
except:
print("Import TreeTagger pas Ok")
from itertools import islice
from collections import defaultdict
#export le lexique de sentiments
pickle_in = open("dict_pickle", "rb")
dico_lexique = pickle.load(pickle_in)
# extraction colonne verbatim
d = {}
with open(sys.argv[1], 'r', encoding="cp1252",) as csv_file:
csv_file.readline()
for line in csv_file:
token = line.split(';')
d[token[0]] = token[1]
#print(d)
#Writing in a new csv file
with open('result.csv','wb', sep=';', encoding='Cp1252') as f:
w = csv.writer(f)
w.writerows(d.items())
tagger = treetaggerwrapper.TreeTagger(TAGLANG='fr')
d_tag = {}
for key,val in d.items():
newvalues = tagger.tag_text(val)
#print(newvalues)
for key,val in d_tag.items():
d_tag[key] = d[key]
d_tag[val] = newvalues
print(d_tag)
#Writing in a new csv file, Writing the key to be sure it coincides
with open('result.csv','wb', sep=';', encoding='Cp1252') as f:
w = csv.writer(f)
w.writerows(d_tag.items())
文件(这是一个示例,原始文件在csv中大约有6000行
id;Verbatim;score
1;tu es laid;5
2;Je suis belle; 6
3;Je n'aime pas la viande;7
提取第一列和第二列后的外观:
{'1': 'tu es laid\n', '2': 'Je suis belle \n', '3': "Je n'aime pas la viande"}
期望的答案,我希望标签对应于其原始句子的键
d_tag = { "1" : ['tu\tPRO:PER\ttu', 'es\tVER:pres\têtre', 'laid\tADJ\tlaid'],
"2" : ['Je\tPRO:PER\tje', 'suis\tVER:pres\tsuivre|être', 'belle\tADJ\tbeau'],
"3" : ['Je\tPRO:PER\tje', "n'\tADV\tne", 'aime\tVER:pres\taimer', 'pas\tADV\tpas', 'la\tDET:ART\tle', 'viande\tNOM\tviande']}
稍后,我只想提取第三个词(在第二个字典中循环并用相同的键重写一个新词,但只包含索引为[2]的引理。
这意味着获取类似这样的东西:
d_lemma = { "1" : ['tu', 'être', 'laid'],
"2" : ['Je', 'suivre|être', 'beau'],
"3" : ['Je', "ne", 'aimer', 'pas', 'le', 'viande']}
上面的代码不起作用,不知道如何进行更改,以得到我期望的第二个字典的结果。
不幸的是,我必须使用键来保存句子,这样我才能在每一步或最后都在CSV中逐个写入值。
答案 0 :(得分:1)
要将新标签值映射到相关键,请将该键设置为键,并将新值设置为值:
d_tag = {}
for key, val in d.items():
newvalues = tagger.tag_text(val)
d_tag[key] = newvalues
可以使用字典理解来缩短此代码:
d_tag = {key: tagger.tag_text(val) for key, val in d.items()}
要获取引理字典,您需要在每个值列表中的每个元素上调用str.split
,然后提取每个结果中的第三项并将其添加到关联键的值列表中。
d_lemma = defaultdict(list)
for k, v in d_tag.items():
for elem in v:
parts = elem.split('\t')
d_lemma[k].append(parts[2])
结果:
defaultdict(<class 'list'>, {'1': ['tu', 'être', 'laid'], '2': ['je', 'suivre|être', 'beau'], '3': ['je', 'ne', 'aimer', 'pas', 'le', 'viande']})
同样,可以使用字典理解来缩短代码,并使用内部列表理解来创建值:
d_lemma = {k: [p.split('\t')[2] for p in v] for k, v in d_tag.items()}
结果:
{'1': ['tu', 'être', 'laid'], '2': ['je', 'suivre|être', 'beau'], '3': ['je', 'ne', 'aimer', 'pas', 'le', 'viande']}