簡體   English   中英

在csv文件中寫字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM