Spacy:命名实体识别日期未按预期工作

Spacy : Named entity Recognition on dates not working as expected

我不确定我是否准确理解 spacy 如何识别文本中的命名实体,在我的例子中尤其是日期。

我正在尝试提取文本文档中的教育背景 + 相应日期。我有这样的东西

text = 'University of A  2019 - 2020
        University of B  2016 - 2019
        College A        2013 - 2016
        College B        2008 - 2013'
doc = nlp(text)
for ent in doc.ents:
     print(ent.text, ent.label_)

这给我输出:

University of A  ORG
University of B  ORG
2016 - 2019      DATE
2013 - 2016      DATE
2008 - 2013      DATE

正如预期的那样,大学被认为是组织,我预计 spacy 不会识别大学,因为它不如大学名称那么明显。但是我不明白为什么我错过了第一次约会,但其他的都很好。

我试过另一个类似这样的文本:

1997 : any text
1998 : any text
1999 : any text
...
2018 : any text

此处除了 2013 年和 2018 年之外的所有日期都被识别,尽管行的格式与其他所有行的格式相同。

有没有办法训练 spacy 以更好地识别日期,或者我应该使用其他工具?我已经在同一程序的其他部分使用 spacy。我现在不使用正则表达式,因为日期可以有多种不同的格式(只有年份、开始年份 - 结束年份,有时还有月份和日期,等等)

您需要一种功能更丰富的模型类型,带有 _md_lg 后缀的 spacy 2.x 和 _trf 带有 spacy 3.x .

例如,您可以安装

python -m spacy download en_core_web_trf

那么,您可以使用

import spacy
nlp = spacy.load('en_core_web_trf')
text = '''University of A  2019 - 2020
         University of B  2016 - 2019
         College A        2013 - 2016
         College B        2008 - 2013'''
doc = nlp(text)
for ent in doc.ents:
    print(ent.text, ent.label_)

输出:

2019 - 2020 DATE
2016 - 2019 DATE
2013 - 2016 DATE
2008 - 2013 DATE