使用 spaCy 和 Transformers 的 NER - 运行 循环内外时的不同结果

NER using spaCy & Transformers - different result when running inside and outside of a loop

我正在使用 NER (spacy & Transformer) 来查找和匿名化个人信息。我注意到直接提供输入行时得到的输出与从文件中读取输入行时得到的输出不同(见下面的屏幕截图)。有人对如何解决这个问题有建议吗?

这是我的代码:

import pandas as pd
import csv
import spacy
from spacy import displacy
from transformers import pipeline
import re

!python -m spacy download en_core_web_trf
nlp = spacy.load('en_core_web_trf')

sent = nlp('Yesterday I went out with Andrew, johanna and Jonathan Sparow.')
displacy.render(sent, style = 'ent')

with open('Synth_dataset_raw.txt', 'r') as fd:
    reader = csv.reader(fd)
    for row in reader:
        sent = nlp(str(row))
        displacy.render(sent, style = 'ent')

您正在使用 csv 模块读取您的文件,然后尝试将文件的每一行(又名行)转换为具有 str(row).

的字符串

如果您的文件每行只有一个句子,那么您根本不需要 csv 模块。你可以这样做

with open('Synth_dataset_raw.txt', 'r') as fd:
    for line in fd:
        # Remove the trailing newline
        line = line.rstrip()
        sent = nlp(line)
        displacy.render(sent, style = 'ent')

如果您实际上有一个 csv(可能有多个列和一个 header),您可以这样做

open('Synth_dataset_raw.txt', 'r') as fd:
    reader = csv.reader(fd)
    header = next(reader)
    text_column_index = 0
    for row in reader:
        sent = nlp(row[text_column_index])
        displacy.render(sent, style = 'ent')