首页 > 解决方案 > 输出结果到 csv 文件 - TypeError writerow() 接受 2 个位置参数,但给出了 5 个

问题描述

我正在尝试将我的 spaCy NER 结果输出到 csv 文件而不是纯文本文件。

到目前为止,我有这段代码可以尝试实现这一目标:

def spacy_ner():
    with open("spacy_results.txt", "w") as f:

        cf = csv.DictWriter(f, ['Character', 'begin', 'end'\
                                , 'Label'], extrasaction='ignore')
        cf.writeheader()

        nlp = spacy.load('en_core_web_md')
        doc = nlp(text)

        for ent in doc.ents:
            if ent.label_ == 'PERSON':
                cf.writerow(ent.text, ent.start_char, ent.end_char, ent.label_)
        print("Processing done")

我不确定如何创建 csv 文件,同时尝试显示上述所有属性:ent.text, ent.start_char, ent.end_char, ent.label_

运行上面的代码调用TypeError: writerow() takes 2 positional arguments but 5 were given

如果我将结果写入 .txt 文件,它可以正常工作,但如果它是一个更结构化且易于访问的 csv 文件,那就太好了。

我在这里没有看到什么需要更改?任何帮助都会很棒!

标签: pythoncsvtypeerrorspacynamed-entity-recognition

解决方案


一个 csv.DictWriter 需要一个字典来写作。如果您的ent对象没有to_dict()方法,则必须创建一个。

    for ent in doc.ents:
        if ent.label_ == 'PERSON':
            d = {'Character':ent.text, 'begin':ent.start_char,
                 'end':ent.end_char,'Label':ent.label_}
            cf.writerow(d)

推荐阅读