【发布时间】:2020-10-21 09:14:37
【问题描述】:
我目前正在处理 NRE 任务,数据来自 wnut17train.conll (https://github.com/leondz/emerging_entities_17)。它基本上是推文的集合,其中每一行都是推文中的一个单词,并附有 IOB 标签(由\t 分隔)。不同的推文由一个空行分隔(实际上,如果你问我,很奇怪,一个'\t\n' 行)。
因此,作为参考,一条推文看起来像这样:
@paulwalk IOBtag
... ...
foo IOBtag
[\t\n]
@jerrybeam IOBtag
... ...
bar IOBtag
第一步的目标是实现我将这个数据集转换为如下所示的训练文件的情况:
train[0] = [(first_word_of_first_tweet, POStag, IOBtag),
(second_word_of_first_tweet, POStag, IOBtag),
...,
last_word_of_first_tweet, POStag, IOBtag)]
这是我目前想出的:
tmp = []
train = []
nlp = spacy.load("en_core_web_sm")
with open("wnut17train.conll") as f:
for l in f.readlines():
if l == '\t\n':
train.append(tmp)
tmp = []
else:
doc = nlp(l.split()[0])
for token in doc:
tmp.append((token.text, token.pos_, token.ent_iob_))
对于一定数量的推文(或行,还不确定),一切都很顺利,但在那之后我得到了一个
IndexError: list index out of range
由
提出doc = nlp(l.split()[0])
我第一次在第 20'000 行(准确地说是 20'533)附近得到它,然后在检查这不是由于文件引起的(可能是分离推文的不同方式,或者类似的东西可能会欺骗解析器)我删除了前 20'000 行并再次尝试。同样,在第 20'000 行(准确地说是原始文件中的 20'260 或 40'779)之后,我得到了一个错误。
我对@987654330@ 做了一些研究,看看这是否是一个已知问题,但看起来不是。我错过了什么吗?
【问题讨论】:
标签: python nlp named-entity-recognition readlines