[英]Write dictionary in csv file
我想在執行代碼期間將我在Python腳本中創建的所有詞典中的值添加到CSV文件中,這樣最后我會得到類似這樣的內容:
文件開頭:
id;Verbatim;score
15;je suis monter à la boulangerie;4
44;tu es méchant;5
45;je te hais et la foret enchanté est belle de milles faux et les jeunes filles sont assises au bor de la mer;7
47;je ne comprends pas la vie et je suis perdue, aide moi stp maman je suis perdue tu es ma seule amie et je t'aime;8
最后的csv文件:(對於簡單的方法;我想在現有文件中添加此列)
id;Verbatim;score;**d_tag;d_lemma;d_filtered_words**
15;Je suis monter à , la boulangerie;4;['Je\tPRO:PER\tje', 'suis\tVER:pres\tsuivre|être', 'monter\tVER:infi\tmonter', 'à\tPRP\tà', ',\tPUN\t,', 'la\tDET:ART\tle', 'boulangerie\tNOM\tboulangerie'];['je', 'suivre|être', 'monter', 'à', ',', 'le', 'boulangerie'];['monter', 'boulangerie']
44;Tu es ? méchant;5;['Tu\tPRO:PER\ttu', 'es\tVER:pres\têtre', '?\tSENT\t?', 'méchant\tNOM\tméchant'];['tu', 'être', '?', 'méchant'];['être', 'méchant']
45;Je te hais et la Foret enchantée est belle de milles faux et les jeunes filles sont assises au bor de la mer;7;['Je\tPRO:PER\tje', 'te\tPRO:PER\tte', 'hais\tVER:pres\thaïr', 'et\tKON\tet', 'la\tDET:ART\tle', 'Foret\tNAM\tForet', 'enchantée\tVER:pper\tenchanter', 'est\tVER:pres\têtre', 'belle\tADJ\tbeau', 'de\tPRP\tde', 'milles\tNOM\tmille', 'faux\tADJ\tfaux', 'et\tKON\tet', 'les\tDET:ART\tle', 'jeunes\tADJ\tjeune', 'filles\tNOM\tfille', 'sont\tVER:pres\têtre', 'assises\tVER:pper\tasseoir', 'au\tPRP:det\tau', 'bor\tNOM\tbor', 'de\tPRP\tde', 'la\tDET:ART\tle', 'mer\tNOM\tmer'];['je', 'te', 'haïr', 'et', 'le', 'Foret', 'enchanter', 'être', 'beau', 'de', 'mille', 'faux', 'et', 'le', 'jeune', 'fille', 'être', 'asseoir', 'au', 'bor', 'de', 'le', 'mer'];['haïr', 'Foret', 'enchanter', 'être', 'beau', 'mille', 'faux', 'jeune', 'fille', 'être', 'asseoir', 'bor', 'mer']
47;Je ne Comprends pas la vie et je ? suis perdue aide moi stp maman je suis perdue tu es ma seule amie et je t'aime;8;['Je\tPRO:PER\tje', 'ne\tADV\tne', 'Comprends\tVER:pres\tcomprendre', 'pas\tADV\tpas', 'la\tDET:ART\tle', 'vie\tNOM\tvie', 'et\tKON\tet', 'je\tPRO:PER\tje', '?\tSENT\t?', 'suis\tVER:pres\tsuivre|être', 'perdue\tVER:pper\tperdre', 'aide\tNOM\taide', 'moi\tPRO:PER\tmoi', 'stp\tVER:simp\tstp', 'maman\tNOM\tmaman', 'je\tPRO:PER\tje', 'suis\tVER:pres\tsuivre|être', 'perdue\tVER:pper\tperdre', 'tu\tPRO:PER\ttu', 'es\tVER:pres\têtre', 'ma\tDET:POS\tmon', 'seule\tADJ\tseul', 'amie\tNOM\tami', 'et\tKON\tet', 'je\tPRO:PER\tje', ""t'\tPRO:PER\tte"", 'aime\tVER:pres\taimer'];['je', 'ne', 'comprendre', 'pas', 'le', 'vie', 'et', 'je', '?', 'suivre|être', 'perdre', 'aide', 'moi', 'stp', 'maman', 'je', 'suivre|être', 'perdre', 'tu', 'être', 'mon', 'seul', 'ami', 'et', 'je', 'te', 'aimer'];['comprendre', 'vie', 'perdre', 'aide', 'stp', 'maman', 'perdre', 'être', 'seul', 'ami', 'aimer']
完整代碼:
# -*- coding: UTF-8 -*-
import codecs
import re
import os
import sys, argparse
import subprocess
import pprint
import csv
from itertools import islice
import pickle
import nltk
from nltk import tokenize
from nltk.tokenize import sent_tokenize, word_tokenize
from nltk.corpus import stopwords
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='utf-8') as csv_file:
csv_file.readline()
for line in csv_file:
token = line.split(';')
try:
d[token[0]] = token[1]
except:
print(line)
print(d)
tagger = treetaggerwrapper.TreeTagger(TAGLANG='fr')
d_tag = {}
for key, val in d.items():
newvalues = tagger.tag_text(val)
d_tag[key] = newvalues
#print(d_tag)
#lemma dictionary
d_lemma = defaultdict(list)
for k, v in d_tag.items():
for p in v:
parts = p.split('\t')
try:
d_lemma[k].append(parts[2])
except:
print(parts)
print(d_lemma)
#filtered words
stopWords = set(stopwords.words('french'))
d_filtered_words = defaultdict(list)
d_filtered_words = {k: [w for w in l if w not in stopWords and w.isalpha()] for k, l in d_lemma.items()}
print(d_filtered_words)
#writing tags in the dictionary
with open("sortie.csv", "w") as output:
writer = csv.DictWriter(output, "w")
for k, v in d_tag.items():
writer.writerow(k)
writer.writerow(v)
您可能會發現只使用csv.reader()
和csv.writer()
來讀取和寫入文件更容易。 首先將文件讀入rows
,這些行將是rows
的列表。 這種方法意味着沒有必要將id
作為大字典中的密鑰進行跟蹤。 相反,行一次處理一行。
接下來從每行中取第二個元素( verbatim
)並計算您的標簽,引理和過濾的單詞。 如您所希望以列表樣式編寫,請使用str()
將每個列表轉換為字符串。 然后可以將這三個列表添加到現有row
的末尾(使用extend()
),然后可以將其寫入輸出文件:
import csv
# Read the CSV file into a list of lists
with open(sys.argv[1], 'r', encoding='utf-8', newline='') as f_input:
csv_input = csv.reader(f_input, delimiter=';')
header = next(csv_input)
rows = list(csv_input)
# Create the output CSV file
with open('sortie.csv', 'w', encoding='utf-8', newline='') as f_output:
csv_output = csv.writer(f_output, delimiter=';')
header.extend(['d_tag', 'd_lemma', 'd_filtered_words'])
csv_output.writerow(header)
# Process the data, one row at a time
for row in rows:
if row: # skip empty rows
verbatim = row[1]
# Calculate d_tag, d_lemma, d_filtered_words
tags = ['a\tb\tc', 'd\te\tf']
lemmas = ['1\t2\t3', '4\t5\t6']
filtered_words = ['u\tv\tw\t', 'x\ty\tz']
row.extend([str(tags), str(lemmas), str(filtered_words)])
csv_output.writerow(row)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.